"use client"; import { getStorageManager } from "lib/browser-stroage"; import { isFunction } from "lib/utils"; import { Dispatch, SetStateAction, useCallback, useMemo, useState, } from "react"; export const useStateWithBrowserStorage = ( key: string, fallbackValue?: T, ) => { const storage = useMemo(() => getStorageManager(key), [key]); const [state, _setState] = useState(storage.get(fallbackValue!)); const setState = useCallback>>( (value) => { const nextValue = isFunction(value) ? value(state) : value; storage.set(nextValue); _setState(nextValue); }, [state], ); return [state, setState] as const; };