import { observer } from 'mobx-react-lite' import { useCloseOnClickOutside } from '@/Hooks/useCloseOnClickOutside' import { AppState } from '@/UIModels/AppState' import { WebApplication } from '@/UIModels/Application' import { useCallback, useRef, FunctionComponent, KeyboardEventHandler } from 'react' import { ApplicationGroup } from '@/UIModels/ApplicationGroup' import { AccountMenuPane } from './AccountMenuPane' import MenuPaneSelector from './MenuPaneSelector' type Props = { appState: AppState application: WebApplication onClickOutside: () => void mainApplicationGroup: ApplicationGroup } const AccountMenu: FunctionComponent = ({ application, appState, onClickOutside, mainApplicationGroup }) => { const { currentPane, shouldAnimateCloseMenu } = appState.accountMenu const closeAccountMenu = useCallback(() => { appState.accountMenu.closeAccountMenu() }, [appState]) const setCurrentPane = useCallback( (pane: AccountMenuPane) => { appState.accountMenu.setCurrentPane(pane) }, [appState], ) 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)