--- import * as m from 'paraglide/messages' import type { Prisma } from '@prisma/client' import type { DefaultArgs } from '@prisma/client/runtime/library' import { Image } from 'astro:assets' import prismaClient from 'utils/prisma-client' import SearchNav from './SearchNav.astro' 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() .split('_') .map((w) => `+${w}`) .join(' ') const findQuery: Prisma.albumsFindManyArgs = { select: { title: true, releaseDate: true, id: true }, where: { OR: [{ title: { search: queryString } }, { subTitle: { search: queryString } }] }, orderBy: { _relevance: { fields: ['title', 'subTitle'], sort: 'desc', search: query.toLowerCase() } } } const countQuery: Prisma.albumsCountArgs = { where: findQuery.where } const [count, search] = await Promise.all([ prismaClient.albums.count(countQuery), prismaClient.albums.findMany({ ...findQuery, take, skip: (page - 1) * take }) ]) const start = (page - 1) * take const end = Math.min(page * take, count) ---
{m.albums()} ({count}) { count > take ? / {page === 1 ? m.firstResults({ take }) : m.moreResults({ start, end })} : null }
{ search.map((album) => (
{`${album.title}
{album.releaseDate?.toISOString().split('T')[0]}
)) }