import { fakeSubmitForm } from './service'; import { Reducer } from 'redux'; import { EffectsCommandMap } from 'dva'; import { AnyAction } from 'redux'; export interface IStateType { current?: string; step?: { payAccount: string; receiverAccount: string; receiverName: string; amount: string; }; } export type Effect = ( action: AnyAction, effects: EffectsCommandMap & { select: (func: (state: IStateType) => T) => T } ) => void; export interface ModelType { namespace: string; state: IStateType; effects: { submitStepForm: Effect; }; reducers: { saveStepFormData: Reducer; saveCurrentStep: Reducer; }; } const Model: ModelType = { namespace: 'BLOCK_NAME_CAMEL_CASE', state: { current: 'info', step: { payAccount: 'ant-design@alipay.com', receiverAccount: 'test@example.com', receiverName: 'Alex', amount: '500', }, }, effects: { *submitStepForm({ payload }, { call, put }) { yield call(fakeSubmitForm, payload); yield put({ type: 'saveStepFormData', payload, }); yield put({ type: 'saveCurrentStep', payload: 'result', }); }, }, reducers: { saveCurrentStep(state, { payload }) { return { ...state, current: payload, }; }, saveStepFormData(state, { payload }) { return { ...state, step: { ...state!.step, ...payload, }, }; }, }, }; export default Model;