UNPKG

tee-mo-core

Version:

133 lines (91 loc) 3.4 kB
import {validateModel} from './validation' import {mergerReducers} from './reducers' import {getSagas} from './effects' import {globalCancelSagas, plusCount} from './action' import teeMoCore from './model/teeMoCore' import {createStore, combineReducers, compose, applyMiddleware} from "redux" import createSagaMiddleware from "redux-saga"; import invariant from 'invariant' import enhance from './enhance' function createTeeMoStore() { const teeMoStore = { reduxStore: undefined, reduxSaga: undefined, defaultModelList: [teeMoCore], normalModelList: [], middlewares: [], addModel, delModel, clearModel, start, restart } return teeMoStore; function addModel(model) { const { defaultModelList, normalModelList, } = teeMoStore const modelList = [ ...defaultModelList, ...normalModelList, ] validateModel(model, modelList) const enhanceModel = enhance(model) teeMoStore.normalModelList.push(enhanceModel) return teeMoStore } function delModel(namespace) { const _ = m => m.namespace === namespace //不能删除系统默认的model invariant( !teeMoStore.defaultModelList.some(_), `[teeMo.delModel] 不可以删除一个系统默认的model , 当前传入期望删除的model的namespace为 [${namespace}]` ) const index = teeMoStore.normalModelList.findIndex(m => m.namespace === namespace) //namespace不存在 invariant(index !== -1, 'model不存在,无法进行删除操作') teeMoStore.normalModelList.splice(index, 1) return teeMoStore } function clearModel() { invariant(teeMoStore.reduxStore, `[teeMo.Store] 数据仓库尚未启动!`) teeMoStore.normalModelList = [] return teeMoStore; } function start() { const { defaultModelList, normalModelList, } = teeMoStore const modelList = [ ...defaultModelList, ...normalModelList, ] invariant(!teeMoStore.reduxStore, `[teeMo.Store] 数据仓库已经启动!`) const composeEnhancers = window["__REDUX_DEVTOOLS_EXTENSION_COMPOSE__"] || compose; teeMoStore.reduxSaga = createSagaMiddleware(); const defaultMiddlewares = [teeMoStore.reduxSaga] teeMoStore.reduxStore = createStore( combineReducers(mergerReducers(modelList)), composeEnhancers(applyMiddleware(...defaultMiddlewares, ...teeMoStore.middlewares)) ) teeMoStore.reduxSaga.run(getSagas(modelList)) return teeMoStore } function restart() { invariant(teeMoStore.reduxStore, `[teeMo.Store] 数据仓库尚未启动!`) const { defaultModelList, normalModelList, reduxStore } = teeMoStore const modelList = [ ...defaultModelList, ...normalModelList, ] reduxStore.replaceReducer(combineReducers(mergerReducers(modelList))) reduxStore.dispatch(plusCount()) reduxStore.dispatch(globalCancelSagas()) teeMoStore.reduxSaga.run(getSagas(modelList)) return teeMoStore } } export default createTeeMoStore