12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- "use strict";
- import EventEmitter from 'event-emitter';
- import {createStore, applyMiddleware} from 'redux';
- import {composeReducers} from 'redux-sac';
- import {effectsMiddleware} from 'redux-effex';
- import {persistStore} from 'redux-persist';
- export default () => {
- const ee = new EventEmitter();
- function on (event, handler) {
- ee.on(event, handler);
- return this;
- }
- let persistOptions = {};
- function withPersistence (_persistOptions) {
- persistOptions = _persistOptions;
- return this;
- }
- let reducers = [], effects = [], middlewares = [];
- function withReducers (..._reducers) {
- reducers.push(..._reducers);
- return this;
- }
- function withEffects (..._effects) {
- effects.push(..._effects);
- return this;
- }
- function withMiddlewares (..._middlewares) {
- middlewares.push(..._middlewares);
- return this;
- }
- function create (reset = false) {
- const store = createStore(
- composeReducers(...reducers),
- applyMiddleware(...middlewares, effectsMiddleware(effects))
- );
- const persistor = persistStore(store, persistOptions, () => ee.emit('rehydrate', store));
- if (reset) persistor.purge();
- return store;
- }
- return {withReducers, withMiddlewares, withEffects, withPersistence, on, create};
- }
|