core-native
Version:
A lightweight framework based on React Native + Redux + Redux Saga, in strict TypeScript.
53 lines • 1.92 kB
JavaScript
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