fix(sidebar): trigger logout from click

This commit is contained in:
2026-06-17 12:59:48 +08:00
parent 1152491088
commit c3f2f8d954
+5 -12
View File
@@ -1,6 +1,6 @@
"use client"; "use client";
import { useEffect, useRef } from "react"; import { useEffect } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { MobileShell } from "@/app/_components/core/mobile-shell"; import { MobileShell } from "@/app/_components/core/mobile-shell";
@@ -9,8 +9,6 @@ import { ROUTES } from "@/router/routes";
import { useAuthDispatch, useAuthState } from "@/stores/auth/auth-context"; import { useAuthDispatch, useAuthState } from "@/stores/auth/auth-context";
import { useUserDispatch, useUserState } from "@/stores/user/user-context"; import { useUserDispatch, useUserState } from "@/stores/user/user-context";
import type { UserView } from "@/models/user/user";
import { BackBar } from "./back-bar"; import { BackBar } from "./back-bar";
import { UserHeader, type SidebarUserState } from "./user-header"; import { UserHeader, type SidebarUserState } from "./user-header";
import { VipBenefitsCard } from "./vip-benefits-card"; import { VipBenefitsCard } from "./vip-benefits-card";
@@ -41,16 +39,11 @@ export function SidebarScreen() {
userDispatch({ type: "UserInit" }); userDispatch({ type: "UserInit" });
}, [userDispatch]); }, [userDispatch]);
const prevUserRef = useRef<UserView | null>(user.currentUser); const handleLogoutClick = () => {
useEffect(() => {
const wasLoggedIn = prevUserRef.current != null;
const isNowLoggedOut = user.currentUser == null;
prevUserRef.current = user.currentUser;
if (wasLoggedIn && isNowLoggedOut) {
authDispatch({ type: "AuthReset" }); authDispatch({ type: "AuthReset" });
userDispatch({ type: "UserLogout" });
router.replace(ROUTES.chat); router.replace(ROUTES.chat);
} };
}, [user.currentUser, authDispatch, router]);
// 状态派生:未登录 / 已登录未 VIP / 已登录 VIP // 状态派生:未登录 / 已登录未 VIP / 已登录 VIP
const sidebarState: SidebarUserState = const sidebarState: SidebarUserState =
@@ -111,7 +104,7 @@ export function SidebarScreen() {
id: "logout", id: "logout",
title: "Log out", title: "Log out",
destructive: true, destructive: true,
onClick: () => userDispatch({ type: "UserLogout" }), onClick: handleLogoutClick,
}, },
]} ]}
/> />