import { observer } from 'mobx-react-lite' import { useCloseOnClickOutside } from '@/Hooks/useCloseOnClickOutside' import { ViewControllerManager } from '@/Services/ViewControllerManager' import { WebApplication } from '@/Application/Application' import { useCallback, useRef, FunctionComponent, KeyboardEventHandler } from 'react' import { ApplicationGroup } from '@/Application/ApplicationGroup' import { AccountMenuPane } from './AccountMenuPane' import MenuPaneSelector from './MenuPaneSelector' type Props = { viewControllerManager: ViewControllerManager application: WebApplication onClickOutside: () => void mainApplicationGroup: ApplicationGroup } const AccountMenu: FunctionComponent = ({ application, viewControllerManager, onClickOutside, mainApplicationGroup, }) => { const { currentPane, shouldAnimateCloseMenu } = viewControllerManager.accountMenuController const closeAccountMenu = useCallback(() => { viewControllerManager.accountMenuController.closeAccountMenu() }, [viewControllerManager]) const setCurrentPane = useCallback( (pane: AccountMenuPane) => { viewControllerManager.accountMenuController.setCurrentPane(pane) }, [viewControllerManager], ) const ref = useRef(null) useCloseOnClickOutside(ref, () => { onClickOutside() }) const handleKeyDown: KeyboardEventHandler = useCallback( (event) => { switch (event.key) { case 'Escape': if (currentPane === AccountMenuPane.GeneralMenu) { closeAccountMenu() } else if (currentPane === AccountMenuPane.ConfirmPassword) { setCurrentPane(AccountMenuPane.Register) } else { setCurrentPane(AccountMenuPane.GeneralMenu) } break } }, [closeAccountMenu, currentPane, setCurrentPane], ) return (
) } export default observer(AccountMenu)