import { observer } from 'mobx-react-lite'; import { toDirective } from '@/components/utils'; import { AppState } from '@/ui_models/app_state'; import { WebApplication } from '@/ui_models/application'; import { useState } from 'preact/hooks'; import { GeneralAccountMenu } from './GeneralAccountMenu'; import { FunctionComponent } from 'preact'; import { SignInPane } from './SignIn'; import { CreateAccount } from './CreateAccount'; import { ConfirmSignoutContainer } from '../ConfirmSignoutModal'; import { ConfirmPassword } from './ConfirmPassword'; import { JSXInternal } from 'preact/src/jsx'; export enum AccountMenuPane { GeneralMenu, SignIn, Register, ConfirmPassword, } type Props = { appState: AppState; application: WebApplication; }; type PaneSelectorProps = Props & { menuPane: AccountMenuPane; setMenuPane: (pane: AccountMenuPane) => void; closeMenu: () => void; }; const MenuPaneSelector: FunctionComponent = observer( ({ application, appState, menuPane, setMenuPane, closeMenu }) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); switch (menuPane) { case AccountMenuPane.GeneralMenu: return ( ); case AccountMenuPane.SignIn: return ( ); case AccountMenuPane.Register: return ( ); case AccountMenuPane.ConfirmPassword: return ( ); } } ); const AccountMenu: FunctionComponent = observer( ({ application, appState }) => { const { currentPane, setCurrentPane, shouldAnimateCloseMenu, closeAccountMenu, } = appState.accountMenu; const handleKeyDown: JSXInternal.KeyboardEventHandler = ( event ) => { switch (event.key) { case 'Escape': if (currentPane === AccountMenuPane.GeneralMenu) { closeAccountMenu(); } else if (currentPane === AccountMenuPane.ConfirmPassword) { setCurrentPane(AccountMenuPane.Register); } else { setCurrentPane(AccountMenuPane.GeneralMenu); } break; } }; return (
); } ); export const AccountMenuDirective = toDirective(AccountMenu);