import { queryNotices } from '@/services/user'; const GlobalModel = { namespace: 'global', state: { collapsed: false, notices: [], }, effects: { *fetchNotices(_, { call, put, select }) { const data = yield call(queryNotices); yield put({ type: 'saveNotices', payload: data, }); const unreadCount = yield select( (state) => state.global.notices.filter((item) => !item.read).length, ); yield put({ type: 'user/changeNotifyCount', payload: { totalCount: data.length, unreadCount, }, }); }, *clearNotices({ payload }, { put, select }) { yield put({ type: 'saveClearedNotices', payload, }); const count = yield select((state) => state.global.notices.length); const unreadCount = yield select( (state) => state.global.notices.filter((item) => !item.read).length, ); yield put({ type: 'user/changeNotifyCount', payload: { totalCount: count, unreadCount, }, }); }, *changeNoticeReadState({ payload }, { put, select }) { const notices = yield select((state) => state.global.notices.map((item) => { const notice = { ...item }; if (notice.id === payload) { notice.read = true; } return notice; }), ); yield put({ type: 'saveNotices', payload: notices, }); yield put({ type: 'user/changeNotifyCount', payload: { totalCount: notices.length, unreadCount: notices.filter((item) => !item.read).length, }, }); }, }, reducers: { changeLayoutCollapsed( state = { notices: [], collapsed: true, }, { payload }, ) { return { ...state, collapsed: payload }; }, saveNotices(state, { payload }) { return { collapsed: false, ...state, notices: payload, }; }, saveClearedNotices( state = { notices: [], collapsed: true, }, { payload }, ) { return { ...state, collapsed: false, notices: state.notices.filter((item) => item.type !== payload), }; }, }, }; export default GlobalModel;