import { createStore, combineReducers, combine, applyMiddleware } from 'redux'
import { handleActions } from 'redux-actions'
import { createSagaMiddleware, takeLatest, call } from 'redux-saga'
const FINAL_REDUCER = combineReducers({
'DOMAIN_A_KEY': handleActions({
'DOMAIN_A/REDUCER_1': (state, action) => {
(function(payload, action) {
})(action.payload, action);
},
'DOMAIN_A/REDUCER_2': (state, action) => {
(function(payload, action) {
})(action.payload, action);
},
'@@DOMAIN_A/RESET': (state, action) => {
(function(state, action) {
return this.defaultState;
})(state, action);
},
}, DOMAIN_A_DEFAULT_STATE),
'DOMAIN_B_KEY': handleActions({
'DOMAIN_B/REDUCER_1': (state, action) => {
(function(payload, action) {
})(action.payload, action);
},
'@@DOMAIN_B/RESET': (state, action) => {
(function(state, action) {
return this.defaultState;
})(state, action);
},
}, DOMAIN_B_DEFAULT_STATE),
});
const ROOT_SAGA = function*() {
yield [
takeLatest('DOMAIN_A/SAGA_1', function*(action) {
const callbacks = {
resolve: action.meta.callbacks && action.meta.callbacks.resolve || (() => {}),
reject: action.meta.callbacks && action.meta.callbacks.reject || (() => {}),
};
try {
const returnValue = yield call(function*() {
}, action);
callbacks.resolve(returnValue);
} catch (ex) {
callbacks.reject(ex);
throw ex;
}
}),
];
}
const MONITOR = { };
const SAGA_MIDDLEWARE_OPTIONS = {
sagaMonitor: MONITOR,
};
const SAGA_MIDDLEWARE = createSagaMiddleware(SAGA_MIDDLEWARE_OPTIONS);
const ENHANCERS = combine(...[
applyMiddleware(SAGA_MIDDLEWARE)
]);
const store = createStore(FINAL_REDUCER, PRELOADED_STATE, ENHANCERS);
SAGA_MIDDLEWARE.run(ROOT_SAGA);