interface MeiliHit { id: string; content: string; senderName: string; sourceGroupName: string; tags: string[]; approvedAt: number; } interface SearchResponse { hits: MeiliHit[]; total: number; page: number; limit: number; query: string; } export function SearchResults({ hits, total, q, page, }: { hits: MeiliHit[]; total: number; q: string; page: number; }) { return (
{hits.length === 0 ? (

No results{q ? ` for "${q}"` : ''}.

) : ( <>

{total} result{total !== 1 ? 's' : ''}

)}
); } export default async function SearchPage({ searchParams, }: { searchParams: Promise<{ q?: string; page?: string }>; }) { const { q = '', page = '1' } = await searchParams; const apiUrl = process.env.API_URL ?? 'http://localhost:3001'; const url = new URL(`${apiUrl}/search`); url.searchParams.set('q', q); url.searchParams.set('page', page); let data: SearchResponse = { hits: [], total: 0, page: 1, limit: 20, query: q }; try { const res = await fetch(url, { cache: 'no-store' }); if (res.ok) data = await res.json(); } catch { // API unavailable — render empty results } return (

Search

); }