aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/firehose/+page.svelte
blob: 1cf2324e5bc03b525a5ed0f1ddd9708226cdb906 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<script lang="ts">
  import Event from "$comp/Event.svelte";
  import { get, post } from "$lib/utils";
  import { onMount } from "svelte";
  import { Relay } from "nostr-tools/relay";
  import { ignore } from "$lib/store";

  let events = $state([]);
  let paused = $state();
  let pause = (e) => {
    e.preventDefault();
    e.stopPropagation();
    paused = true;
  };
  let unpause = (e) => {
    e.preventDefault();
    e.stopPropagation();
    paused = false;
  };

  onMount(async () => {
    const relay = await Relay.connect("wss://relay.primal.net");
    const subscription = relay.subscribe([{ kinds: [1], limit: 20 }], {
      async onevent(event) {
        if (paused) return;
        const { parts, names } = await post("/post/parseEvent", { event });
        event.author = await get(`/api/users/${event.pubkey}`);
        event.parts = parts;
        event.names = names;
        let { content, pubkey } = event;
        events.push(event);
        if (events.length > 20) events.shift();
      },
    });
  });
</script>

<div class="container px-4 max-w-xl mx-auto space-y-5">
  <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold">
    Events
  </h1>

  <div onpointerenter={pause} onpointerleave={unpause}>
    {#each events as event}
      <Event {event} minimal={true} />
    {/each}
  </div>
</div>