You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import isObject from 'lodash/isObject';
  2. import { DvaModel } from 'umi';
  3. import { BaseState } from './interfaces/common';
  4. type State = Record<string, any>;
  5. type DvaModelKey<T> = keyof DvaModel<T>;
  6. export const modelExtend = <T>(
  7. baseModel: Partial<DvaModel<any>>,
  8. extendModel: DvaModel<any>,
  9. ): DvaModel<T> => {
  10. return Object.keys(extendModel).reduce<DvaModel<T>>((pre, cur) => {
  11. const baseValue = baseModel[cur as DvaModelKey<State>];
  12. const value = extendModel[cur as DvaModelKey<State>];
  13. if (isObject(value) && isObject(baseValue) && typeof value !== 'string') {
  14. const key = cur as Exclude<DvaModelKey<State>, 'namespace'>;
  15. pre[key] = {
  16. ...baseValue,
  17. ...value,
  18. } as any;
  19. } else {
  20. pre[cur as DvaModelKey<State>] = value as any;
  21. }
  22. return pre;
  23. }, {} as DvaModel<T>);
  24. };
  25. export const paginationModel: Partial<DvaModel<BaseState>> = {
  26. state: {
  27. searchString: '',
  28. pagination: {
  29. total: 0,
  30. current: 1,
  31. pageSize: 10,
  32. },
  33. },
  34. reducers: {
  35. setSearchString(state, { payload }) {
  36. return { ...state, searchString: payload };
  37. },
  38. setPagination(state, { payload }) {
  39. return { ...state, pagination: { ...state.pagination, ...payload } };
  40. },
  41. },
  42. };