import router from 'umi/router'; import { getAuthority } from 'utils/authority'; import { queryNotices } from '../services/api'; export default { namespace: 'global', state: { collapsed: false, notices: [], }, effects: { *fetchNotices(_, { call, put }) { const data = yield call(queryNotices); yield put({ type: 'saveNotices', payload: data, }); yield put({ type: 'user/changeNotifyCount', payload: data.length, }); }, *clearNotices({ payload }, { put, select }) { yield put({ type: 'saveClearedNotices', payload, }); const count = yield select(state => state.global.notices.length); yield put({ type: 'user/changeNotifyCount', payload: count, }); }, *init({ payload }, { put }) { if (payload.hasAuthority) { yield put(router.push('/User/Login')); } else { yield put(router.push('/Dashboard/Analysis')); } }, }, reducers: { changeLayoutCollapsed(state, { payload }) { return { ...state, collapsed: payload, }; }, saveNotices(state, { payload }) { return { ...state, notices: payload, }; }, saveClearedNotices(state, { payload }) { return { ...state, notices: state.notices.filter(item => item.type !== payload), }; }, }, subscriptions: { setup({ history, dispatch }) { // Subscribe history(url) change, trigger `load` action if pathname is `/` return history.listen(({ pathname, search }) => { if (typeof window.ga !== 'undefined') { window.ga('send', 'pageview', pathname + search); } if (pathname === '/') { const author = getAuthority(); dispatch({ type: 'init', payload: { hasAuthority: author === 'guest' || !author, }, }); } }); }, }, };