mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-02-23 00:18:31 +01:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
|
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<StreamingSettingsContextType | null>(null);
|
||
|
|
||
|
export function StreamingSettingsProvider({
|
||
|
children,
|
||
|
}: {
|
||
|
children: ReactNode;
|
||
|
}) {
|
||
|
const [allGroupsStreamingSettings, setAllGroupsStreamingSettings] =
|
||
|
useState<AllGroupsStreamingSettings>({});
|
||
|
|
||
|
const [
|
||
|
persistedGroupStreamingSettings,
|
||
|
setPersistedGroupStreamingSettings,
|
||
|
isPersistedStreamingSettingsLoaded,
|
||
|
] = usePersistence<AllGroupsStreamingSettings>("streaming-settings");
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (isPersistedStreamingSettingsLoaded) {
|
||
|
setAllGroupsStreamingSettings(persistedGroupStreamingSettings ?? {});
|
||
|
}
|
||
|
}, [isPersistedStreamingSettingsLoaded, persistedGroupStreamingSettings]);
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (Object.keys(allGroupsStreamingSettings).length) {
|
||
|
setPersistedGroupStreamingSettings(allGroupsStreamingSettings);
|
||
|
}
|
||
|
}, [allGroupsStreamingSettings, setPersistedGroupStreamingSettings]);
|
||
|
|
||
|
return (
|
||
|
<StreamingSettingsContext.Provider
|
||
|
value={{
|
||
|
allGroupsStreamingSettings,
|
||
|
setAllGroupsStreamingSettings,
|
||
|
isPersistedStreamingSettingsLoaded,
|
||
|
}}
|
||
|
>
|
||
|
{children}
|
||
|
</StreamingSettingsContext.Provider>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// 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;
|
||
|
}
|