diff --git a/AppImage/app/layout.tsx b/AppImage/app/layout.tsx index 0fcdcb1..4ef752f 100644 --- a/AppImage/app/layout.tsx +++ b/AppImage/app/layout.tsx @@ -3,6 +3,7 @@ import type { Metadata } from "next" import { GeistSans } from "geist/font/sans" import { GeistMono } from "geist/font/mono" import { ThemeProvider } from "../components/theme-provider" +import { PollingConfigProvider } from "../lib/polling-config" import { Suspense } from "react" import "./globals.css" @@ -37,7 +38,7 @@ export default function RootLayout({ Loading...}> - {children} + {children} diff --git a/AppImage/lib/polling-config.tsx b/AppImage/lib/polling-config.tsx index 378f7a9..b0becb3 100644 --- a/AppImage/lib/polling-config.tsx +++ b/AppImage/lib/polling-config.tsx @@ -31,6 +31,8 @@ export function PollingConfigProvider({ children }: { children: ReactNode }) { // Load from localStorage on mount useEffect(() => { + if (typeof window === "undefined") return + const stored = localStorage.getItem(STORAGE_KEY) if (stored) { try { @@ -45,7 +47,9 @@ export function PollingConfigProvider({ children }: { children: ReactNode }) { const updateInterval = (key: keyof PollingIntervals, value: number) => { setIntervals((prev) => { const newIntervals = { ...prev, [key]: value } - localStorage.setItem(STORAGE_KEY, JSON.stringify(newIntervals)) + if (typeof window !== "undefined") { + localStorage.setItem(STORAGE_KEY, JSON.stringify(newIntervals)) + } return newIntervals }) } @@ -56,6 +60,13 @@ export function PollingConfigProvider({ children }: { children: ReactNode }) { export function usePollingConfig() { const context = useContext(PollingConfigContext) if (!context) { + // During SSR or when provider is not available, return defaults + if (typeof window === "undefined") { + return { + intervals: DEFAULT_INTERVALS, + updateInterval: () => {}, + } + } throw new Error("usePollingConfig must be used within PollingConfigProvider") } return context