UNPKG

redux-persist

Version:

persist and rehydrate redux stores

114 lines (92 loc) 3.62 kB
'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = persistStore; var _redux = require('redux'); var _persistReducer = require('./persistReducer'); var _persistReducer2 = _interopRequireDefault(_persistReducer); var _constants = require('./constants'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var initialState = { registry: [], bootstrapped: false }; var persistorReducer = function persistorReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments[1]; switch (action.type) { case _constants.REGISTER: return _extends({}, state, { registry: [].concat(_toConsumableArray(state.registry), [action.key]) }); case _constants.REHYDRATE: var firstIndex = state.registry.indexOf(action.key); var registry = [].concat(_toConsumableArray(state.registry)); registry.splice(firstIndex, 1); return _extends({}, state, { registry: registry, bootstrapped: registry.length === 0 }); default: return state; } }; function persistStore(store, options, cb) { options = options || {}; // help catch incorrect usage of passing PersistConfig in as PersistorOptions if (process.env.NODE_ENV !== 'production') { var bannedKeys = ['blacklist', 'whitelist', 'transforms', 'storage', 'keyPrefix', 'migrate']; bannedKeys.forEach(function (k) { // $FlowIgnore if (!!options[k]) console.error('redux-persist: invalid option passed to persistStore: "' + k + '". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.'); }); } var boostrappedCb = cb || false; var persistor = (0, _redux.createStore)(persistorReducer, undefined, options.enhancer); persistor.purge = function () { var results = []; store.dispatch({ type: _constants.PURGE, result: function result(purgeResult) { results.push(purgeResult); } }); return Promise.all(results); }; persistor.flush = function () { var results = []; store.dispatch({ type: _constants.FLUSH, result: function result(flushResult) { results.push(flushResult); } }); return Promise.all(results); }; persistor.pause = function () { store.dispatch({ type: _constants.PAUSE }); }; var register = function register(key) { persistor.dispatch({ type: _constants.REGISTER, key: key }); }; var rehydrate = function rehydrate(key, payload, err) { var rehydrateAction = { type: _constants.REHYDRATE, payload: payload, err: err, key: key // dispatch to `store` to rehydrate and `persistor` to track result };store.dispatch(rehydrateAction); persistor.dispatch(rehydrateAction); if (boostrappedCb && persistor.getState().bootstrapped) { boostrappedCb(); boostrappedCb = false; } }; persistor.persist = function () { store.dispatch({ type: _constants.PERSIST, register: register, rehydrate: rehydrate }); }; persistor.persist(); return persistor; }