UNPKG

redux-persist

Version:

persist and rehydrate redux stores

67 lines (56 loc) 2.08 kB
'use strict'; 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; }; var _require = require('redux'); var compose = _require.compose; var bufferActions = require('./bufferActions'); var constants = require('./constants'); module.exports = function autoRehydrate(config) { config = config || {}; return function (next) { return function (reducer, initialState) { var rehydrationReducer = createRehydrationReducer(reducer); // buffer actions var store = next(rehydrationReducer, initialState); var dispatch = compose(bufferActions(onBufferEnd), //@TODO middleware to unlift reducer? store.dispatch); return _extends({}, store, { dispatch: dispatch }); }; }; function onBufferEnd(err, queue) { if (config.log) { console.log('redux-persist/autoRehydrate Buffer Released', queue); } } function createRehydrationReducer(reducer) { return function (state, action) { if (action.type === constants.REHYDRATE) { var key = action.key; var data = action.payload; var reducedState = reducer(state, action); if (state[key] !== reducedState[key]) { if (config.log) { console.log('redux-persist/autoRehydrate sub state for key "%s" modified, skipping autoRehydrate', key); } return reducedState; } var subState = {}; for (var subkey in reducedState[key]) { subState[subkey] = reducedState[key][subkey]; } for (var subkey in data) { subState[subkey] = data[subkey]; } reducedState[key] = subState; if (config.log) { console.log('redux-persist/autoRehydrate key: %s, rehydrated to:', key, subState); } return reducedState; } else { return reducer(state, action); } }; } };