Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
diff --git a/src/stores/announcements.js b/src/stores/announcements.js
index f739ae726f..52a21182b2 100644
--- a/src/stores/announcements.js
+++ b/src/stores/announcements.js
@@ -1,156 +1,154 @@
import { defineStore } from 'pinia'
import { useOAuthStore } from 'src/stores/oauth.js'
-import {
- getAnnouncements as adminGetAnnouncements,
- deleteAnnouncement,
- editAnnouncement,
- postAnnouncement,
-} from 'src/api/admin.js'
import { getAnnouncements } from 'src/api/public.js'
import { dismissAnnouncement } from 'src/api/user.js'
const FETCH_ANNOUNCEMENT_INTERVAL_MS = 1000 * 60 * 5
export const useAnnouncementsStore = defineStore('announcements', {
state: () => ({
announcements: [],
supportsAnnouncements: true,
fetchAnnouncementsTimer: undefined,
+ adminActions: {},
}),
getters: {
unreadAnnouncementCount() {
if (!window.vuex.state.users.currentUser) {
return 0
}
const unread = this.announcements.filter(
(announcement) => !(announcement.inactive || announcement.read),
)
return unread.length
},
},
actions: {
- fetchAnnouncements() {
- if (!this.supportsAnnouncements) {
- return Promise.resolve()
- }
+ async fetchAnnouncements() {
+ if (!this.supportsAnnouncements) return
const currentUser = window.vuex.state.users.currentUser
const isAdmin =
currentUser &&
currentUser.privileges.has('announcements_manage_announcements')
- const fetchAnnouncements = async () => {
- if (!isAdmin) {
- const result = await getAnnouncements({
+ try {
+ if (isAdmin) {
+ this.adminActions = await import('src/api/admin.js')
+ } else {
+ const all = await getAnnouncements({
credentials: useOAuthStore().token,
})
- return result.data
+ return all.data
}
- const { data: all } = await adminGetAnnouncements({
+ const { data: all } = await this.adminActions.getAnnouncements({
credentials: useOAuthStore().token,
})
+
const { data: visible } = await getAnnouncements({
credentials: useOAuthStore().token,
})
+
const visibleObject = visible.reduce((a, c) => {
a[c.id] = c
return a
}, {})
+
const getWithinVisible = (announcement) =>
visibleObject[announcement.id]
all.forEach((announcement) => {
const visibleAnnouncement = getWithinVisible(announcement)
if (!visibleAnnouncement) {
announcement.inactive = true
} else {
announcement.read = visibleAnnouncement.read
}
})
- return all
+ this.announcements = all
+ } catch (error) {
+ // If and only if backend does not support announcements, it would return 404.
+ // In this case, silently ignores it.
+ if (error && error.statusCode === 404) {
+ this.supportsAnnouncements = false
+ } else {
+ throw error
+ }
}
-
- return fetchAnnouncements()
- .then((announcements) => {
- this.announcements = announcements
- })
- .catch((error) => {
- // If and only if backend does not support announcements, it would return 404.
- // In this case, silently ignores it.
- if (error && error.statusCode === 404) {
- this.supportsAnnouncements = false
- } else {
- throw error
- }
- })
},
markAnnouncementAsRead(id) {
return dismissAnnouncement({
id,
credentials: useOAuthStore().token,
}).then(() => {
const index = this.announcements.findIndex((a) => a.id === id)
if (index < 0) {
return
}
this.announcements[index].read = true
})
},
startFetchingAnnouncements() {
if (this.fetchAnnouncementsTimer) {
return
}
const interval = setInterval(
() => this.fetchAnnouncements(),
FETCH_ANNOUNCEMENT_INTERVAL_MS,
)
this.fetchAnnouncementsTimer = interval
return this.fetchAnnouncements()
},
stopFetchingAnnouncements() {
const interval = this.fetchAnnouncementsTimer
this.fetchAnnouncementsTimer = undefined
clearInterval(interval)
},
postAnnouncement({ content, startsAt, endsAt, allDay }) {
- return postAnnouncement({
- credentials: useOAuthStore().token,
- content,
- startsAt,
- endsAt,
- allDay,
- }).then(() => {
- return this.fetchAnnouncements()
- })
+ return this.adminActions
+ .postAnnouncement({
+ credentials: useOAuthStore().token,
+ content,
+ startsAt,
+ endsAt,
+ allDay,
+ })
+ .then(() => {
+ return this.fetchAnnouncements()
+ })
},
editAnnouncement({ id, content, startsAt, endsAt, allDay }) {
- return editAnnouncement({
- id,
- content,
- startsAt,
- endsAt,
- allDay,
- credentials: useOAuthStore().token,
- }).then(() => {
- return this.fetchAnnouncements()
- })
+ return this.adminActions
+ .editAnnouncement({
+ id,
+ content,
+ startsAt,
+ endsAt,
+ allDay,
+ credentials: useOAuthStore().token,
+ })
+ .then(() => {
+ return this.fetchAnnouncements()
+ })
},
deleteAnnouncement(id) {
- return deleteAnnouncement({
- id,
- credentials: useOAuthStore().token,
- }).then(() => {
- return this.fetchAnnouncements()
- })
+ return this.adminActions
+ .deleteAnnouncement({
+ id,
+ credentials: useOAuthStore().token,
+ })
+ .then(() => {
+ return this.fetchAnnouncements()
+ })
},
},
})

File Metadata

Mime Type
text/x-diff
Expires
Fri, Oct 30, 1:40 PM (17 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1800178
Default Alt Text
(5 KB)

Event Timeline