Something went wrong. Try again.
A lexicon-driven AppView for ATProto.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748"use client";
import { createContext, useCallback, useContext, useMemo, useRef, useState } from "react";
interface RestartContextType { reasons: string[]; addReason: (key: string, reason: string) => void; removeReason: (key: string) => void;}
const RestartContext = createContext<RestartContextType>({ reasons: [], addReason: () => {}, removeReason: () => {},});
export function RestartProvider({ children }: { children: React.ReactNode }) { const [reasonMap, setReasonMap] = useState<Record<string, string>>({}); const reasonMapRef = useRef(reasonMap); reasonMapRef.current = reasonMap;
const addReason = useCallback((key: string, reason: string) => { if (reasonMapRef.current[key] === reason) return; setReasonMap((prev) => ({ ...prev, [key]: reason })); }, []);
const removeReason = useCallback((key: string) => { setReasonMap((prev) => { if (!(key in prev)) return prev; const next = { ...prev }; delete next[key]; return next; }); }, []);
const reasons = useMemo(() => Object.values(reasonMap), [reasonMap]);
return ( <RestartContext.Provider value={{ reasons, addReason, removeReason }}> {children} </RestartContext.Provider> );}
export function useRestart() { return useContext(RestartContext);}