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