From 27729dacc65988757a203e1ad25655608e552494 Mon Sep 17 00:00:00 2001 From: imspace Date: Tue, 7 Mar 2023 04:04:00 +0800 Subject: [PATCH] feat: add sesionToken field in settings --- gui/src/main.css | 6 ++++ gui/src/pages/Home.tsx | 21 ++++++++++++++ gui/src/pages/Settings.tsx | 57 +++++++++++++++++++++++++++++++++----- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/gui/src/main.css b/gui/src/main.css index 0a64731..c485c46 100644 --- a/gui/src/main.css +++ b/gui/src/main.css @@ -34,3 +34,9 @@ body { background-color: #2f2f2f; } } + +/* custom classes */ + +.flex-auto-all > * { + @apply flex-auto; +} diff --git a/gui/src/pages/Home.tsx b/gui/src/pages/Home.tsx index 179157d..8419323 100644 --- a/gui/src/pages/Home.tsx +++ b/gui/src/pages/Home.tsx @@ -1,10 +1,31 @@ +import { ErrorContent } from 'components/ErrorContent'; +import { Loading } from 'components/Loading'; +import { usePromise } from 'hooks/usePromise'; import React from 'react' import { useTranslation } from 'react-i18next'; import { Link } from "react-router-dom"; +import { getConfig, getProfile } from 'services/config'; +import { composeLoadable } from 'utils/composeLoadable'; export const Home: React.FC = () => { + let { loading, error, retry, result } = composeLoadable({ + config: usePromise(getConfig), + profile: usePromise(() => getProfile(0)), + }); const { t } = useTranslation(); + if (loading) { + return <> +
+ + } + + if (error) { + return <> + + + } + return <>
{t('欢迎!')} diff --git a/gui/src/pages/Settings.tsx b/gui/src/pages/Settings.tsx index 62eef60..f678525 100644 --- a/gui/src/pages/Settings.tsx +++ b/gui/src/pages/Settings.tsx @@ -8,6 +8,7 @@ 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'; const Page: React.FC<{ children?: React.ReactNode }> = ({ children }) => { const { t } = useTranslation(); @@ -27,20 +28,60 @@ 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)} + /> +
+
-
- - +
+