Browse Source

Allow d tag-based routes for articles

master
buttercat1791 2 years ago committed by limina1
parent
commit
685f262587
  1. 24
      src/lib/Article.svelte
  2. 4
      src/lib/stores.ts
  3. 2
      src/routes/d/[tag]/+page.svelte
  4. 10
      src/routes/d/[tag]/+page.ts

24
src/lib/Article.svelte

@ -1,28 +1,32 @@ @@ -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;
export let event: NDKEvent | null | undefined;
$: activeHash = $page.url.hash;
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 @@ @@ -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/>

4
src/lib/stores.ts

@ -1,6 +1,8 @@ @@ -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);

2
src/routes/d/[tag]/+page.svelte

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
export let data: PageData;
let { event } = data;
$: ({ event } = data);
</script>
<main>

10
src/routes/d/[tag]/+page.ts

@ -1,12 +1,13 @@ @@ -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 }) => { @@ -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);

Loading…
Cancel
Save