aboutsummaryrefslogtreecommitdiff
path: root/src/modules/announcements.js
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-03-17 14:01:45 -0400
committertusooa <tusooa@kazv.moe>2022-11-24 18:27:13 -0500
commit95750509b14ab5f5a5d8c9a5defafd95ee7efbe3 (patch)
tree5265cb34749ea554ffe9d9954d733628080746c8 /src/modules/announcements.js
parente067783a30be41644abe1aecca631ef31cf476a8 (diff)
Fetch real data from backend
Diffstat (limited to 'src/modules/announcements.js')
-rw-r--r--src/modules/announcements.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/modules/announcements.js b/src/modules/announcements.js
new file mode 100644
index 00000000..2ab2600c
--- /dev/null
+++ b/src/modules/announcements.js
@@ -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