Spaces:
Sleeping
Sleeping
File size: 703 Bytes
05c5ed5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | "use client";
import { getStorageManager } from "lib/browser-stroage";
import { isFunction } from "lib/utils";
import {
Dispatch,
SetStateAction,
useCallback,
useMemo,
useState,
} from "react";
export const useStateWithBrowserStorage = <T>(
key: string,
fallbackValue?: T,
) => {
const storage = useMemo(() => getStorageManager<T>(key), [key]);
const [state, _setState] = useState<T>(storage.get(fallbackValue!));
const setState = useCallback<Dispatch<SetStateAction<T>>>(
(value) => {
const nextValue = isFunction(value) ? value(state) : value;
storage.set(nextValue);
_setState(nextValue);
},
[state],
);
return [state, setState] as const;
};
|