96 lines
		
	
	
		
			No EOL
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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 |