import { WebApplication } from '@/UIModels/Application' import { AppState } from '@/UIModels/AppState' import { observer } from 'mobx-react-lite' import { FunctionComponent } from 'preact' import { useEffect, useState } from 'preact/hooks' import { Checkbox } from '@/Components/Checkbox' import { DecoratedInput } from '@/Components/Input/DecoratedInput' import { Icon } from '@/Components/Icon' type Props = { application: WebApplication appState: AppState disabled?: boolean onPrivateWorkspaceChange?: (isPrivate: boolean, identifier?: string) => void onStrictSignInChange?: (isStrictSignIn: boolean) => void } export const AdvancedOptions: FunctionComponent = observer( ({ appState, application, disabled = false, onPrivateWorkspaceChange, onStrictSignInChange, children }) => { const { server, setServer, enableServerOption, setEnableServerOption } = appState.accountMenu const [showAdvanced, setShowAdvanced] = useState(false) const [isPrivateWorkspace, setIsPrivateWorkspace] = useState(false) const [privateWorkspaceName, setPrivateWorkspaceName] = useState('') const [privateWorkspaceUserphrase, setPrivateWorkspaceUserphrase] = useState('') const [isStrictSignin, setIsStrictSignin] = useState(false) useEffect(() => { const recomputePrivateWorkspaceIdentifier = async () => { const identifier = await application.computePrivateWorkspaceIdentifier( privateWorkspaceName, privateWorkspaceUserphrase, ) if (!identifier) { if (privateWorkspaceName?.length > 0 && privateWorkspaceUserphrase?.length > 0) { application.alertService.alert('Unable to compute private workspace name.').catch(console.error) } return } onPrivateWorkspaceChange?.(true, identifier) } if (privateWorkspaceName && privateWorkspaceUserphrase) { recomputePrivateWorkspaceIdentifier().catch(console.error) } }, [privateWorkspaceName, privateWorkspaceUserphrase, application, onPrivateWorkspaceChange]) useEffect(() => { onPrivateWorkspaceChange?.(isPrivateWorkspace) }, [isPrivateWorkspace, onPrivateWorkspaceChange]) const handleIsPrivateWorkspaceChange = () => { setIsPrivateWorkspace(!isPrivateWorkspace) } const handlePrivateWorkspaceNameChange = (name: string) => { setPrivateWorkspaceName(name) } const handlePrivateWorkspaceUserphraseChange = (userphrase: string) => { setPrivateWorkspaceUserphrase(userphrase) } const handleServerOptionChange = (e: Event) => { if (e.target instanceof HTMLInputElement) { setEnableServerOption(e.target.checked) } } const handleSyncServerChange = (server: string) => { setServer(server) application.setCustomHost(server).catch(console.error) } const handleStrictSigninChange = () => { const newValue = !isStrictSignin setIsStrictSignin(newValue) onStrictSignInChange?.(newValue) } const toggleShowAdvanced = () => { setShowAdvanced(!showAdvanced) } return ( <> {showAdvanced ? (
{children}
{isPrivateWorkspace && ( <> ]} type="text" placeholder="Userphrase" value={privateWorkspaceUserphrase} onChange={handlePrivateWorkspaceUserphraseChange} disabled={disabled} /> ]} type="text" placeholder="Name" value={privateWorkspaceName} onChange={handlePrivateWorkspaceNameChange} disabled={disabled} /> )} {onStrictSignInChange && (
)} ]} placeholder="https://api.standardnotes.com" value={server} onChange={handleSyncServerChange} disabled={!enableServerOption && !disabled} />
) : null} ) }, )