mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-18 23:46:03 +01:00
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user