mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 06:56:03 +01:00
feat(web/context): mouse enter and mouse leave events (#218)
* feat(web/context): mouse enter and mouse leave events * chore(web/context): condense into one function for onHover * feat(resource/context): cache last hovered option
This commit is contained in:
committed by
GitHub
parent
6fe8f5257f
commit
7a22da68e6
@@ -1,4 +1,5 @@
|
||||
local contextMenus = {}
|
||||
local lastHoveredContextItem = nil
|
||||
local openContextMenu = nil
|
||||
local keepInput = IsNuiFocusKeepingInput()
|
||||
|
||||
@@ -8,6 +9,7 @@ local keepInput = IsNuiFocusKeepingInput()
|
||||
---@field icon? string
|
||||
---@field iconColor? string
|
||||
---@field onSelect? fun(args: any)
|
||||
---@field onHover? fun(hoverState: boolean, args: any)
|
||||
---@field arrow? boolean
|
||||
---@field description? string
|
||||
---@field metadata? string | { [string]: any } | string[]
|
||||
@@ -41,9 +43,25 @@ local function closeContext(_, cb, onExit)
|
||||
|
||||
if not cb then SendNUIMessage({ action = 'hideContext' }) end
|
||||
|
||||
if lastHoveredContextItem then
|
||||
local data = contextMenus[openContextMenu].options[lastHoveredContextItem]
|
||||
if data.onHover then data.onHover(false, data.args) end
|
||||
lastHoveredContextItem = nil
|
||||
end
|
||||
|
||||
openContextMenu = nil
|
||||
end
|
||||
|
||||
local function checkID(id)
|
||||
if math.type(tonumber(id)) == 'float' then
|
||||
id = math.tointeger(id)
|
||||
elseif tonumber(id) then
|
||||
id += 1
|
||||
end
|
||||
|
||||
return id
|
||||
end
|
||||
|
||||
---@param id string
|
||||
function lib.showContext(id)
|
||||
if not contextMenus[id] then error('No context menu of such id found.') end
|
||||
@@ -89,14 +107,11 @@ RegisterNUICallback('openContext', function(data, cb)
|
||||
lib.showContext(data.id)
|
||||
end)
|
||||
|
||||
|
||||
RegisterNUICallback('clickContext', function(id, cb)
|
||||
cb(1)
|
||||
|
||||
if math.type(tonumber(id)) == 'float' then
|
||||
id = math.tointeger(id)
|
||||
elseif tonumber(id) then
|
||||
id += 1
|
||||
end
|
||||
local id = checkID(id)
|
||||
|
||||
local data = contextMenus[openContextMenu].options[id]
|
||||
|
||||
@@ -110,12 +125,35 @@ RegisterNUICallback('clickContext', function(id, cb)
|
||||
if data.event then TriggerEvent(data.event, data.args) end
|
||||
if data.serverEvent then TriggerServerEvent(data.serverEvent, data.args) end
|
||||
|
||||
if lastHoveredContextItem then
|
||||
local data = contextMenus[openContextMenu].options[lastHoveredContextItem]
|
||||
if data.onHover then data.onHover(false, data.args) end
|
||||
lastHoveredContextItem = nil
|
||||
end
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'hideContext'
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNUICallback('onHover', function(data, cb)
|
||||
cb(1)
|
||||
|
||||
local id = checkID(data.id)
|
||||
local hoverState = data.hoverState
|
||||
|
||||
local data = contextMenus[openContextMenu].options[id]
|
||||
|
||||
if not data.onHover then return end
|
||||
|
||||
if data.onHover and hoverState == true then
|
||||
lastHoveredContextItem = id
|
||||
data.onHover(true, data.args)
|
||||
end
|
||||
if data.onHover and hoverState == false then
|
||||
lastHoveredContextItem = nil
|
||||
data.onHover(false, data.args)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNUICallback('closeContext', closeContext)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user