import { observer } from 'mobx-react-lite' import { useCloseOnClickOutside } from '@/Hooks/useCloseOnClickOutside' import { AppState } from '@/UIModels/AppState' import { WebApplication } from '@/UIModels/Application' import { useRef, useState } from 'preact/hooks' import { GeneralAccountMenu } from './GeneralAccountMenu' import { FunctionComponent } from 'preact' import { SignInPane } from './SignIn' import { CreateAccount } from './CreateAccount' import { ConfirmPassword } from './ConfirmPassword' import { JSXInternal } from 'preact/src/jsx' import { ApplicationGroup } from '@/UIModels/ApplicationGroup' export enum AccountMenuPane { GeneralMenu, SignIn, Register, ConfirmPassword, } type Props = { appState: AppState application: WebApplication onClickOutside: () => void mainApplicationGroup: ApplicationGroup } type PaneSelectorProps = { appState: AppState application: WebApplication mainApplicationGroup: ApplicationGroup menuPane: AccountMenuPane setMenuPane: (pane: AccountMenuPane) => void closeMenu: () => void } const MenuPaneSelector: FunctionComponent = observer( ({ application, appState, menuPane, setMenuPane, closeMenu, mainApplicationGroup }) => { 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 ( ) } }, ) export const AccountMenu: FunctionComponent = observer( ({ application, appState, onClickOutside, mainApplicationGroup }) => { const { currentPane, setCurrentPane, shouldAnimateCloseMenu, closeAccountMenu } = appState.accountMenu const ref = useRef(null) useCloseOnClickOutside(ref, () => { onClickOutside() }) 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 (
) }, )