Files
frigate/web-new/src/context/use-persistence.tsx
Josh Hawkins 696434b36d Initial framework for new UI with React/Typescript (#8885)
* Write a low resolution low fps stream from decoded frames (#8673)

* Generate low res low fps previews for recordings viewer

* Make sure previews end on the hour

* Fix durations and decrase keyframe interval to ensure smooth scrubbing

* Ensure minimized resolution is compatible with yuv

* Add ability to configure preview quality

* Fix

* Clean up previews more efficiently

* Use iterator

* Ensure final frame in preview is not duplicated

* initial react/ts framework

* fix gitignore glob excluding ts files

* ignore folders in web-new

* SWRConfig changes for swr 2.x

* use frigateConfig type in websocket handlers

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
2024-01-31 12:56:11 +00:00

40 lines
889 B
TypeScript

import { useEffect, useState, useCallback } from "react";
import { get as getData, set as setData } from "idb-keyval";
export function usePersistence(
key: string,
defaultValue: string | boolean | undefined = undefined
) {
const [value, setInternalValue] = useState(defaultValue);
const [loaded, setLoaded] = useState(false);
const setValue = useCallback(
(value: string | boolean) => {
setInternalValue(value);
async function update() {
await setData(key, value);
}
update();
},
[key]
);
useEffect(() => {
setLoaded(false);
setInternalValue(defaultValue);
async function load() {
const value = await getData(key);
if (typeof value !== "undefined") {
setValue(value);
}
setLoaded(true);
}
load();
}, [key, defaultValue, setValue]);
return [value, setValue, loaded];
}