Implement URL-driven pagination and correct total counts across ZXDB: - Root /zxdb: SSR reads ?page; client syncs to SSR; Prev/Next as Links. - Sub-index pages (genres, languages, machinetypes): parse ?page on server; use SSR props in clients; Prev/Next via Links. - Labels browse (/zxdb/labels): dynamic SSR, reads ?q & ?page; typed count(*); client syncs to SSR; Prev/Next preserve q. - Label detail (/zxdb/labels/[id]): tab-aware Prev/Next Links; counters from server. - Repo: replace raw counts with typed Drizzle count(*) for reliable totals. Signed-off-by: Junie <Junie@lucy.xalior.com>
15 lines
741 B
TypeScript
15 lines
741 B
TypeScript
import LanguageDetailClient from "./LanguageDetail";
|
|
import { entriesByLanguage } from "@/server/repo/zxdb";
|
|
|
|
export const metadata = { title: "ZXDB Language" };
|
|
|
|
// Depends on searchParams (?page=). Force dynamic so each page renders correctly.
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export default async function Page({ params, searchParams }: { params: Promise<{ id: string }>; searchParams: Promise<{ [key: string]: string | string[] | undefined }> }) {
|
|
const [{ id }, sp] = await Promise.all([params, searchParams]);
|
|
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
|
|
const initial = await entriesByLanguage(id, page, 20);
|
|
return <LanguageDetailClient id={id} initial={initial as any} />;
|
|
}
|