Composing decorator for redux-storage to use different storage types like redux-storage-engine-localstorage or redux-storage-engine-sessionstorage including custom engines (i.e. to load information from cookies) in a single application.
npm install --save redux-storage-decorator-engines
Along with redux-storage-decorator-filter you can define different persistence policy for each part of a state. Simply create the stores as you normally would do and wrap them with the decorator.
import engines from 'redux-storage-decorator-engines';
import filter from 'redux-storage-decorator-filter';
import createLocalStorageEngine from 'redux-storage-engine-localstorage';
import createSessionStorageEngine from 'redux-storage-engine-sessionstorage';
const localStorageEngine = filter(createLocalStorageEngine('redux'), ['todos']);
const sessionStorageEngine = filter(createSessionStorageEngine('redux'), ['visibilityFilter']);
const storageEngine = engines([
localStorageEngine,
sessionStorageEngine
]);
To include information from a cookie in a redux state for later easy access simply provide a custom storage engine:
import Cookies from 'js-cookie';
const cookieStorage = {
load() {
const state = {
cookie: Cookies.get('cookie')
};
return Promise.resolve(state);
},
save() {
return Promise.resolve();
}
};
const storageEngine = engines([
localStorageEngine,
sessionStorageEngine,
cookieStorage
]);
NOTE: If the same state key is loaded from more than one storage engine an application state upon load is not deterministic. A final state depends on the actual order of the loads. In such a case a warning message is emitted on non-production environments (an environment is considered a production if NODE_ENV is set to production).
redux-storage-decorator-engines is published under Apache License 2.0.