import SI from 'seamless-immutable';
import { applyCrudReducer, changeOperators } from '../utils/createCrud';
import { BaseModel } from '../utils/baseModel';
|
export function createReducerFactory(modelInstance){
const initialState = SI(modelInstance.properties);
function reducer(state = initialState, action){
if(modelInstance.defineActionTypes[action.type]){
if(action.state){
if(typeof action.state === 'function'){
return action.state(state);
}else{
return action.state;
}
}else{
return applyCrudReducer(state, action.payload, initialState);
}
}else{
return state;
}
}
reducer.$initialState = initialState;
return reducer;
}
|
export function createReducerAndModels(reducers, Models){
const models = {};
if(Array.isArray(Models)){
Models.forEach(Model => {
let name = Model.displayName;
if(Model.prototype instanceof BaseModel){
name = Model.displayName;
if(name){
models[name] = new Model(name, Model.initialState);
|
reducers[name] = createReducerFactory(models[name]);
}else{
throw new Error('数据模型${Model.name}:displayName静态属性不能为空!');
}
}else{
models[name] = Model;
if(models[name].mapToStore){
reducers[name] = createReducerFactory(models[name]);
}else{
reducers[name] = models[name];
}
}
})
}else{
for(let name in Models){
let Model = Models[name];
if(Model.prototype instanceof BaseModel){
name = Model.displayName || name;
models[name] = new Model(name, Model.initialState);
|
reducers[name] = createReducerFactory(models[name]);
}else{
models[name] = Model;
if(models[name].mapToStore){
reducers[name] = createReducerFactory(models[name]);
}else{
reducers[name] = models[name];
}
}
}
}
return {
reducers: reducers,
models: models
}
}
|