Skip to content

Commit fd09f89

Browse files
authored
Merge pull request #11992 from nextcloud/fix/noid/unread-marker-in-system-messages
fix(MessagesSystemGroup): Follow-up correct collapsed property
2 parents c59b9b8 + f083e52 commit fd09f89

File tree

1 file changed

+30
-14
lines changed

1 file changed

+30
-14
lines changed

src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<Message v-for="message in messagesCollapsed.messages"
4242
:key="message.id"
4343
:token="token"
44-
is-collapsed-system-message
44+
:is-collapsed-system-message="messagesCollapsed.messages?.length > 1"
4545
:last-collapsed-message-id="messagesCollapsed.lastId"
4646
:next-message-id="getNextMessageId(message)"
4747
:previous-message-id="getPrevMessageId(message)"
@@ -119,8 +119,13 @@ export default {
119119
immediate: true,
120120
handler(value) {
121121
this.messagesGroupedBySystemMessage = this.groupMessages(value)
122+
this.updateCollapsedState()
122123
},
123124
},
125+
126+
lastReadMessageId() {
127+
this.updateCollapsedState()
128+
},
124129
},
125130
126131
methods: {
@@ -198,41 +203,52 @@ export default {
198203
return ''
199204
},
200205
206+
updateCollapsedState() {
207+
for (const group of this.messagesGroupedBySystemMessage) {
208+
const isLastReadInsideGroup = this.lastReadMessageId >= group.id && this.lastReadMessageId < group.lastId
209+
if (isLastReadInsideGroup) {
210+
// If the last read message is inside the group, we should show the group expanded
211+
group.collapsed = false
212+
} else if (this.groupIsCollapsed[group.id] !== undefined) {
213+
// If the group was collapsed before, we should keep it collapsed
214+
group.collapsed = this.groupIsCollapsed[group.id]
215+
} else {
216+
// If the group is not collapsed, we should collapse it if it contains more than one message
217+
group.collapsed = group.messages.length > 1
218+
}
219+
}
220+
},
221+
201222
groupMessages(messages) {
202223
const groups = []
203224
let lastMessage = null
204225
let forceNextGroup = false
205226
for (const message of messages) {
206227
const groupingType = this.messagesShouldBeGrouped(message, lastMessage)
207228
if (!groupingType || forceNextGroup) {
208-
groups.push({ id: message.id, lastId: message.id, messages: [message], type: '', collapsed: this.groupIsCollapsed[message.id] ?? true })
229+
// Adding a new group
230+
groups.push({ id: message.id, lastId: message.id, messages: [message], type: '', collapsed: undefined })
209231
forceNextGroup = false
210232
} else {
233+
// Adding a message to the existing group
234+
211235
if (groupingType === 'call_reconnected') {
212-
groups.push({ id: message.id, lastId: message.id, messages: [groups.at(-1).messages.pop()], type: '', collapsed: this.groupIsCollapsed[message.id] ?? true })
236+
groups.push({ id: message.id, lastId: message.id, messages: [groups.at(-1).messages.pop()], type: '', collapsed: undefined })
213237
groups.at(-1).lastId = groups.at(-1).messages.at(-1).id
214238
forceNextGroup = true
215239
}
216240
groups.at(-1).messages.push(message)
217241
groups.at(-1).lastId = message.id
218242
groups.at(-1).type = groupingType
219-
220-
// Check if last read message is hidden inside the collapsed group, and open it, if so.
221-
// Otherwise, combined system message will show a marker
222-
const isLastReadInsideGroup = this.lastReadMessageId >= groups.at(-1).id && this.lastReadMessageId < groups.at(-1).lastId
223-
if (isLastReadInsideGroup) {
224-
groups.at(-1).collapsed = false
225-
}
226243
}
227244
lastMessage = message
228245
}
229-
230246
return groups
231247
},
232248
233-
toggleCollapsed(messages) {
234-
this.$set(messages, 'collapsed', !messages.collapsed)
235-
this.groupIsCollapsed[messages.id] = !this.groupIsCollapsed[messages.id]
249+
toggleCollapsed(group) {
250+
this.$set(group, 'collapsed', !group.collapsed)
251+
this.groupIsCollapsed[group.id] = group.collapsed
236252
},
237253
238254
getNextMessageId(message) {

0 commit comments

Comments
 (0)