From 8fe644467e83523c8eb316fe32f8d27a2f48b609 Mon Sep 17 00:00:00 2001 From: jorgev259 Date: Tue, 22 Apr 2025 21:56:34 -0600 Subject: [PATCH] Implement search pagination --- src/components/search/AlbumSearch.astro | 21 +++++++++++++++++++-- src/pages/search.astro | 4 +++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/components/search/AlbumSearch.astro b/src/components/search/AlbumSearch.astro index 71ba34b..faebc3a 100644 --- a/src/components/search/AlbumSearch.astro +++ b/src/components/search/AlbumSearch.astro @@ -7,10 +7,14 @@ import prismaClient from 'utils/prisma-client' interface Props { query: string + page: number } const take = 20 const { query } = Astro.props +let { page } = Astro.props + +if (page < 1) page = 1 const queryString = query .toLowerCase() @@ -32,11 +36,24 @@ const countQuery: Prisma.albumsCountArgs = { const [count, search] = await Promise.all([ prismaClient.albums.count(countQuery), - prismaClient.albums.findMany({ ...findQuery, take }) + prismaClient.albums.findMany({ ...findQuery, take, skip: (page - 1) * take }) ]) --- -
Albums ({count}) {count > take ? `/ Showing first ${take} results` : null}
+
+
+ Albums ({count}) { + count > take ? ( + / Showing {page === 1 ? `first ${take}` : `${(page - 1) * take}-${page * take}`} results + ) : null + } +
+
+ {Array.from({ length: Math.ceil(count / take) }, (_, i) => ( + {i + 1} + ))} +
+
{ search.map((album) => ( diff --git a/src/pages/search.astro b/src/pages/search.astro index f90c507..42c9de2 100644 --- a/src/pages/search.astro +++ b/src/pages/search.astro @@ -3,6 +3,8 @@ import AlbumSearch from 'components/search/AlbumSearch.astro' import BaseLayout from 'layouts/base.astro' const query = Astro.url.searchParams.get('q') +const page = Astro.url.searchParams.get('page') || "1" + if (!query) return Astro.redirect(404) --- @@ -11,7 +13,7 @@ if (!query) return Astro.redirect(404)
Search results for: {query}
- +