From 2d48d2f536e57218d446d912d39368428e80d8ac Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sat, 6 Dec 2025 17:01:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(client):=20=E7=99=BB=E5=BD=95=E6=B3=A8?= =?UTF-8?q?=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ui/Main.tsx | 16 ++++-- client/ui/main-page/LoginDialog.tsx | 40 +++++++-------- client/ui/main-page/RegisterDialog.tsx | 69 ++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 24 deletions(-) create mode 100644 client/ui/main-page/RegisterDialog.tsx diff --git a/client/ui/Main.tsx b/client/ui/Main.tsx index 0743b15..e55bdea 100644 --- a/client/ui/Main.tsx +++ b/client/ui/Main.tsx @@ -2,16 +2,17 @@ import isMobileUI from "../utils/isMobileUI.ts" import useEventListener from "../utils/useEventListener.ts" import AvatarMySelf from "./AvatarMySelf.tsx" import MainSharedContext from './MainSharedContext.ts' -import React from "react" +import * as React from 'react' import { BrowserRouter, Outlet, Route, Routes } from "react-router" import LoginDialog from "./main-page/LoginDialog.tsx" import useAsyncEffect from "../utils/useAsyncEffect.ts" import performAuth from "../performAuth.ts" import { CallbackError } from "lingchair-client-protocol" +import showCircleProgressDialog from "./showCircleProgressDialog.ts" +import RegisterDialog from "./main-page/RegisterDialog.tsx" +import sleep from "../utils/sleep.ts" export default function Main() { - const [showLoginDialog, setShowLoginDialog] = React.useState(false) - // 多页面切换 const navigationRef = React.useRef() const [currentShowPage, setCurrentShowPage] = React.useState('Recents') @@ -20,14 +21,19 @@ export default function Main() { setCurrentShowPage((event.target as HTMLElementWithValue).value) }) + const [showLoginDialog, setShowLoginDialog] = React.useState(false) + const [showRegisterDialog, setShowRegisterDialog] = React.useState(false) + const sharedContext = { ui_functions: React.useRef({ }), setShowLoginDialog, + setShowRegisterDialog, } useAsyncEffect(async () => { + const waitingForAuth = showCircleProgressDialog("验证中...") try { await performAuth({}) } catch (e) { @@ -35,6 +41,9 @@ export default function Main() { if (e.code == 401 || e.code == 400) setShowLoginDialog(true) } + // 动画都没来得及, 稍微等一下 ( + await sleep(100) + waitingForAuth.open = false }) return ( @@ -53,6 +62,7 @@ export default function Main() { } + { /** * Default: 侧边列表提供列表切换 diff --git a/client/ui/main-page/LoginDialog.tsx b/client/ui/main-page/LoginDialog.tsx index 4ab3240..aff495c 100644 --- a/client/ui/main-page/LoginDialog.tsx +++ b/client/ui/main-page/LoginDialog.tsx @@ -2,32 +2,16 @@ import * as React from 'react' import { Button, Dialog, TextField } from "mdui" import performAuth from '../../performAuth.ts' -import useEventListener from '../../utils/useEventListener.ts' import showSnackbar from '../../utils/showSnackbar.ts' +import MainSharedContext from '../MainSharedContext.ts' export default function LoginDialog({ ...props }: { open: boolean } & React.HTMLAttributes) { + const shared = React.useContext(MainSharedContext) + const loginDialogRef = React.useRef(null) - const loginButtonRef = React.useRef