import { WebApplication } from '@/ui_models/application'; import { AppState } from '@/ui_models/app_state'; import { observer } from 'mobx-react-lite'; import { FunctionComponent } from 'preact'; import { useEffect, useState } from 'preact/hooks'; import { Checkbox } from '../Checkbox'; import { DecoratedInput } from '../DecoratedInput'; import { Icon } from '../Icon'; type Props = { application: WebApplication; appState: AppState; disabled?: boolean; onVaultChange?: (isVault: boolean, vaultedEmail?: string) => void; onStrictSignInChange?: (isStrictSignIn: boolean) => void; }; export const AdvancedOptions: FunctionComponent = observer( ({ appState, application, disabled = false, onVaultChange, onStrictSignInChange, children, }) => { const { server, setServer, enableServerOption, setEnableServerOption } = appState.accountMenu; const [showAdvanced, setShowAdvanced] = useState(false); const [isVault, setIsVault] = useState(false); const [vaultName, setVaultName] = useState(''); const [vaultUserphrase, setVaultUserphrase] = useState(''); const [isStrictSignin, setIsStrictSignin] = useState(false); useEffect(() => { const recomputeVaultedEmail = async () => { const vaultedEmail = await application.vaultToEmail( vaultName, vaultUserphrase ); if (!vaultedEmail) { if (vaultName?.length > 0 && vaultUserphrase?.length > 0) { application.alertService.alert('Unable to compute vault name.'); } return; } onVaultChange?.(true, vaultedEmail); }; if (vaultName && vaultUserphrase) { recomputeVaultedEmail(); } }, [vaultName, vaultUserphrase, application, onVaultChange]); useEffect(() => { onVaultChange?.(isVault); }, [isVault, onVaultChange]); const handleIsVaultChange = () => { setIsVault(!isVault); }; const handleVaultNameChange = (name: string) => { setVaultName(name); }; const handleVaultUserphraseChange = (userphrase: string) => { setVaultUserphrase(userphrase); }; const handleServerOptionChange = (e: Event) => { if (e.target instanceof HTMLInputElement) { setEnableServerOption(e.target.checked); } }; const handleSyncServerChange = (server: string) => { setServer(server); application.setCustomHost(server); }; const handleStrictSigninChange = () => { const newValue = !isStrictSignin; setIsStrictSignin(newValue); onStrictSignInChange?.(newValue); }; const toggleShowAdvanced = () => { setShowAdvanced(!showAdvanced); }; return ( <> {showAdvanced ? (
{children} {appState.enableUnfinishedFeatures && (
)} {appState.enableUnfinishedFeatures && isVault && ( <> ]} type="text" placeholder="Vault name" value={vaultName} onChange={handleVaultNameChange} disabled={disabled} /> ]} type="text" placeholder="Vault userphrase" value={vaultUserphrase} onChange={handleVaultUserphraseChange} disabled={disabled} /> )} {onStrictSignInChange && (
)} ]} placeholder="https://api.standardnotes.com" value={server} onChange={handleSyncServerChange} disabled={!enableServerOption && !disabled} />
) : null} ); } );