( id: string, initialState: T = null, )
| 2 | import {useApplication} from '../contexts'; |
| 3 | |
| 4 | export function useStorage<T>( |
| 5 | id: string, |
| 6 | initialState: T = null, |
| 7 | ): [T, (newState: T) => void, boolean] { |
| 8 | const name = useApplication().project.name; |
| 9 | const key = `${name}-${id}`; |
| 10 | const [savedState, wasLoaded] = useMemo(() => { |
| 11 | const savedState = localStorage.getItem(key); |
| 12 | return savedState ? [JSON.parse(savedState), true] : [initialState, false]; |
| 13 | }, [key]); |
| 14 | const [state, setState] = useState<T>(savedState); |
| 15 | |
| 16 | const updateState = useCallback( |
| 17 | (newState: T) => { |
| 18 | if (key) { |
| 19 | localStorage.setItem(key, JSON.stringify(newState)); |
| 20 | } |
| 21 | setState(newState); |
| 22 | }, |
| 23 | [setState, key], |
| 24 | ); |
| 25 | |
| 26 | return [state, updateState, wasLoaded]; |
| 27 | } |
no test coverage detected