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[];
position?: MenuPosition;
disableInput?: boolean;
onClose?: () => void;
canClose?: boolean;
onClose?: (keyPressed?: 'Escape' | 'Backspace') => void;
onSelected?: ChangeFunction;
onSideScroll?: ChangeFunction;
}

View File

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

View File

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