summaryrefslogtreecommitdiff
path: root/ui/lib/components/ActiveChannel.svelte
diff options
context:
space:
mode:
authorKit La Touche <kit@transneptune.net>2024-10-30 23:26:23 -0400
committerKit La Touche <kit@transneptune.net>2024-10-30 23:26:23 -0400
commit80220d2188e0553304f2c78d225bbe275d8ba572 (patch)
treede0a62325c698197612574c7a9f37dad279581be /ui/lib/components/ActiveChannel.svelte
parent51aabd07ca5eeaee45a564f8799cc42dc195068c (diff)
parent35b8a914b867237c9c64f33838b1e1f85fc46fb8 (diff)
Merge branch 'main' into wip/mobile
Diffstat (limited to 'ui/lib/components/ActiveChannel.svelte')
-rw-r--r--ui/lib/components/ActiveChannel.svelte27
1 files changed, 25 insertions, 2 deletions
diff --git a/ui/lib/components/ActiveChannel.svelte b/ui/lib/components/ActiveChannel.svelte
index ece9f55..1b23bc1 100644
--- a/ui/lib/components/ActiveChannel.svelte
+++ b/ui/lib/components/ActiveChannel.svelte
@@ -1,10 +1,33 @@
<script>
import { messages } from '$lib/store';
import Message from './Message.svelte';
+ import MessageRun from './MessageRun.svelte';
export let channel = null;
$: messageList = channel !== null ? $messages.inChannel(channel) : [];
+ function *chunkBy(xs, fn) {
+ let chunk;
+ let key;
+ for (let x of xs) {
+ let newKey = fn(x);
+ if (key !== newKey) {
+ if (chunk !== undefined) {
+ yield [key, chunk];
+ }
+
+ chunk = [x];
+ key = newKey;
+ } else {
+ chunk.push(x);
+ }
+ }
+ if (chunk !== undefined) {
+ yield [key, chunk];
+ }
+ }
+
+
let container;
// TODO: eventually, store scroll height/last unread in channel? scroll there?
@@ -14,9 +37,9 @@
</script>
<div class="container" bind:this={container}>
- {#each messageList as message}
+ {#each chunkBy(messageList, msg => msg.sender) as [sender, messages]}
<div use:scroll>
- <Message {...message} />
+ <MessageRun {sender} {messages} />
</div>
{/each}
</div>