import { ErrorContent } from 'components/ErrorContent'; import { Loading } from 'components/Loading'; import { usePromise, usePromiseLazy } from 'hooks/usePromise'; import React, { useState } from 'react' import { useTranslation } from 'react-i18next'; import { AiOutlineLeft } from 'react-icons/ai'; import { useNavigate } from 'react-router-dom'; import { Config, getConfig, getProfile, Profile, setConfig, setProfile } from 'services/config'; import { composeLoadable } from 'utils/composeLoadable'; import classNames from 'classnames'; import { useLogin } from 'services/s3si'; import { STAT_INK } from 'constant'; const Page: React.FC<{ children?: React.ReactNode }> = ({ children }) => { const { t } = useTranslation(); const navigate = useNavigate(); return

{t('配置')}

{children}
} type FormData = { config: Config, profile: Profile, } const Form: React.FC<{ oldValue: FormData, onSaved?: () => void, }> = ({ oldValue, onSaved }) => { const { login } = useLogin(); const { t } = useTranslation(); const [value, setValue] = useState(oldValue); const changed = JSON.stringify(value) !== JSON.stringify(oldValue); const setSessionToken = (t: string) => setValue({ ...value, profile: { ...value.profile, state: { ...value.profile.state, loginState: { ...value.profile.state.loginState, sessionToken: t, }, } } }) const [onSave, { loading, error }] = usePromiseLazy(async () => { await setProfile(0, value.profile); await setConfig(value.config); onSaved?.(); }) const [onLogin, loginState] = usePromiseLazy(async () => { const result = await login(); if (!result) { return; } setSessionToken(result.sessionToken); }) return <>
setSessionToken(e.target.value)} />
setValue({ ...value, profile: { ...value.profile, state: { ...value.profile.state, statInkApiKey: e.target.value, } } })} />
} export const Settings: React.FC = () => { let { loading, error, retry, result } = composeLoadable({ config: usePromise(getConfig), profile: usePromise(() => getProfile(0)), }); if (loading) { return
} if (error) { return } return {result &&
} }