"use client"; import { type ReactNode, useState, useEffect } from "react"; import { RepoContext } from "@automerge/automerge-repo-react-hooks"; import type { Repo } from "@automerge/automerge-repo"; export default function Providers({ children }: { children: ReactNode }) { const [repo, setRepo] = useState(null); const [error, setError] = useState(null); useEffect(() => { let cleanup: (() => void) | undefined; let handleBeforeUnload: (() => void) | undefined; import("../lib/repo.js").then(({ getRepo, cleanupRepo }) => { const r = getRepo(); setRepo(r); cleanup = cleanupRepo; handleBeforeUnload = () => { r.networkSubsystem.adapters.forEach((adapter) => adapter.disconnect()); }; window.addEventListener("beforeunload", handleBeforeUnload); }).catch(() => { setError("Failed to initialize. Please refresh the page."); }); return () => { if (handleBeforeUnload) { window.removeEventListener("beforeunload", handleBeforeUnload); } cleanup?.(); }; }, []); if (error) { return
{error}
; } if (!repo) { return
Loading...
; } return {children}; }