From 2260afd5f13cc1143e02c3d41f9a5ab2a34d9bfe Mon Sep 17 00:00:00 2001 From: Yusur Princeps Date: Wed, 11 Mar 2026 13:36:07 +0100 Subject: [PATCH] add /explore/ --- package.json | 2 +- src/lib/HomeMenu.svelte | 5 ++- src/routes/+page.svelte | 1 + src/routes/+page.ts | 2 +- src/routes/[x+40][name]/+page.svelte | 1 - src/routes/[x+40][name]/+page.ts | 2 +- src/routes/explore/+page.svelte | 50 ++++++++++++++++++++++++++ src/routes/explore/+page.ts | 53 ++++++++++++++++++++++++++++ 8 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 src/routes/explore/+page.svelte create mode 100644 src/routes/explore/+page.ts diff --git a/package.json b/package.json index 8f71d78..fccf4cb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@yusurko/vigil", "private": true, - "version": "0.1.0-dev51", + "version": "0.1.0-dev62", "type": "module", "scripts": { "dev": "vite dev", diff --git a/src/lib/HomeMenu.svelte b/src/lib/HomeMenu.svelte index 36e2669..35f359a 100644 --- a/src/lib/HomeMenu.svelte +++ b/src/lib/HomeMenu.svelte @@ -1,5 +1,5 @@ + + + + + {#snippet left()} + + {/snippet} + + {#snippet right()} + {#if top_guilds} + +
    + {#each top_guilds as gu} +
  • + +{gu.name} - + {gu.post_count ?? 0} posts - + {gu.subscriber_count ?? 0} subscribers +
  • + {/each} +
+
+ {/if} + {/snippet} +
+ + diff --git a/src/routes/explore/+page.ts b/src/routes/explore/+page.ts new file mode 100644 index 0000000..978dd28 --- /dev/null +++ b/src/routes/explore/+page.ts @@ -0,0 +1,53 @@ +import { backend, type GuildEntry, type PostEntry } from '$lib/backend.js'; +import { getMe, sleep } from '$lib/globals.svelte.js'; +import type { LoadEvent } from '@sveltejs/kit'; + + +async function loadFeed (event: LoadEvent): Promise { + const resp = await backend.withEvent(event).fetch('explore/feed'); + + if ([200].indexOf(resp.status) < 0) { + console.error(`fetch feed returned status ${resp.status}`); + return null; + } + try { + const respJ = await resp.json(); + + const { feed } : { feed: PostEntry[] } = respJ; + + return feed; + } catch (e) { + return null; + } +} + +async function loadTopGuilds (event: LoadEvent): Promise { + const resp = await backend.withEvent(event).fetch('top/guilds'); + + if ([200].indexOf(resp.status) < 0) { + console.error(`fetch top_guilds returned status ${resp.status}`); + return null; + } + try { + const respJ = await resp.json(); + + const { has: top_guilds } : { has: GuildEntry[] } = respJ; + return top_guilds; + } catch (e) { + return null; + } +} + +export async function load(event): Promise<{feed: PostEntry[] | null, top_guilds?: GuildEntry[] | null}> { + + let feed = null; + let me = getMe(); + let top_guilds = null; + + if (me) { + feed = await loadFeed(event); + top_guilds = await loadTopGuilds(event); + } + + return { feed, top_guilds }; +}