"use client"; import { createContext, useContext, useEffect, useState } from "react"; const STORAGE_KEY = "organize:board-view"; // A plain string union rather than an enum -- adding a future view is just // one more literal here plus one more radio item in ViewSwitcher. export type BoardView = "default" | "compact"; interface BoardViewContextValue { view: BoardView; setView: (view: BoardView) => void; } const BoardViewContext = createContext(null); export function BoardViewProvider({ children }: { children: React.ReactNode }) { // Default to "default" on both server and first client render to avoid a // hydration mismatch; the real persisted value is applied right after // mount, trading a one-frame flash for zero hydration warnings. const [view, setViewState] = useState("default"); useEffect(() => { const stored = localStorage.getItem(STORAGE_KEY); if (stored === "default" || stored === "compact") setViewState(stored); }, []); function setView(next: BoardView) { setViewState(next); localStorage.setItem(STORAGE_KEY, next); } return ( {children} ); } export function useBoardView() { const ctx = useContext(BoardViewContext); if (!ctx) throw new Error("useBoardView must be used within a BoardViewProvider"); return ctx; }