"use client"; import { useEffect, useState } from "react"; import { Infinity, FileText } from "lucide-react"; import { cn } from "@/lib/utils"; const STORAGE_KEY = "pinkudex.infiniteScroll"; const EVENT_NAME = "pinkudex:infinite-scroll-toggled"; export function readInfiniteScrollEnabled(): boolean { if (typeof window === "undefined") return true; try { const raw = localStorage.getItem(STORAGE_KEY); if (raw === "0") return false; return true; } catch { return true; } } function writeInfiniteScrollEnabled(value: boolean): void { try { localStorage.setItem(STORAGE_KEY, value ? "1" : "0"); } catch { /* ignore */ } try { window.dispatchEvent(new CustomEvent(EVENT_NAME, { detail: value })); } catch { /* ignore */ } } /** * Subscribe to toggle changes from anywhere in the app. Returns the * current value. Updates synchronously when the toggle is flipped. */ export function useInfiniteScrollEnabled(): boolean { const [enabled, setEnabled] = useState(true); useEffect(() => { setEnabled(readInfiniteScrollEnabled()); const onChange = (e: Event) => { const next = (e as CustomEvent).detail; setEnabled(next); }; window.addEventListener(EVENT_NAME, onChange); // Cross-tab updates via the storage event. const onStorage = (e: StorageEvent) => { if (e.key === STORAGE_KEY) setEnabled(readInfiniteScrollEnabled()); }; window.addEventListener("storage", onStorage); return () => { window.removeEventListener(EVENT_NAME, onChange); window.removeEventListener("storage", onStorage); }; }, []); return enabled; } export function InfiniteScrollToggle() { const enabled = useInfiniteScrollEnabled(); return ( ); }