aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/Article.svelte24
-rw-r--r--src/lib/stores.ts4
-rw-r--r--src/routes/d/[tag]/+page.svelte2
-rw-r--r--src/routes/d/[tag]/+page.ts10
4 files changed, 25 insertions, 15 deletions
diff --git a/src/lib/Article.svelte b/src/lib/Article.svelte
index 6d1ad8c..0a17d41 100644
--- a/src/lib/Article.svelte
+++ b/src/lib/Article.svelte
@@ -1,28 +1,32 @@
<script lang="ts">
import { ndk } from '$lib/ndk';
- import { idList } from '$lib/stores';
import type { NDKEvent } from '@nostr-dev-kit/ndk';
import { page } from '$app/stores';
import { Button, Heading, Sidebar, SidebarGroup, SidebarItem, SidebarWrapper, Skeleton, TextPlaceholder, Tooltip } from 'flowbite-svelte';
import showdown from 'showdown';
import { onMount } from 'svelte';
import { BookOutline } from 'flowbite-svelte-icons';
+ import { alexandriaKinds } from './stores';
- export let event: NDKEvent | null;
-
- $: activeHash = $page.url.hash;
+ export let event: NDKEvent | null | undefined;
- async function getEvents(): Promise<NDKEvent[]> {
- if (event == null) {
+ async function getEvents(index?: NDKEvent | null | undefined): Promise<IterableIterator<NDKEvent>> {
+ if (index == null) {
// TODO: Add error handling.
}
- const eventPromises = await $ndk.fetchEvents(event!.filter());
- const events = await Promise.all(eventPromises);
+ const eventSet = await $ndk.fetchEvents({
+ kinds: $alexandriaKinds,
+ ids: index!.getMatchingTags('e').map((value) => value[1]),
+ });
- return events.filter((event) => event != null);
+ return eventSet.values();
}
+ $: eventPromises = getEvents(event);
+
+ $: activeHash = $page.url.hash;
+
function normalizeHashPath(str: string): string {
return str
.toLowerCase()
@@ -96,7 +100,7 @@
const converter = new showdown.Converter();
</script>
-{#await getEvents()}
+{#await eventPromises}
<Sidebar class='sidebar-leather fixed top-20 left-0 px-4 w-60'>
<SidebarWrapper>
<Skeleton/>
diff --git a/src/lib/stores.ts b/src/lib/stores.ts
index b95d9c5..6a36ea4 100644
--- a/src/lib/stores.ts
+++ b/src/lib/stores.ts
@@ -1,6 +1,8 @@
-import { writable } from "svelte/store";
+import { readable, writable } from "svelte/store";
export let idList = writable<string[]>([]);
+export let alexandriaKinds = readable<number[]>([30040, 30041]);
+
export const isLeftMenuMenuInUse = writable(false);
export const showLeftMenu = writable(false);
diff --git a/src/routes/d/[tag]/+page.svelte b/src/routes/d/[tag]/+page.svelte
index 8cc6d68..120e3f9 100644
--- a/src/routes/d/[tag]/+page.svelte
+++ b/src/routes/d/[tag]/+page.svelte
@@ -4,7 +4,7 @@
export let data: PageData;
- let { event } = data;
+ $: ({ event } = data);
</script>
<main>
diff --git a/src/routes/d/[tag]/+page.ts b/src/routes/d/[tag]/+page.ts
index 7d40f53..a9181ef 100644
--- a/src/routes/d/[tag]/+page.ts
+++ b/src/routes/d/[tag]/+page.ts
@@ -1,12 +1,13 @@
import { getNdkInstance } from "$lib/ndk";
-import type { NDKEvent } from "@nostr-dev-kit/ndk";
+import type { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk";
import { error } from "@sveltejs/kit";
+import type { PageLoad } from "./$types";
// MichaelJ - 23 July 2024 - Disable server-side rendering so that the load function can use the
// browser's local storage to retrieve saved relays and the cache adapter for the NDK instance.
export const ssr = false;
-export const load = async ({ params }) => {
+export const load: PageLoad = async ({ params }) => {
const ndk = getNdkInstance();
const { tag } = params;
@@ -14,7 +15,10 @@ export const load = async ({ params }) => {
let event: NDKEvent | null | undefined;
try {
- events = await ndk.fetchEvents({ '#d': [tag] });
+ events = await ndk.fetchEvents({
+ kinds: [30040 as NDKKind],
+ '#d': [tag],
+ });
event = events.values().next().value;
} catch (err) {
console.error(err);