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