"use client"; import Link from "next/link"; import { useMemo, useState } from "react"; import { useRouter } from "next/navigation"; type Item = { id: number; title: string; isXrated: number; machinetypeId: number | null; machinetypeName?: string | null; languageId: string | null; languageName?: string | null }; type Paged = { items: T[]; page: number; pageSize: number; total: number }; export default function LanguageDetailClient({ id, initial, initialQ }: { id: string; initial: Paged; initialQ?: string }) { const router = useRouter(); const [q, setQ] = useState(initialQ ?? ""); const totalPages = useMemo(() => Math.max(1, Math.ceil(initial.total / initial.pageSize)), [initial]); return (

Language {id}

{ e.preventDefault(); const p = new URLSearchParams(); if (q) p.set("q", q); p.set("page", "1"); router.push(`/zxdb/languages/${id}?${p.toString()}`); }}>
setQ(e.target.value)} />
{initial && initial.items.length === 0 &&
No entries.
} {initial && initial.items.length > 0 && (
{initial.items.map((it) => ( ))}
ID Title Machine Language
{it.id} {it.title} {it.machinetypeId != null ? ( it.machinetypeName ? ( {it.machinetypeName} ) : ( {it.machinetypeId} ) ) : ( - )} {it.languageId ? ( it.languageName ? ( {it.languageName} ) : ( {it.languageId} ) ) : ( - )}
)}
Page {initial.page} / {totalPages}
{ const p = new URLSearchParams(); if (q) p.set("q", q); p.set("page", String(Math.max(1, initial.page - 1))); return p.toString(); })()}`} > Prev = totalPages ? "disabled" : ""}`} aria-disabled={initial.page >= totalPages} href={`/zxdb/languages/${id}?${(() => { const p = new URLSearchParams(); if (q) p.set("q", q); p.set("page", String(Math.min(totalPages, initial.page + 1))); return p.toString(); })()}`} > Next
); }