refactor(app): move route screens out of components

Exclude test and spec files from generated barrels so page imports do not load test modules at runtime.
This commit is contained in:
2026-06-17 14:13:42 +08:00
parent cda76a1651
commit 287affa34a
16 changed files with 53 additions and 47 deletions
+61
View File
@@ -0,0 +1,61 @@
"use client";
/**
* Auth 屏
*
* 原始 Dart: lib/ui/auth/auth_screen.dart
*/
import { useEffect } from "react";
import { useRouter } from "next/navigation";
import { MobileShell } from "@/app/_components/core";
import { useAuthDispatch, useAuthState } from "@/stores/auth/auth-context";
import { useUserDispatch } from "@/stores/user/user-context";
import { ROUTES } from "@/router/routes";
import { AuthBackground, AuthPanel } from "./components";
import styles from "./components/auth-screen.module.css";
export function AuthScreen() {
const state = useAuthState();
const authDispatch = useAuthDispatch();
const userDispatch = useUserDispatch();
const router = useRouter();
// 邮箱登录成功 → 通知 User + 跳转
// 用 pendingRedirect flag(不是 useRef transition detection)——
// re-mount 时 flag 在 auth context 里持久,区分"刚按了"和"re-visit"准确无误。
useEffect(() => {
console.log("[auth-screen] useEffect (loginStatus + pendingRedirect)", {
pending: state.pendingRedirect,
loginStatus: state.loginStatus,
willRedirect:
state.pendingRedirect && state.loginStatus !== "notLoggedIn",
});
if (state.pendingRedirect && state.loginStatus !== "notLoggedIn") {
console.log(
"[auth-screen] useEffect → router.replace(/chat) [via pendingRedirect flag]",
);
authDispatch({ type: "AuthClearPendingRedirect" });
userDispatch({ type: "UserInit" });
router.replace(ROUTES.chat);
}
}, [
state.loginStatus,
state.pendingRedirect,
authDispatch,
userDispatch,
router,
]);
return (
<MobileShell>
<div className={styles.wrapper}>
<AuthBackground />
<div className={styles.content}>
<AuthPanel />
</div>
</div>
</MobileShell>
);
}