abb-core
Version:
Application Build Butler Core
101 lines (100 loc) • 4.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var __1 = require("../../..");
var redux_1 = require("redux");
var redux_thunk_1 = require("redux-thunk");
var immutable_1 = require("immutable");
var ABBCoreAPI = /** @class */ (function () {
function ABBCoreAPI() {
this.coreIsInitializedPromise = __1.ABBTimedPromiseFactory.create();
this.routerIsInitializedPromise = __1.ABBTimedPromiseFactory.create();
this.translatorIsInitializedPromise = __1.ABBTimedPromiseFactory.create();
this._store = redux_1.createStore(function (globalState, action) {
var mutableState = Object.assign({}, globalState);
var reducersMapObject = {
pluginReducer: ABBCoreAPI.createPluginReducer()
};
var stateToReducerMap = {
pluginReducer: {
plugins: globalState.plugins
}
};
globalState.plugins.forEach(function (pluginData) {
var actionCreator = pluginData.actionCreator;
if (actionCreator) {
reducersMapObject = Object.assign({}, reducersMapObject, actionCreator.getReducersMapObject());
stateToReducerMap = Object.assign({}, stateToReducerMap, actionCreator.getStateToReducerMapObject(globalState));
}
});
for (var _i = 0, _a = Object.entries(reducersMapObject); _i < _a.length; _i++) {
var _b = _a[_i], reducerName = _b[0], reducer = _b[1];
if (action.type === __1.ABBActionTypes.INIT_STATE) {
mutableState = ABBCoreAPI.initState(reducer, action, mutableState);
}
else {
mutableState = ABBCoreAPI.executeReducer(reducer, stateToReducerMap[reducerName], action, mutableState);
}
}
return mutableState;
}, ABBCoreAPI.getPreloadedState(), redux_1.applyMiddleware(redux_thunk_1.default));
}
Object.defineProperty(ABBCoreAPI.prototype, "Store", {
get: function () {
return {
dispatch: this._store.dispatch,
getState: this._store.getState,
subscribe: this._store.subscribe
};
},
enumerable: true,
configurable: true
});
ABBCoreAPI.initState = function (reducer, action, state) {
var reducerResult = reducer(undefined, action);
return Object.assign({}, reducerResult, state); // make sure initialState will not override existing
};
ABBCoreAPI.executeReducer = function (reducer, reducerState, action, state) {
var reducerResult = reducer(reducerState, action);
return Object.assign({}, state, reducerResult);
};
ABBCoreAPI.createPluginReducer = function () {
return function (state, action) {
switch (action.type) {
case __1.ABBActionTypes.ADD_PLUGIN:
return Object.assign({}, state, {
plugins: state.plugins.set(action.plugin.name, action.plugin)
});
default:
return state;
}
};
};
ABBCoreAPI.getPreloadedState = function () {
return {
plugins: immutable_1.Map(),
};
};
ABBCoreAPI.initStateAction = function (actionCreator) {
return function (dispatch) {
dispatch({
type: __1.ABBActionTypes.INIT_STATE,
actionCreator: actionCreator
});
};
};
ABBCoreAPI.addPluginAction = function (name, instancePromise, actionCreator) {
return function (dispatch) {
dispatch({
type: __1.ABBActionTypes.ADD_PLUGIN,
plugin: {
name: name,
instancePromise: instancePromise,
actionCreator: actionCreator
}
});
dispatch(ABBCoreAPI.initStateAction(actionCreator));
};
};
return ABBCoreAPI;
}());
exports.ABBCoreAPI = ABBCoreAPI;