Merge pull request #5598 from christianbeeznest/ofaj-21695

Internal: Fix unread message count in inbox icon - refs BT#21695
pull/5604/head
christianbeeznest 1 year ago committed by GitHub
commit ad0fe4fabd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      assets/vue/components/layout/TopbarLoggedIn.vue
  2. 6
      assets/vue/services/message.js
  3. 28
      assets/vue/store/messageRelUserStore.js

@ -19,7 +19,7 @@
<PrimeButton <PrimeButton
:badge="btnInboxBadge" :badge="btnInboxBadge"
:class="{ 'item-button--unread': btnInboxBadge }" :class="{ 'item-button--unread': !!btnInboxBadge }"
:icon="chamiloIconToClass['inbox']" :icon="chamiloIconToClass['inbox']"
badge-class="item-button__badge" badge-class="item-button__badge"
class="item-button" class="item-button"
@ -35,7 +35,7 @@
class="user-avatar" class="user-avatar"
shape="circle" shape="circle"
unstyled unstyled
@click="toogleUserMenu" @click="toggleUserMenu"
/> />
</div> </div>
</div> </div>
@ -118,15 +118,16 @@ const userSubmenuItems = computed(() => [
}, },
]) ])
function toogleUserMenu(event) { function toggleUserMenu(event) {
elUserSubmenu.value.toggle(event) elUserSubmenu.value.toggle(event)
} }
const headerLogo = headerLogoPath const headerLogo = headerLogoPath
const btnInboxBadge = computed(() => const btnInboxBadge = computed(() => {
messageRelUserStore.countUnread > 9 ? "9+" : messageRelUserStore.countUnread.toString(), const unreadCount = messageRelUserStore.countUnread
) return unreadCount > 20 ? "9+" : unreadCount > 0 ? unreadCount.toString() : null
})
messageRelUserStore.findUnreadCount().catch((e) => notification.showErrorNotification(e)) messageRelUserStore.findUnreadCount().catch((e) => notification.showErrorNotification(e))
</script> </script>

@ -17,6 +17,12 @@ async function create(message) {
return await baseService.post("/api/messages", message) return await baseService.post("/api/messages", message)
} }
async function countUnreadMessages(params) {
const queryParams = new URLSearchParams(params).toString()
return await baseService.get(`/api/messages?${queryParams}`)
}
export const messageService = { export const messageService = {
create, create,
countUnreadMessages,
} }

@ -1,6 +1,7 @@
import { defineStore } from "pinia" import { defineStore } from "pinia"
import { useSecurityStore } from "./securityStore" import { useSecurityStore } from "./securityStore"
import messageRelUSerService from "../services/messagereluser" import { messageService } from "../services/message"
import { MESSAGE_TYPE_INBOX } from "../components/message/constants"
export const useMessageRelUserStore = defineStore("messageRelUser", { export const useMessageRelUserStore = defineStore("messageRelUser", {
state: () => ({ state: () => ({
@ -10,16 +11,25 @@ export const useMessageRelUserStore = defineStore("messageRelUser", {
async findUnreadCount() { async findUnreadCount() {
const securityStore = useSecurityStore() const securityStore = useSecurityStore()
const response = await messageRelUSerService.findAll({ try {
params: { const params = {
read: false, "order[sendDate]": "desc",
receiver: securityStore.user["@id"], "receivers.read": false,
"receivers.receiver": securityStore.user["@id"],
itemsPerPage: 1, itemsPerPage: 1,
}, msgType: MESSAGE_TYPE_INBOX,
}) }
const json = await response.json() const response = await messageService.countUnreadMessages(params)
this.countUnread = json["hydra:totalItems"] if (response && response["hydra:totalItems"] !== undefined) {
this.countUnread = response["hydra:totalItems"]
} else {
this.countUnread = 0
}
} catch (error) {
console.error("Error fetching unread count:", error)
this.countUnread = 0
}
}, },
}, },
}) })

Loading…
Cancel
Save