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)}
+ />
+
+
-
-
-