123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- "use strict";
- import EventEmitter from 'event-emitter';
- import {createStore, compose, applyMiddleware} from 'redux';
- import {composeReducers} from 'redux-sac';
- import {effectsMiddleware} from 'redux-effex';
- import {persistStore, autoRehydrate} from 'redux-persist';
- import {REHYDRATE} from 'redux-persist/constants';
- import createActionBuffer from 'redux-action-buffer';
- 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),
- compose(
- autoRehydrate(),
- applyMiddleware(createActionBuffer(REHYDRATE), ...middlewares, effectsMiddleware(effects))
- )
- );
- const persistor = persistStore(store, persistOptions, err => {
- if (err) ee.emit('error', err);
- else ee.emit('rehydrate', store);
- });
- if (reset) persistor.purge();
- return store;
- }
- return {withReducers, withEffects, withPersistence, on, create};
- }
|