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 @@
<script lang="ts"> <script lang="ts">
import { ndk } from '$lib/ndk'; import { ndk } from '$lib/ndk';
import { idList } from '$lib/stores';
import type { NDKEvent } from '@nostr-dev-kit/ndk'; import type { NDKEvent } from '@nostr-dev-kit/ndk';
import { page } from '$app/stores'; import { page } from '$app/stores';
import { Button, Heading, Sidebar, SidebarGroup, SidebarItem, SidebarWrapper, Skeleton, TextPlaceholder, Tooltip } from 'flowbite-svelte'; import { Button, Heading, Sidebar, SidebarGroup, SidebarItem, SidebarWrapper, Skeleton, TextPlaceholder, Tooltip } from 'flowbite-svelte';
import showdown from 'showdown'; import showdown from 'showdown';
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import { BookOutline } from 'flowbite-svelte-icons'; 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(index?: NDKEvent | null | undefined): Promise<IterableIterator<NDKEvent>> {
if (index == null) {
async function getEvents(): Promise<NDKEvent[]> {
if (event == null) {
// TODO: Add error handling. // TODO: Add error handling.
} }
const eventPromises = await $ndk.fetchEvents(event!.filter()); const eventSet = await $ndk.fetchEvents({
const events = await Promise.all(eventPromises); 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 { function normalizeHashPath(str: string): string {
return str return str
.toLowerCase() .toLowerCase()
@ -96,7 +100,7 @@
const converter = new showdown.Converter(); const converter = new showdown.Converter();
</script> </script>
{#await getEvents()} {#await eventPromises}
<Sidebar class='sidebar-leather fixed top-20 left-0 px-4 w-60'> <Sidebar class='sidebar-leather fixed top-20 left-0 px-4 w-60'>
<SidebarWrapper> <SidebarWrapper>
<Skeleton/> <Skeleton/>

4
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 idList = writable<string[]>([]);
export let alexandriaKinds = readable<number[]>([30040, 30041]);
export const isLeftMenuMenuInUse = writable(false); export const isLeftMenuMenuInUse = writable(false);
export const showLeftMenu = writable(false); export const showLeftMenu = writable(false);

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

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

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

@ -1,12 +1,13 @@
import { getNdkInstance } from "$lib/ndk"; 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 { 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 // 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. // browser's local storage to retrieve saved relays and the cache adapter for the NDK instance.
export const ssr = false; export const ssr = false;
export const load = async ({ params }) => { export const load: PageLoad = async ({ params }) => {
const ndk = getNdkInstance(); const ndk = getNdkInstance();
const { tag } = params; const { tag } = params;
@ -14,7 +15,10 @@ export const load = async ({ params }) => {
let event: NDKEvent | null | undefined; let event: NDKEvent | null | undefined;
try { try {
events = await ndk.fetchEvents({ '#d': [tag] }); events = await ndk.fetchEvents({
kinds: [30040 as NDKKind],
'#d': [tag],
});
event = events.values().next().value; event = events.values().next().value;
} catch (err) { } catch (err) {
console.error(err); console.error(err);

Loading…
Cancel
Save