Files
twenty/front/src/modules/command-menu/components/CommandMenu.tsx
Lucas Bordeau 66dcc9b2e1 Feat/better hotkeys scope (#526)
* Working version

* fix

* Fixed console log

* Fix lint

* wip

* Fix

* Fix

* consolelog

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2023-07-07 18:53:05 -07:00

108 lines
2.7 KiB
TypeScript

import { useRecoilState } from 'recoil';
import { useHotkeysScopeOnBooleanState } from '@/hotkeys/hooks/useHotkeysScopeOnBooleanState';
import { useScopedHotkeys } from '@/hotkeys/hooks/useScopedHotkeys';
import { InternalHotkeysScope } from '@/hotkeys/types/internal/InternalHotkeysScope';
import { isCommandMenuOpenedState } from '../states/isCommandMenuOpened';
import { CommandMenuItem } from './CommandMenuItem';
import {
StyledDialog,
StyledEmpty,
StyledGroup,
StyledInput,
StyledList,
// StyledSeparator,
} from './CommandMenuStyles';
export function CommandMenu() {
const [open, setOpen] = useRecoilState(isCommandMenuOpenedState);
useScopedHotkeys(
'ctrl+k,meta+k',
() => {
setOpen((prevOpen) => !prevOpen);
},
InternalHotkeysScope.CommandMenu,
[setOpen],
);
useHotkeysScopeOnBooleanState(
{ scope: InternalHotkeysScope.CommandMenu },
open,
);
/*
TODO: Allow performing actions on page through CommandBar
import { useMatch, useResolvedPath } from 'react-router-dom';
import { IconBuildingSkyscraper, IconUser } from '@/ui/icons';
const createSection = (
<StyledGroup heading="Create">
<CommandMenuItem
label="Create People"
onClick={createPeople}
icon={<IconUser />}
shortcuts={
!!useMatch({
path: useResolvedPath('/people').pathname,
end: true,
})
? ['C']
: []
}
/>
<CommandMenuItem
label="Create Company"
onClick={createCompany}
icon={<IconBuildingSkyscraper />}
shortcuts={
!!useMatch({
path: useResolvedPath('/companies').pathname,
end: true,
})
? ['C']
: []
}
/>
</StyledGroup>
);*/
return (
<StyledDialog
open={open}
onOpenChange={setOpen}
label="Global Command Menu"
>
<StyledInput placeholder="Search" />
<StyledList>
<StyledEmpty>No results found.</StyledEmpty>
<StyledGroup heading="Navigate">
<CommandMenuItem
to="/people"
label="Go to People"
shortcuts={['G', 'P']}
/>
<CommandMenuItem
to="/companies"
label="Go to Companies"
shortcuts={['G', 'C']}
/>
<CommandMenuItem
to="/opportunities"
label="Go to Opportunities"
shortcuts={['G', 'O']}
/>
<CommandMenuItem
to="/settings/profile"
label="Go to Settings"
shortcuts={['G', 'S']}
/>
</StyledGroup>
</StyledList>
</StyledDialog>
);
}