Skip to content

Commit 7023156

Browse files
committed
Add useMessageGroups composable
1 parent dd32b37 commit 7023156

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import type { Message } from '#models';
2+
import { parseNick } from '#utils';
3+
import { computed, type Ref } from 'vue';
4+
5+
export interface MessageGroup extends Pick<Message, 'nick' | 'type'> {
6+
id: string;
7+
messages: Message[];
8+
}
9+
10+
/**
11+
* Group consecutive messages from same user.
12+
* Does not group non-`privmsg` entries.
13+
*/
14+
export function useMessageGroups(messages: Ref<Message[]>) {
15+
const messageGroups = computed(() => {
16+
const groups: MessageGroup[] = [];
17+
for (const message of messages.value) {
18+
const prevGroup = groups.at(-1) ?? null;
19+
20+
if (
21+
!prevGroup ||
22+
message.type !== 'privmsg' ||
23+
prevGroup.type !== 'privmsg' ||
24+
parseNick(prevGroup.nick) !== parseNick(message.nick)
25+
) {
26+
groups.push({
27+
id: `group-${message.time}-${message.nick}`,
28+
type: message.type,
29+
messages: [message],
30+
nick: message.nick,
31+
});
32+
} else {
33+
prevGroup.messages.push(message);
34+
}
35+
}
36+
return groups;
37+
});
38+
return { messageGroups };
39+
}

0 commit comments

Comments
 (0)