aboutsummaryrefslogtreecommitdiff
path: root/src/routes/+page.svelte
blob: 7e0e6e68a4d71440ae14657183ec2c1dca5853d7 (plain)
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
49
50
51
52
53
<script lang="ts">
  import ArticleHeader from "$lib/ArticleHeader.svelte";
  import { indexKind } from "$lib/consts";
  import { ndk } from "$lib/ndk";
  import { NDKEvent, NDKRelayList, NDKRelaySet, type NDKUser } from "@nostr-dev-kit/ndk";

  const getEvents = (): Promise<Set<NDKEvent>> =>
    $ndk.fetchEvents(
      // @ts-ignore
      { kinds: [indexKind] },
    );

  const getEventsFromUserRelays = (userRelays: NDKRelayList): Promise<Set<NDKEvent>> => {
    const relaySet = NDKRelaySet.fromRelayUrls(userRelays!.readRelayUrls, $ndk);

    // TODO: Add more filter parameters to customize the event feed.
    return $ndk.fetchEvents(
      // @ts-ignore
      { kinds: [indexKind] },
      relaySet,
    );
  };

  let user: NDKUser | null | undefined;
  let readRelays: NDKRelayList | null | undefined;

  $: {
    user = $ndk.activeUser;
    user?.relayList().then(relays => readRelays = relays);
  }
</script>

<div class='leather flex flex-col flex-grow-0 space-y-4 overflow-y-auto w-max'>
  {#key user}
    {#if user == null || readRelays == null}
      {#await getEvents()}
        <p>Loading...</p>
      {:then events}
        {#each Array.from(events) as event}
          <ArticleHeader {event} />
        {/each}
      {/await}
    {:else}
      {#await getEventsFromUserRelays(readRelays)}
        <p>Loading...</p>
      {:then events}
        {#each Array.from(events) as event}
          <ArticleHeader {event} />
        {/each}
      {/await}
    {/if}
  {/key}
</div>