Skip to content

Commit 37824f4

Browse files
committed
Add initial channel message components
- Update useMessageGroups type
1 parent 4fd2603 commit 37824f4

6 files changed

Lines changed: 52 additions & 9 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<template>
2+
<MessageGroup v-for="group in messageGroups" :key="group.id" :message-group="group" />
3+
</template>
4+
5+
<script setup lang="ts">
6+
import { useMessageGroups } from '#composables/useMessageGroups.ts';
7+
import { useChannelStore } from '#stores';
8+
import { computed } from 'vue';
9+
import MessageGroup from './MessageGroup.vue';
10+
11+
const { activeChannel } = useChannelStore();
12+
const messages = computed(() => activeChannel.messages);
13+
const { messageGroups } = useMessageGroups(messages);
14+
</script>
15+
16+
<style scoped></style>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<template>
2+
<UsernameDisplay :nick="messageGroup.nick" />
3+
<MessageGroupItem v-for="message in messageGroup.messages" :key="message.id" :message="message" />
4+
</template>
5+
6+
<script setup lang="ts">
7+
import UsernameDisplay from '#components/user/UsernameDisplay.vue';
8+
import type { MessageGroup } from '#composables/useMessageGroups.ts';
9+
import MessageGroupItem from './MessageGroupItem.vue';
10+
defineProps<{ messageGroup: MessageGroup }>();
11+
</script>
12+
13+
<style scoped></style>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<template>
2+
<time>[{{ formatTime(message.time) }}]</time>
3+
<p>{{ formattedMessage }}</p>
4+
</template>
5+
6+
<script setup lang="ts">
7+
import type { Message } from '#models';
8+
import { formatTime } from '#utils';
9+
import { computed } from 'vue';
10+
11+
const props = defineProps<{ message: Message }>();
12+
// TODO: Use markdown parser for `privmsg` entries
13+
const formattedMessage = computed(() => props.message.message);
14+
</script>
15+
16+
<style scoped></style>

src/components/user/OnlineUsers.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<ul>
33
<li v-for="user in connectedUsers" :key="user.username">
4-
<UsernameDisplay :username="user.username" />
4+
<UsernameDisplay :nick="user.username" />
55
</li>
66
</ul>
77
</template>

src/components/user/UsernameDisplay.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,13 @@
4343
import { BPopover } from 'bootstrap-vue-next';
4444
import { computed } from 'vue';
4545
46-
const props = defineProps<{
47-
username: string;
48-
}>();
46+
const props = defineProps<{ nick: string }>();
4947
const userList = useUserListStore();
50-
const user = computed(() => userList.getUser(props.username));
48+
const user = computed(() => userList.getUser(props.nick));
5149
const usernameColor = computed(() => user.value.color);
5250
5351
function onShow() {
54-
userList.loadProfile(props.username);
52+
userList.loadProfile(props.nick);
5553
}
5654
</script>
5755

src/composables/useMessageGroups.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Message } from '#models';
22
import { parseNick } from '#utils';
3-
import { computed, type Ref } from 'vue';
3+
import { computed, toValue, type MaybeRefOrGetter, type DeepReadonly } from 'vue';
44

55
export interface MessageGroup extends Pick<Message, 'nick' | 'type'> {
66
id: string;
@@ -11,10 +11,10 @@ export interface MessageGroup extends Pick<Message, 'nick' | 'type'> {
1111
* Group consecutive messages from same user.
1212
* Does not group non-`privmsg` entries.
1313
*/
14-
export function useMessageGroups(messages: Ref<Message[]>) {
14+
export function useMessageGroups(messages: MaybeRefOrGetter<Message[] | DeepReadonly<Message[]>>) {
1515
const messageGroups = computed(() => {
1616
const groups: MessageGroup[] = [];
17-
for (const message of messages.value) {
17+
for (const message of toValue(messages)) {
1818
const prevGroup = groups.at(-1) ?? null;
1919

2020
if (

0 commit comments

Comments
 (0)