mirror of
https://github.com/coracle-social/flotilla.git
synced 2025-12-10 10:57:04 +00:00
Throttle elements on chat page
This commit is contained in:
@@ -11,10 +11,12 @@
|
|||||||
import {nip19} from "nostr-tools"
|
import {nip19} from "nostr-tools"
|
||||||
import {onMount, onDestroy} from "svelte"
|
import {onMount, onDestroy} from "svelte"
|
||||||
import type {Readable} from "svelte/store"
|
import type {Readable} from "svelte/store"
|
||||||
|
import {derived} from "svelte/store"
|
||||||
import type {Editor} from "svelte-tiptap"
|
import type {Editor} from "svelte-tiptap"
|
||||||
import {page} from "$app/stores"
|
import {page} from "$app/stores"
|
||||||
import {sleep, now, ctx} from "@welshman/lib"
|
import {sleep, now, ctx} from "@welshman/lib"
|
||||||
import type {TrustedEvent, EventContent} from "@welshman/util"
|
import type {TrustedEvent, EventContent} from "@welshman/util"
|
||||||
|
import {throttled} from "@welshman/store"
|
||||||
import {createEvent, DELETE} from "@welshman/util"
|
import {createEvent, DELETE} from "@welshman/util"
|
||||||
import {formatTimestampAsDate, publishThunk} from "@welshman/app"
|
import {formatTimestampAsDate, publishThunk} from "@welshman/app"
|
||||||
import {slide} from "@lib/transition"
|
import {slide} from "@lib/transition"
|
||||||
@@ -73,35 +75,40 @@
|
|||||||
let element: HTMLElement
|
let element: HTMLElement
|
||||||
let scroller: Scroller
|
let scroller: Scroller
|
||||||
let editor: Readable<Editor>
|
let editor: Readable<Editor>
|
||||||
let elements: Element[] = []
|
|
||||||
|
|
||||||
$: {
|
const elements = throttled(
|
||||||
elements = []
|
300,
|
||||||
|
derived(
|
||||||
|
events,
|
||||||
|
$events => {
|
||||||
|
const $elements = []
|
||||||
|
|
||||||
let previousDate
|
let previousDate
|
||||||
let previousPubkey
|
let previousPubkey
|
||||||
|
|
||||||
for (const event of $events.toReversed()) {
|
for (const event of $events.toReversed()) {
|
||||||
const {id, pubkey, created_at} = event
|
const {id, pubkey, created_at} = event
|
||||||
const date = formatTimestampAsDate(created_at)
|
const date = formatTimestampAsDate(created_at)
|
||||||
|
|
||||||
if (date !== previousDate) {
|
if (date !== previousDate) {
|
||||||
elements.push({type: "date", value: date, id: date, showPubkey: false})
|
$elements.push({type: "date", value: date, id: date, showPubkey: false})
|
||||||
|
}
|
||||||
|
|
||||||
|
$elements.push({
|
||||||
|
id,
|
||||||
|
type: "note",
|
||||||
|
value: event,
|
||||||
|
showPubkey: date !== previousDate || previousPubkey !== pubkey,
|
||||||
|
})
|
||||||
|
|
||||||
|
previousDate = date
|
||||||
|
previousPubkey = pubkey
|
||||||
|
}
|
||||||
|
|
||||||
|
return $elements.reverse().slice(0, limit)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
elements.push({
|
)
|
||||||
id,
|
|
||||||
type: "note",
|
|
||||||
value: event,
|
|
||||||
showPubkey: date !== previousDate || previousPubkey !== pubkey,
|
|
||||||
})
|
|
||||||
|
|
||||||
previousDate = date
|
|
||||||
previousPubkey = pubkey
|
|
||||||
}
|
|
||||||
|
|
||||||
elements = elements.reverse().slice(0, limit)
|
|
||||||
}
|
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
// Sveltekiiit
|
// Sveltekiiit
|
||||||
@@ -164,7 +171,7 @@
|
|||||||
<div
|
<div
|
||||||
class="scroll-container -mt-2 flex flex-grow flex-col-reverse overflow-auto py-2"
|
class="scroll-container -mt-2 flex flex-grow flex-col-reverse overflow-auto py-2"
|
||||||
bind:this={element}>
|
bind:this={element}>
|
||||||
{#each elements as { type, id, value, showPubkey } (id)}
|
{#each $elements as { type, id, value, showPubkey } (id)}
|
||||||
{#if type === "date"}
|
{#if type === "date"}
|
||||||
<Divider>{value}</Divider>
|
<Divider>{value}</Divider>
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
Reference in New Issue
Block a user