import isObject from 'lodash/isObject'; import { DvaModel } from 'umi'; import { BaseState } from './interfaces/common'; type State = Record<string, any>; type DvaModelKey<T> = keyof DvaModel<T>; export const modelExtend = <T>( baseModel: Partial<DvaModel<any>>, extendModel: DvaModel<any>, ): DvaModel<T> => { return Object.keys(extendModel).reduce<DvaModel<T>>((pre, cur) => { const baseValue = baseModel[cur as DvaModelKey<State>]; const value = extendModel[cur as DvaModelKey<State>]; if (isObject(value) && isObject(baseValue) && typeof value !== 'string') { const key = cur as Exclude<DvaModelKey<State>, 'namespace'>; pre[key] = { ...baseValue, ...value, } as any; } else { pre[cur as DvaModelKey<State>] = value as any; } return pre; }, {} as DvaModel<T>); }; export const paginationModel: Partial<DvaModel<BaseState>> = { state: { searchString: '', pagination: { total: 0, current: 1, pageSize: 10, }, }, reducers: { setSearchString(state, { payload }) { return { ...state, searchString: payload }; }, setPagination(state, { payload }) { return { ...state, pagination: { ...state.pagination, ...payload } }; }, }, };