"use client"; import Link from "next/link"; type Label = { id: number; name: string; labeltypeId: string | null }; export type EntryDetailData = { id: number; title: string; isXrated: number; machinetype: { id: number | null; name: string | null }; language: { id: string | null; name: string | null }; genre: { id: number | null; name: string | null }; authors: Label[]; publishers: Label[]; // extra fields for richer details maxPlayers?: number; availabletypeId?: string | null; withoutLoadScreen?: number; withoutInlay?: number; issueId?: number | null; files?: { id: number; link: string; size: number | null; md5: string | null; comments: string | null; type: { id: number; name: string }; }[]; // Flat downloads by entry_id downloadsFlat?: { id: number; link: string; size: number | null; md5: string | null; comments: string | null; isDemo: boolean; type: { id: number; name: string }; language: { id: string | null; name: string | null }; machinetype: { id: number | null; name: string | null }; scheme: { id: string | null; name: string | null }; source: { id: string | null; name: string | null }; case: { id: string | null; name: string | null }; year: number | null; releaseSeq: number; }[]; releases?: { releaseSeq: number; type: { id: string | null; name: string | null }; language: { id: string | null; name: string | null }; machinetype: { id: number | null; name: string | null }; year: number | null; comments: string | null; downloads: { id: number; link: string; size: number | null; md5: string | null; comments: string | null; isDemo: boolean; type: { id: number; name: string }; language: { id: string | null; name: string | null }; machinetype: { id: number | null; name: string | null }; scheme: { id: string | null; name: string | null }; source: { id: string | null; name: string | null }; case: { id: string | null; name: string | null }; year: number | null; }[]; }[]; }; export default function EntryDetailClient({ data }: { data: EntryDetailData | null }) { if (!data) return
| Field | Value |
|---|---|
| ID | {data.id} |
| Title | {data.title} |
| Machine | {data.machinetype.id != null ? ( data.machinetype.name ? ( {data.machinetype.name} ) : ( #{data.machinetype.id} ) ) : ( - )} |
| Language | {data.language.id ? ( data.language.name ? ( {data.language.name} ) : ( {data.language.id} ) ) : ( - )} |
| Genre | {data.genre.id ? ( data.genre.name ? ( {data.genre.name} ) : ( #{data.genre.id} ) ) : ( - )} |
| Max Players | {data.maxPlayers} |
| Available Type | {data.availabletypeId ?? -} |
| Without Load Screen | {data.withoutLoadScreen ? "Yes" : "No"} |
| Without Inlay | {data.withoutInlay ? "Yes" : "No"} |
| Issue | {data.issueId ? #{data.issueId} : -} |
| Type | Link | Size | MD5 | Flags | Details | Comments |
|---|---|---|---|---|---|---|
| {d.type.name} | {isHttp ? ( {d.link} ) : ( {d.link} )} | {typeof d.size === "number" ? d.size.toLocaleString() : "-"} | {d.md5 ?? "-"} |
{d.isDemo ? Demo : null}
{d.scheme.name ? {d.scheme.name} : null}
{d.source.name ? {d.source.name} : null}
{d.case.name ? {d.case.name} : null}
|
{d.language.name && (
{d.language.name}
)}
{d.machinetype.name && (
{d.machinetype.name}
)}
{typeof d.year === "number" ? {d.year} : null}
rel #{d.releaseSeq}
|
{d.comments ?? ""} |
| Type | Link | Size | MD5 | Comments |
|---|---|---|---|---|
| {f.type.name} | {isHttp ? ( {f.link} ) : ( {f.link} )} | {f.size != null ? new Intl.NumberFormat().format(f.size) : "-"} | {f.md5 ?? "-"} |
{f.comments ?? ""} |