react-principal
Version:
A state management with react context for apps which using hooks.
43 lines • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.persistReducer = exports.persisterCreator = void 0;
const utils_1 = require("./utils");
const INITIALIZE_STATE_FROM_STORAGE = Symbol();
exports.persisterCreator = function persisterCreator(Storage, key, mapStateToPersist) {
return {
persist(state, action) {
if (action.type !== INITIALIZE_STATE_FROM_STORAGE) {
Storage.setItem(key, JSON.stringify(mapStateToPersist ? mapStateToPersist(state) : state));
}
},
async setToState(storeRef) {
try {
const storedState = await Storage.getItem(key);
if (!storedState) {
return;
}
const stateObject = JSON.parse(storedState);
const { dispatch } = storeRef.current;
const mappedState = mapStateToPersist
? mapStateToPersist(stateObject)
: stateObject;
dispatch({
type: INITIALIZE_STATE_FROM_STORAGE,
payload: mappedState,
});
}
catch (error) {
if (utils_1.__DEV__) {
console.error(error);
}
}
},
};
};
exports.persistReducer = (reducer) => (state, action) => {
if (action.type === INITIALIZE_STATE_FROM_STORAGE) {
return { ...state, ...action.payload };
}
return reducer(state, action);
};
//# sourceMappingURL=persist.js.map