blob: 1809e07c1cc1019748d7671b0e4a92cadc9855bd (
plain)
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
32
33
34
35
|
import { LocalStorage } from '../../services/local-storage';
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
export type UseLocalStorageReturn<T> = {
value: T;
setValue: Dispatch<SetStateAction<T>>;
};
/**
* Use the local storage.
*
* @param {string} key - The storage local key.
* @param {T} [fallbackValue] - A fallback value if local storage is empty.
* @returns {UseLocalStorageReturn<T>} An object with value and setValue.
*/
const useLocalStorage = <T extends unknown>(
key: string,
fallbackValue: T
): UseLocalStorageReturn<T> => {
const getInitialValue = () => {
if (typeof window === 'undefined') return fallbackValue;
const storedValue = LocalStorage.get<T>(key);
return storedValue || fallbackValue;
};
const [value, setValue] = useState<T>(getInitialValue);
useEffect(() => {
LocalStorage.set(key, value);
}, [key, value]);
return { value, setValue };
};
export default useLocalStorage;
|