Skip to content

Commit 20e287e

Browse files
Merge pull request #6744 from christianbeeznest/ofaj-22917
Messages: Mark as read on open and update list state
2 parents 11f2503 + d66cd1e commit 20e287e

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

assets/vue/views/message/MessageList.vue

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
receiverType: showingInbox ? MESSAGE_TYPE_INBOX : MESSAGE_TYPE_SENDER,
149149
},
150150
}"
151-
class="text-primary"
151+
:class="['text-primary', { 'font-bold': showingInbox && !findMyReceiver(slotProps.data)?.read }]"
152152
>
153153
{{ slotProps.data.title }}
154154
</BaseAppLink>
@@ -223,8 +223,14 @@
223223
<div class="mt-4">
224224
<div class="text-sm font-bold">{{ t("Title") }}:</div>
225225
<BaseAppLink
226-
:to="{ name: 'MessageShow', query: { id: item['@id'] } }"
227-
class="text-base text-blue-600"
226+
:to="{
227+
name: 'MessageShow',
228+
query: {
229+
id: item['@id'],
230+
receiverType: showingInbox ? MESSAGE_TYPE_INBOX : MESSAGE_TYPE_SENDER,
231+
},
232+
}"
233+
:class="['text-base text-blue-600', { 'font-bold': showingInbox && !findMyReceiver(item)?.read }]"
228234
>
229235
{{ item.title }}
230236
</BaseAppLink>
@@ -279,7 +285,7 @@
279285
</template>
280286

281287
<script setup>
282-
import { computed, onMounted, ref } from "vue"
288+
import { computed, onBeforeUnmount, onMounted, ref } from "vue"
283289
import { useStore } from "vuex"
284290
import { useI18n } from "vue-i18n"
285291
import { useRoute, useRouter } from "vue-router"
@@ -499,6 +505,7 @@ function showInboxByTag(tag) {
499505
500506
fetchPayload = {
501507
"order[sendDate]": "desc",
508+
"receivers.receiver": securityStore.user["@id"],
502509
itemsPerPage: initialRowsPerPage,
503510
page: 1,
504511
"receivers.receiverType": MESSAGE_TYPE_INBOX,
@@ -515,6 +522,7 @@ function showUnread() {
515522
516523
fetchPayload = {
517524
"order[sendDate]": "desc",
525+
"receivers.receiver": securityStore.user["@id"],
518526
"receivers.read": false,
519527
itemsPerPage: initialRowsPerPage,
520528
page: 1,
@@ -653,4 +661,27 @@ function onResetSearch() {
653661
654662
loadMessages()
655663
}
664+
665+
let onMessageRead
666+
667+
onMounted(() => {
668+
onMessageRead = (ev) => {
669+
const { iri, receiverId, receiverType } = ev.detail || {}
670+
const msg = items.value?.find?.((m) => m["@id"] === iri)
671+
if (!msg) return
672+
673+
const receivers = [...msg.receiversTo, ...msg.receiversCc, ...msg.receiversSender]
674+
const mine = receivers.find((r) => r.receiver?.["@id"] === receiverId && r.receiverType === receiverType)
675+
if (mine) {
676+
mine.read = true
677+
}
678+
}
679+
window.addEventListener("message:read", onMessageRead)
680+
})
681+
682+
onBeforeUnmount(() => {
683+
if (onMessageRead) {
684+
window.removeEventListener("message:read", onMessageRead)
685+
}
686+
})
656687
</script>

assets/vue/views/message/MessageShow.vue

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,29 @@ const receiverType = route.query.receiverType ? parseInt(route.query.receiverTyp
179179
store.dispatch("message/load", id).then((responseItem) => {
180180
item.value = responseItem
181181
182-
myReceiver.value = findMyReceiver(responseItem, receiverType)
182+
const rawRt = route.query.receiverType ? Number(route.query.receiverType) : undefined
183+
myReceiver.value = rawRt
184+
? findMyReceiver(responseItem, rawRt)
185+
: findMyReceiver(responseItem, MESSAGE_TYPE_INBOX)
186+
187+
if (!myReceiver.value) {
188+
const all = [...responseItem.receiversTo, ...responseItem.receiversCc, ...responseItem.receiversSender]
189+
myReceiver.value = all.find(({ receiver }) => receiver["@id"] === securityStore.user["@id"])
190+
}
183191
184192
if (myReceiver.value && !myReceiver.value.read) {
185193
messageRelUserService
186194
.update(myReceiver.value["@id"], { read: true })
187-
.then(() => messageRelUserStore.findUnreadCount())
195+
.then(() => {
196+
messageRelUserStore.findUnreadCount()
197+
window.dispatchEvent(new CustomEvent("message:read", {
198+
detail: {
199+
iri: responseItem["@id"],
200+
receiverId: myReceiver.value.receiver["@id"],
201+
receiverType: myReceiver.value.receiverType,
202+
},
203+
}))
204+
})
188205
}
189206
})
190207

0 commit comments

Comments
 (0)