"use client"; import { useEffect, useState } from "react"; import { initElectric, isElectricInitialized } from "@/lib/electric/client"; interface ElectricProviderProps { children: React.ReactNode; } /** * ElectricProvider initializes the Electric SQL client with PGlite * * This provider ensures Electric is initialized before rendering children, * but doesn't block if initialization fails (app can still work without real-time sync) */ export function ElectricProvider({ children }: ElectricProviderProps) { const [initialized, setInitialized] = useState(false); const [error, setError] = useState(null); useEffect(() => { // Skip if already initialized if (isElectricInitialized()) { setInitialized(true); return; } let mounted = true; async function init() { try { await initElectric(); if (mounted) { setInitialized(true); setError(null); } } catch (err) { console.error("Failed to initialize Electric SQL:", err); if (mounted) { setError(err instanceof Error ? err : new Error("Failed to initialize Electric SQL")); // Don't block rendering if Electric SQL fails - app can still work setInitialized(true); } } } init(); return () => { mounted = false; }; }, []); // Show loading state only briefly, then render children // Electric SQL will sync in the background if (!initialized) { return (
Initializing...
); } // If there's an error, still render children but log the error if (error) { console.warn("Electric SQL initialization failed, notifications may not sync:", error.message); } return <>{children}; }