Spaces:
Paused
Paused
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 } }; | |
}, | |
}, | |
}; | |