Merge pull request #105 from BerkieBb/master

keyPressed for onClose
This commit is contained in:
Luke
2022-09-25 15:17:48 +02:00
committed by GitHub
3 changed files with 12 additions and 8 deletions

View File

@@ -18,7 +18,8 @@ interface MenuProps {
options: MenuOptions[]; options: MenuOptions[];
position?: MenuPosition; position?: MenuPosition;
disableInput?: boolean; disableInput?: boolean;
onClose?: () => void; canClose?: boolean;
onClose?: (keyPressed?: 'Escape' | 'Backspace') => void;
onSelected?: ChangeFunction; onSelected?: ChangeFunction;
onSideScroll?: ChangeFunction; onSideScroll?: ChangeFunction;
} }

View File

@@ -1,4 +1,6 @@
---@type { [string]: MenuProps }
local registeredMenus = {} local registeredMenus = {}
---@type MenuProps | nil
local openMenu = nil local openMenu = nil
local keepInput = IsNuiFocusKeepingInput() local keepInput = IsNuiFocusKeepingInput()
@@ -19,7 +21,8 @@ local keepInput = IsNuiFocusKeepingInput()
---@field options MenuOptions[] ---@field options MenuOptions[]
---@field position? MenuPosition ---@field position? MenuPosition
---@field disableInput? boolean ---@field disableInput? boolean
---@field onClose? fun() ---@field canClose? boolean
---@field onClose? fun(keyPressed?: 'Escape' | 'Backspace')
---@field onSelected? MenuChangeFunction ---@field onSelected? MenuChangeFunction
---@field onSideScroll? MenuChangeFunction ---@field onSideScroll? MenuChangeFunction
@@ -45,7 +48,7 @@ function lib.showMenu(id, startIndex)
if not openMenu then if not openMenu then
CreateThread(function() CreateThread(function()
while openMenu do while openMenu do
if not openMenu.disableInput then if openMenu.disableInput == nil or openMenu.disableInput then
DisablePlayerFiring(cache.playerId, true) DisablePlayerFiring(cache.playerId, true)
HudWeaponWheelIgnoreSelection() HudWeaponWheelIgnoreSelection()
DisableControlAction(0, 140, true) DisableControlAction(0, 140, true)
@@ -165,6 +168,6 @@ RegisterNUICallback('closeMenu', function(data, cb)
openMenu = nil openMenu = nil
if menu.onClose then if menu.onClose then
menu.onClose() menu.onClose(data --[[@as 'Escape' | 'Backspace' | nil]])
end end
end) end)

View File

@@ -37,10 +37,10 @@ const ListMenu: React.FC = () => {
const [indexStates, setIndexStates] = useState<Record<number, number>>({}); const [indexStates, setIndexStates] = useState<Record<number, number>>({});
const listRefs = useRef<Array<HTMLDivElement | null>>([]); const listRefs = useRef<Array<HTMLDivElement | null>>([]);
const closeMenu = (ignoreFetch?: boolean) => { const closeMenu = (ignoreFetch?: boolean, keyPressed?: string) => {
if (menu.canClose === false) return; if (menu.canClose === false) return;
setVisible(false); setVisible(false);
if (!ignoreFetch) fetchNui('closeMenu'); if (!ignoreFetch) fetchNui('closeMenu', keyPressed);
}; };
const moveMenu = (e: React.KeyboardEvent<HTMLDivElement>) => { const moveMenu = (e: React.KeyboardEvent<HTMLDivElement>) => {
@@ -111,7 +111,7 @@ const ListMenu: React.FC = () => {
if (!visible) return; if (!visible) return;
const keyHandler = (e: KeyboardEvent) => { const keyHandler = (e: KeyboardEvent) => {
if (['Escape', 'Backspace'].includes(e.code)) closeMenu(); if (['Escape', 'Backspace'].includes(e.code)) closeMenu(false, e.code);
}; };
window.addEventListener('keydown', keyHandler); window.addEventListener('keydown', keyHandler);