import { Reducer, Effect } from 'umi'; import { AlarmTimelineItem, OperationUser } from '../common/types'; import { fetchAlarmTimeline } from '../services/alarm'; export interface StateType { list: AlarmTimelineItem[]; users: OperationUser[]; alarm: any; } export interface ModelType { namespace: string; state: StateType; effects: { fetch: Effect; }; reducers: { updateState: Reducer; refreshState: Reducer; updateListState: Reducer; }; } const Model: ModelType = { namespace: 'alarmTimeline', state: { list: [], users: [], alarm: {}, }, effects: { *fetch({ payload }, { call, put }) { const { id } = payload; const response = yield call(fetchAlarmTimeline, id, payload); if (response?.data) { yield put({ type: 'updateState', payload: { ...response.data }, }); } }, }, reducers: { updateState(state, { payload }) { return { ...state, ...payload, }; }, refreshState(state, { payload }) { const { alarm } = state; const { timeline, users } = payload; if (payload.alarm && alarm.id === payload.alarm.id) { return { ...state, list: timeline, users: users, }; } return state; }, updateListState(state, { payload }) { const { list, users, alarm } = state; if (payload.data.user) { users.push(payload.data.user); } if (payload.data.type) { list.push(payload.data); } return { ...state, list, users, alarm, }; }, }, }; export default Model;