UNPKG

core-native

Version:

A lightweight framework based on React Native + Redux + Redux Saga, in strict TypeScript.

53 lines 1.92 kB
import { applyMiddleware, compose, createStore } from "redux"; import createSagaMiddleware from "redux-saga"; import { put, takeEvery } from "redux-saga/effects"; import { LoggerImpl } from "./Logger"; import { ERROR_ACTION_TYPE, errorAction, LOADING_ACTION, rootReducer } from "./reducer"; function composeWithDevTools(enhancer) { let composeEnhancers = compose; if (process.env.NODE_ENV !== "production") { const extension = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__; if (extension) { composeEnhancers = extension({ // Ref: https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md actionsBlacklist: [LOADING_ACTION], }); } } return composeEnhancers(enhancer); } function createApp() { const eventLogger = new LoggerImpl(); const sagaMiddleware = createSagaMiddleware(); const store = createStore(rootReducer(), composeWithDevTools(applyMiddleware(sagaMiddleware))); sagaMiddleware.run(function* rootSaga() { yield takeEvery("*", function* (action) { if (action.type === ERROR_ACTION_TYPE) { if (app.errorHandler) { yield* app.errorHandler(action.payload); } } else { const handler = app.actionHandlers[action.type]; if (handler) { try { yield* handler(...action.payload); } catch (error) { yield put(errorAction(error)); } } } }); }); return { store, sagaMiddleware, actionHandlers: {}, logger: eventLogger, errorHandler: null, loggerConfig: null, }; } export const app = createApp(); //# sourceMappingURL=app.js.map