Files
cozsweet-frontend-nextjs/src/providers/root-providers.tsx
T

53 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
/**
* 根级 Client Providers 包装
*
* 把所有功能 Provider 串起来:
* AuthProvider → UserProvider → SidebarProvider → ChatProvider
* + AuthStatusChecker(启动时一次:派发 AuthInit
* + OAuthSessionSync (持续监听 NextAuth session → auth machine
* + UserAuthSync auth 登录态恢复后 hydrate user machine
* + ChatAuthSync (持续监听 auth loginStatus → chat machine
*
* 它们始终挂载,保证各页面直接 `use*State()` / `use*Dispatch()` 即可,
* 无需在每个页面单独包裹。
*/
import type { ReactNode } from "react";
import { AuthProvider } from "@/stores/auth/auth-context";
import { AuthStatusChecker } from "@/stores/auth/auth-status-checker";
import { OAuthSessionSync } from "@/stores/auth/oauth-session-sync";
import { ChatAuthSync } from "@/stores/chat/chat-auth-sync";
import { ChatProvider } from "@/stores/chat/chat-context";
import { SidebarProvider } from "@/stores/sidebar/sidebar-context";
import { UserAuthSync } from "@/stores/user/user-auth-sync";
import { UserProvider } from "@/stores/user/user-context";
export interface RootProvidersProps {
children: ReactNode;
}
export function RootProviders({ children }: RootProvidersProps) {
return (
<AuthProvider>
{/* AuthStatusChecker 必须在 AuthProvider 内部(依赖 useAuthDispatch),
* 必须在 UserProvider/ChatProvider 外部(它们可能在 init 完成前就 mount */}
<AuthStatusChecker />
{/* OAuthSessionSync 同样依赖 AuthProvider 上下文 */}
<OAuthSessionSync />
<UserProvider>
<UserAuthSync />
<SidebarProvider>
<ChatProvider>
<ChatAuthSync />
{children}
<div id="toast-portal" />
</ChatProvider>
</SidebarProvider>
</UserProvider>
</AuthProvider>
);
}