From e79678ffdf4ae9b927406afcb7ba8bdd9213dfd8 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 21 May 2024 05:43:18 +0300 Subject: [PATCH] fix(accessibility): space and enter keys didn't click buttons in UI --- src/controls.ts | 8 +++++-- src/react/KeybindingsScreen.tsx | 40 +++++++++++++++----------------- src/react/SignEditorProvider.tsx | 5 ---- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/controls.ts b/src/controls.ts index b23d3beb..80abb2c0 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -87,10 +87,14 @@ export type Command = CommandEventArgument['comma // updateCustomBinds() -export const setDoPreventDefault = (state: boolean) => { - controlOptions.preventDefault = state +const updateDoPreventDefault = () => { + controlOptions.preventDefault = miscUiState.gameLoaded && !activeModalStack.length } +subscribe(miscUiState, updateDoPreventDefault) +subscribe(activeModalStack, updateDoPreventDefault) +updateDoPreventDefault() + const setSprinting = (state: boolean) => { bot.setControlState('sprint', state) gameAdditionalState.isSprinting = state diff --git a/src/react/KeybindingsScreen.tsx b/src/react/KeybindingsScreen.tsx index 97126655..57d7d7ef 100644 --- a/src/react/KeybindingsScreen.tsx +++ b/src/react/KeybindingsScreen.tsx @@ -55,8 +55,8 @@ export default ( } const handleClick: HandleClick = (group, action, index, type) => { - //@ts-expect-error - setAwaitingInputType(type) + (document.activeElement as HTMLElement)?.blur() + setAwaitingInputType(type as any) updateCurrBind(group, action) setButtonNum(prev => index) } @@ -96,16 +96,8 @@ export default ( updateBindMap() }, [userConfig]) - // const updateKeyboardBinding = (e: import('react').KeyboardEvent) => { - // if (!e.code || e.key === 'Escape' || !awaitingInputType) return - // setBinding({ code: e.code, state: true }, groupName, actionName, buttonNum) - // } - - const updateBinding = (data: any) => { - if ((!data.state && awaitingInputType) || !awaitingInputType) { - setAwaitingInputType(null) - return - } + const updateBinding = (data) => { + if (data.state === true || !awaitingInputType) return if ('code' in data) { if (data.code === 'Escape' || ['Mouse0', 'Mouse1', 'Mouse2'].includes(data.code)) { setAwaitingInputType(null) @@ -164,10 +156,14 @@ export default ( }, []) useEffect(() => { + if (!awaitingInputType) return contro.on('pressedKeyOrButtonChanged', updateBinding) + const preventDefault = (e) => e.preventDefault() + document.addEventListener('keydown', preventDefault, { passive: false }) return () => { contro.off('pressedKeyOrButtonChanged', updateBinding) + document.removeEventListener('keydown', preventDefault) } }, [groupName, actionName, awaitingInputType]) @@ -206,7 +202,7 @@ export default ( {Object.entries(actions).map(([action, { keys, gamepad }]) => { return
{parseActionName(action)}
- +