diff --git a/frontend/src/hooks/usePersistedState.ts b/frontend/src/hooks/usePersistedState.ts new file mode 100644 index 0000000..1524ad7 --- /dev/null +++ b/frontend/src/hooks/usePersistedState.ts @@ -0,0 +1,19 @@ +import { Dispatch, SetStateAction, useEffect, useState } from 'react'; + +type PersistedState = [T, Dispatch>]; + +function usePersistedState(defaultValue: T, key: string): PersistedState { + const [value, setValue] = useState(() => { + const value = window.localStorage.getItem(key); + + return value ? (JSON.parse(value) as T) : defaultValue; + }); + + useEffect(() => { + window.localStorage.setItem(key, JSON.stringify(value)); + }, [key, value]); + + return [value, setValue]; +} + +export { usePersistedState };