|
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 } }; |
|
}, |
|
}, |
|
}; |
|
|