UNPKG

@kirz/react-native-toolkit

Version:

Toolkit to speed up React Native development

50 lines (49 loc) 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useStorage = useStorage; exports.useStoredState = useStoredState; var _react = require("react"); var _StorageContext = require("../contexts/StorageContext"); function useStorage() { const { storage } = (0, _react.useContext)(_StorageContext.StorageContext); return storage; } const listeners = new Map(); function useStoredState(key, initialState) { const storage = useStorage(); const [value, setValue] = (0, _react.useState)(storage.getItem(key) ?? initialState); const setter = (0, _react.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]); (0, _react.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