import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { isNonEmptyString } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; import { Key } from 'ts-key-enum'; export const useCommandMenuHotKeys = () => { const { openRecordsSearchPage, toggleCommandMenu, goBackFromCommandMenu, setGlobalCommandMenuContext, } = useCommandMenu(); const commandMenuSearch = useRecoilValue(commandMenuSearchState); const { closeKeyboardShortcutMenu } = useKeyboardShortcutMenu(); const commandMenuPage = useRecoilValue(commandMenuPageState); const contextStoreTargetedRecordsRuleComponent = useRecoilComponentValueV2( contextStoreTargetedRecordsRuleComponentState, COMMAND_MENU_COMPONENT_INSTANCE_ID, ); useScopedHotkeys( 'ctrl+k,meta+k', () => { closeKeyboardShortcutMenu(); toggleCommandMenu(); }, AppHotkeyScope.CommandMenu, [closeKeyboardShortcutMenu, toggleCommandMenu], ); useScopedHotkeys( ['/'], () => { openRecordsSearchPage(); }, AppHotkeyScope.KeyboardShortcutMenu, [openRecordsSearchPage], { ignoreModifiers: true, }, ); useScopedHotkeys( [Key.Escape], () => { goBackFromCommandMenu(); }, AppHotkeyScope.CommandMenuOpen, [goBackFromCommandMenu], ); useScopedHotkeys( [Key.Backspace, Key.Delete], () => { if (isNonEmptyString(commandMenuSearch)) { return; } if ( commandMenuPage === CommandMenuPages.Root && !( contextStoreTargetedRecordsRuleComponent.mode === 'selection' && contextStoreTargetedRecordsRuleComponent.selectedRecordIds.length === 0 ) ) { setGlobalCommandMenuContext(); } if (commandMenuPage !== CommandMenuPages.Root) { goBackFromCommandMenu(); } }, AppHotkeyScope.CommandMenuOpen, [ commandMenuPage, commandMenuSearch, contextStoreTargetedRecordsRuleComponent, goBackFromCommandMenu, setGlobalCommandMenuContext, ], { preventDefault: false, }, ); };