From 878c0ae248a4ebb57d97ad23d90b255ac3fe5c4c Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 7 Oct 2025 05:31:02 -0700 Subject: [PATCH] refactor(admin): drive media page from server data --- src/routes/admin/media/+page.server.ts | 60 ++++++++++++++++++++++++++ src/routes/admin/media/+page.svelte | 41 ++++++------------ 2 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 src/routes/admin/media/+page.server.ts diff --git a/src/routes/admin/media/+page.server.ts b/src/routes/admin/media/+page.server.ts new file mode 100644 index 0000000..14ce76a --- /dev/null +++ b/src/routes/admin/media/+page.server.ts @@ -0,0 +1,60 @@ +import type { Actions, PageServerLoad } from './$types' +import { adminFetchJson } from '$lib/server/admin/authenticated-fetch' +import type { Media } from '@prisma/client' + +interface MediaResponse { + media: Media[] + pagination: { + page: number + totalPages: number + total: number + limit: number + hasNext: boolean + hasPrev: boolean + } +} + +function buildQueryString(url: URL) { + const params = new URLSearchParams() + + const page = url.searchParams.get('page') + if (page) params.set('page', page) + + const limit = url.searchParams.get('limit') + if (limit) params.set('limit', limit) + + const mimeType = url.searchParams.get('mimeType') + if (mimeType) params.set('mimeType', mimeType) + + const publishedFilter = url.searchParams.get('publishedFilter') + if (publishedFilter) params.set('publishedFilter', publishedFilter) + + const sort = url.searchParams.get('sort') + if (sort) params.set('sort', sort) + + const search = url.searchParams.get('search') + if (search) params.set('search', search) + + const albumId = url.searchParams.get('albumId') + if (albumId) params.set('albumId', albumId) + + const unused = url.searchParams.get('unused') + if (unused) params.set('unused', unused) + + return params.toString() +} + +export const load = (async (event) => { + event.depends('admin:media') + + const query = buildQueryString(event.url) + const base = query ? `/api/media?${query}` : '/api/media' + const data = await adminFetchJson(event, base) + + return { + items: data.media, + pagination: data.pagination + } +}) satisfies PageServerLoad + +export const actions = {} satisfies Actions diff --git a/src/routes/admin/media/+page.svelte b/src/routes/admin/media/+page.svelte index ffffce0..7c224a0 100644 --- a/src/routes/admin/media/+page.svelte +++ b/src/routes/admin/media/+page.svelte @@ -1,5 +1,4 @@