"use client"; import { useEffect, useMemo, useState } from "react"; type Item = { id: number; title: string; isXrated: number; machinetypeId: number | null; languageId: string | null }; type Paged = { items: T[]; page: number; pageSize: number; total: number }; export default function LanguageDetailClient({ id }: { id: string }) { const [data, setData] = useState | null>(null); const [loading, setLoading] = useState(false); const [page, setPage] = useState(1); const pageSize = 20; const totalPages = useMemo(() => (data ? Math.max(1, Math.ceil(data.total / data.pageSize)) : 1), [data]); async function load(p: number) { setLoading(true); try { const res = await fetch(`/api/zxdb/languages/${id}?page=${p}&pageSize=${pageSize}`, { cache: "no-store" }); const json = (await res.json()) as Paged; setData(json); } finally { setLoading(false); } } useEffect(() => { load(page); // eslint-disable-next-line react-hooks/exhaustive-deps }, [page]); return (

Language {id}

{loading &&
Loading…
} {data && data.items.length === 0 && !loading &&
No entries.
} {data && data.items.length > 0 && (
{data.items.map((it) => ( ))}
ID Title Machine Lang
{it.id} {it.title} {it.machinetypeId ?? "-"} {it.languageId ?? "-"}
)}
Page {data?.page ?? page} / {totalPages}
); }