UNPKG

@kirz/react-native-toolkit

Version:

Toolkit to speed up React Native development

43 lines 1.6 kB
import { useCallback, useContext, useEffect, useState } from 'react'; import { StorageContext } from '../contexts/StorageContext'; export function useStorage() { const { storage } = useContext(StorageContext); return storage; } const listeners = new Map(); export function useStoredState(key, initialState) { const storage = useStorage(); const [value, setValue] = useState(storage.getItem(key) ?? initialState); const setter = useCallback(newValue => { var _listeners$get2; if (typeof newValue === 'function') { var _listeners$get; // @ts-ignore const resultValue = newValue(value); storage.setItem(key, resultValue); (_listeners$get = listeners.get(key)) === null || _listeners$get === void 0 ? void 0 : _listeners$get.forEach(listener => { listener(resultValue); }); return; } storage.setItem(key, newValue); (_listeners$get2 = listeners.get(key)) === null || _listeners$get2 === void 0 ? void 0 : _listeners$get2.forEach(listener => { listener(newValue); }); }, [key, value, setValue, storage]); useEffect(() => { var _listeners$get3; if (!listeners.has(key)) { listeners.set(key, new Set()); } (_listeners$get3 = listeners.get(key)) === null || _listeners$get3 === void 0 ? void 0 : _listeners$get3.add(setValue); return () => { var _listeners$get4; (_listeners$get4 = listeners.get(key)) === null || _listeners$get4 === void 0 ? void 0 : _listeners$get4.delete(setValue); }; }, []); return [value, setter]; } //# sourceMappingURL=useStorage.js.map