From a44142333ee3b35bb8567f4a71ddd40aac62d7e0 Mon Sep 17 00:00:00 2001 From: Luke <39926192+LukeWasTakenn@users.noreply.github.com> Date: Thu, 2 Feb 2023 11:28:59 +0100 Subject: [PATCH] refactor(web/menu): radial menu item removing and refreshing --- resource/interface/client/radial.lua | 57 ++++++++++++++++++++------ web/src/features/menu/radial/index.tsx | 4 ++ 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/resource/interface/client/radial.lua b/resource/interface/client/radial.lua index 07a72d1..4e366b2 100644 --- a/resource/interface/client/radial.lua +++ b/resource/interface/client/radial.lua @@ -1,30 +1,63 @@ local isOpen = false local menuItems = {} +local activeItems = {} + +local function getActiveItems() + activeItems = {} + for i = 1, #menuItems do + local item = menuItems[i] + if item.canInteract == nil or item.canInteract() then + activeItems[#activeItems+1] = { + icon = item.icon, + label = item.label, + key = item.key + } + end + end + return activeItems +end function lib.addRadialItem(items) if table.type(items) == 'array' then for i = 1, #items do - local itemOption = items[i] - menuItems[#menuItems+1] = itemOption + local item = items[i] + menuItems[#menuItems+1] = item end else menuItems[#menuItems+1] = items end end +function lib.removeRadialItem(key) + for i = 1, #menuItems do + local item = menuItems[i] + if item.key == key then + table.remove(menuItems, i) + end + end + if isOpen then + local refresh = false + for i = 1, #activeItems do + local activeItem = activeItems[i] + if activeItem.key == key then + table.remove(activeItems, i) + refresh = true + end + end + if refresh then + local items = getActiveItems() + SendNUIMessage({ + action = 'refreshItems', + data = items + }) + end + end +end + -- TODO: Interval canInteract checking and sending new items to NUI local function openRadial() isOpen = true - local items = {} - for i = 1, #menuItems do - local menuItem = menuItems[i] - if menuItem.canInteract == nil or menuItem.canInteract() then - items[#items+1] = { - icon = menuItem.icon, - label = menuItem.label - } - end - end + local items = getActiveItems() SendNUIMessage({ action = 'openRadialMenu', data = { diff --git a/web/src/features/menu/radial/index.tsx b/web/src/features/menu/radial/index.tsx index c5c1d60..9ad6173 100644 --- a/web/src/features/menu/radial/index.tsx +++ b/web/src/features/menu/radial/index.tsx @@ -68,6 +68,10 @@ const RadialMenu: React.FC = () => { setVisible(true); }); + useNuiEvent('refreshItems', (data: MenuItem[]) => { + setMenu({ ...menu, items: data }); + }); + const handleClick = (index: number) => { fetchNui('radialClick', index); // TODO: shouldClose