35 lines
879 B
TypeScript
35 lines
879 B
TypeScript
"use client";
|
|
|
|
import { useEffect, type ReactNode } from "react";
|
|
|
|
import { Toaster } from "@/components/ui/sonner";
|
|
import { ErrorProvider } from "@/components/error-provider";
|
|
import { IframeBridge } from "@/components/iframe-bridge";
|
|
import { TokenRefreshIndicator } from "@/components/token-refresh-indicator";
|
|
import "@/i18n";
|
|
import { syncPreferredLanguage } from "@/i18n";
|
|
|
|
type ProvidersProps = {
|
|
children: ReactNode;
|
|
};
|
|
|
|
export function Providers({ children }: ProvidersProps): ReactNode {
|
|
useEffect(() => {
|
|
syncPreferredLanguage();
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<ErrorProvider>
|
|
{/* iframe 通信桥接 - 支持主站嵌入 */}
|
|
<IframeBridge>
|
|
{children}
|
|
{/* Token 续签指示器 - 显示在右下角 */}
|
|
<TokenRefreshIndicator />
|
|
</IframeBridge>
|
|
</ErrorProvider>
|
|
<Toaster />
|
|
</>
|
|
);
|
|
}
|