parent
e067783a30
commit
95750509b1
@ -0,0 +1,60 @@ |
||||
import { set } from 'vue' |
||||
|
||||
const FETCH_ANNOUNCEMENT_INTERVAL_MS = 1000 * 60 * 5 |
||||
|
||||
export const defaultState = { |
||||
announcements: [], |
||||
fetchAnnouncementsTimer: undefined |
||||
} |
||||
|
||||
export const mutations = { |
||||
setAnnouncements (state, announcements) { |
||||
set(state, 'announcements', announcements) |
||||
}, |
||||
setAnnouncementRead (state, { id, read }) { |
||||
if (!state.announcements[id]) { |
||||
return |
||||
} |
||||
|
||||
set(state.announcements[id], 'read', read) |
||||
}, |
||||
setFetchAnnouncementsTimer (state, timer) { |
||||
set(state, 'fetchAnnouncementsTimer', announcements) |
||||
} |
||||
} |
||||
|
||||
const announcements = { |
||||
state: defaultState, |
||||
mutations, |
||||
actions: { |
||||
fetchAnnouncements (store) { |
||||
return store.rootState.api.backendInteractor.fetchAnnouncements() |
||||
.then(announcements => { |
||||
store.commit('setAnnouncements', announcements) |
||||
}) |
||||
}, |
||||
markAnnouncementAsRead (store, id) { |
||||
return store.rootState.api.backendInteractor.dismissAnnouncement({ id }) |
||||
.then(() => { |
||||
store.commit('setAnnouncementRead', { id, read: true }) |
||||
}) |
||||
}, |
||||
startFetchingAnnouncements (store) { |
||||
if (store.state.fetchAnnouncementsTimer) { |
||||
return |
||||
} |
||||
|
||||
const interval = setInterval(() => store.dispatch('fetchAnnouncements'), FETCH_ANNOUNCEMENT_INTERVAL_MS) |
||||
store.commit('setFetchAnnouncementsTimer', interval) |
||||
|
||||
return store.dispatch('fetchAnnouncements') |
||||
}, |
||||
stopFetchingAnnouncements (store) { |
||||
const interval = store.state.fetchAnnouncementsTimer |
||||
store.commit('setFetchAnnouncementsTimer', undefined) |
||||
clearInterval(interval) |
||||
} |
||||
} |
||||
} |
||||
|
||||
export default announcements |
Loading…
Reference in new issue