Main/resources/[carscripts]/community_bridge/modules/menu/lation_ui/client.lua
2025-08-06 16:37:06 +02:00

96 lines
No EOL
2.8 KiB
Lua

local resourceName = "lation_ui"
local configValue = BridgeClientConfig.MenuSystem
if (configValue == "auto" and GetResourceState(resourceName) ~= "started") or (configValue ~= "auto" and configValue ~= resourceName) then return end
Menus = Menus or {}
local function runCheckForImageIcon(icon)
local iconStr = tostring(icon):lower()
if iconStr:match("^https?://") or iconStr:match("^nui://") or iconStr:match("^file://") then
return true
end
local extensions = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg", ".webp", ".ico"}
for _, ext in pairs(extensions) do
if iconStr:match(ext .. "$") then
return true
end
end
return false
end
---Converts a QB menu to an Lation menu.
---@param id string The menu ID.
---@param menu table The QB menu data.
---@return table The Lation menu data.
local function QBToLationMenu(id, menu)
local lationMenu = {
id = id,
title = "",
canClose = true,
options = {},
}
for i, v in pairs(menu) do
if v.isMenuHeader then
if lationMenu.title == "" then
lationMenu.title = v.header
end
else
local option = {
title = v.header,
description = v.txt,
icon = v.icon,
args = v.params.args,
onSelect = function(selected, secondary, args)
local params = menu[id]?.options?[selected]?.params
if not params then return end
local event = params.event
local isServer = params.isServer
if not event then return end
if isServer then
return TriggerServerEvent(event, args)
end
return TriggerEvent(event, args)
end
}
table.insert(lationMenu.options, option)
end
end
return lationMenu
end
local function OxToLationMenu(data)
local repack = {
id = data.id,
title = data.title or "",
canClose = data.canClose ~= false,
options = {}
}
-- Handle icon colors: remove for image icons, convert strings to hex for others
for k, v in pairs(data.options) do
if v.iconColor then
if v.icon and runCheckForImageIcon(v.icon) then
v.iconColor = nil
end
end
table.insert(repack.options, v)
end
return repack
end
function OpenMenu(id, data, useQBinput)
if useQBinput then
data = QBToLationMenu(id, data)
else
data = OxToLationMenu(data)
end
exports.lation_ui:registerMenu(data)
exports.lation_ui:showMenu(id)
return data
end
function GetMenuResourceName()
return resourceName
end