commit: b4a7e58bec86205e23adda2b0625d237acd5aa91 parent fe1d01ec9a799f438828c6c957a5664d7f954f3e Author: Tusooa Zhu <tusooa@kazv.moe> Date: Thu, 17 Mar 2022 17:51:39 -0400 Show badges for unread announcementsDiffstat:
8 files changed, 23 insertions(+), 7 deletions(-)diff --git a/src/components/mobile_nav/mobile_nav.js b/src/components/mobile_nav/mobile_nav.js@@ -54,7 +54,7 @@ const MobileNav = { isChat () { return this.$route.name === 'chat' }, - ...mapGetters(['unreadChatCount']), + ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']), chatsPinned () { return new Set(this.$store.state.serverSideStorage.prefsStorage.collections.pinnedNavItems).has('chats') }diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue@@ -19,7 +19,7 @@ icon="bars" /> <div - v-if="unreadChatCount && !chatsPinned" + v-if="(unreadChatCount && !chatsPinned) || unreadAnnouncementCount" class="alert-dot" /> </button>diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js@@ -117,7 +117,7 @@ const NavPanel = { } ) }, - ...mapGetters(['unreadChatCount']) + ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']) } }diff --git a/src/components/navigation/navigation.js b/src/components/navigation/navigation.js@@ -75,6 +75,7 @@ export const ROOT_ITEMS = { announcements: { route: 'announcements', icon: 'bullhorn', - label: 'nav.announcements' + label: 'nav.announcements', + badgeGetter: 'unreadAnnouncementCount' } }diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js@@ -69,7 +69,7 @@ const Notifications = { return this.unseenNotifications.length }, unseenCountTitle () { - return this.unseenCount + (this.unreadChatCount) + return this.unseenCount + (this.unreadChatCount) + this.unreadAnnouncementCount }, loading () { return this.$store.state.statuses.notifications.loading @@ -94,7 +94,7 @@ const Notifications = { return this.filteredNotifications.slice(0, this.unseenCount + this.seenToDisplayCount) }, noSticky () { return this.$store.getters.mergedConfig.disableStickyHeaders }, - ...mapGetters(['unreadChatCount']) + ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']) }, mounted () { this.scrollerRef = this.$refs.root.closest('.column.-scrollable')diff --git a/src/components/side_drawer/side_drawer.js b/src/components/side_drawer/side_drawer.js@@ -97,7 +97,7 @@ const SideDrawer = { ...mapState({ pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable }), - ...mapGetters(['unreadChatCount']) + ...mapGetters(['unreadChatCount', 'unreadAnnouncementCount']) }, methods: { toggleDrawer () {diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue@@ -202,6 +202,12 @@ class="fa-scale-110 fa-old-padding" icon="bullhorn" /> {{ $t("nav.announcements") }} + <span + v-if="unreadAnnouncementCount" + class="badge badge-notification" + > + {{ unreadAnnouncementCount }} + </span> </router-link> </li> <lidiff --git a/src/modules/announcements.js b/src/modules/announcements.js@@ -25,9 +25,18 @@ export const mutations = { } } +export const getters = { + unreadAnnouncementCount (state) { + return state.announcements.reduce((acc, cur) => { + return (!cur.inactive && !cur.read) ? acc + 1 : acc + }, 0) + } +} + const announcements = { state: defaultState, mutations, + getters, actions: { fetchAnnouncements (store) { const currentUser = store.rootState.users.currentUser