import { createContext, useState, useEffect, ReactNode, useContext, } from "react"; import { AllGroupsStreamingSettings } from "@/types/frigateConfig"; import { usePersistence } from "@/hooks/use-persistence"; type StreamingSettingsContextType = { allGroupsStreamingSettings: AllGroupsStreamingSettings; setAllGroupsStreamingSettings: (settings: AllGroupsStreamingSettings) => void; isPersistedStreamingSettingsLoaded: boolean; }; const StreamingSettingsContext = createContext(null); export function StreamingSettingsProvider({ children, }: { children: ReactNode; }) { const [allGroupsStreamingSettings, setAllGroupsStreamingSettings] = useState({}); const [ persistedGroupStreamingSettings, setPersistedGroupStreamingSettings, isPersistedStreamingSettingsLoaded, ] = usePersistence("streaming-settings"); useEffect(() => { if (isPersistedStreamingSettingsLoaded) { setAllGroupsStreamingSettings(persistedGroupStreamingSettings ?? {}); } }, [isPersistedStreamingSettingsLoaded, persistedGroupStreamingSettings]); useEffect(() => { if (Object.keys(allGroupsStreamingSettings).length) { setPersistedGroupStreamingSettings(allGroupsStreamingSettings); } }, [allGroupsStreamingSettings, setPersistedGroupStreamingSettings]); return ( {children} ); } // eslint-disable-next-line react-refresh/only-export-components export function useStreamingSettings() { const context = useContext(StreamingSettingsContext); if (!context) { throw new Error( "useStreamingSettings must be used within a StreamingSettingsProvider", ); } return context; }