Improve ZXDB releases list
Link release titles to release detail, add magref count badges, and show other releases on release detail. Signed-off-by: codex@lucy.xalior.com
This commit is contained in:
@@ -11,6 +11,7 @@ type Item = {
|
||||
releaseSeq: number;
|
||||
entryTitle: string;
|
||||
year: number | null;
|
||||
magrefCount: number;
|
||||
};
|
||||
|
||||
type Paged<T> = {
|
||||
@@ -337,6 +338,7 @@ export default function ReleasesExplorer({
|
||||
<th style={{width: 80}}>Entry ID</th>
|
||||
<th>Title</th>
|
||||
<th style={{width: 140}}>Release #</th>
|
||||
<th style={{width: 110}}>Places</th>
|
||||
<th style={{width: 100}}>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -347,13 +349,24 @@ export default function ReleasesExplorer({
|
||||
<EntryLink id={it.entryId} />
|
||||
</td>
|
||||
<td>
|
||||
<EntryLink id={it.entryId} title={it.entryTitle} />
|
||||
<div className="d-flex flex-column gap-1">
|
||||
<Link href={`/zxdb/releases/${it.entryId}/${it.releaseSeq}`} className="link-underline link-underline-opacity-0">
|
||||
{it.entryTitle || `Entry #${it.entryId}`}
|
||||
</Link>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<Link href={`/zxdb/releases/${it.entryId}/${it.releaseSeq}`}>
|
||||
#{it.releaseSeq}
|
||||
</Link>
|
||||
</td>
|
||||
<td>
|
||||
{it.magrefCount > 0 ? (
|
||||
<span className="badge text-bg-secondary">{it.magrefCount}</span>
|
||||
) : (
|
||||
<span className="text-secondary">-</span>
|
||||
)}
|
||||
</td>
|
||||
<td>{it.year ?? <span className="text-secondary">-</span>}</td>
|
||||
</tr>
|
||||
))}
|
||||
|
||||
@@ -9,6 +9,10 @@ type ReleaseDetailData = {
|
||||
title: string;
|
||||
issueId: number | null;
|
||||
};
|
||||
entryReleases: Array<{
|
||||
releaseSeq: number;
|
||||
year: number | null;
|
||||
}>;
|
||||
release: {
|
||||
entryId: number;
|
||||
releaseSeq: number;
|
||||
@@ -167,6 +171,7 @@ export default function ReleaseDetailClient({ data }: { data: ReleaseDetailData
|
||||
if (!data) return <div className="alert alert-warning">Not found</div>;
|
||||
|
||||
const magazineGroups = groupMagazineRefs(data.magazineRefs);
|
||||
const otherReleases = data.entryReleases.filter((r) => r.releaseSeq !== data.release.releaseSeq);
|
||||
|
||||
return (
|
||||
<div>
|
||||
@@ -265,6 +270,26 @@ export default function ReleaseDetailClient({ data }: { data: ReleaseDetailData
|
||||
|
||||
<hr />
|
||||
|
||||
<div>
|
||||
<h5>Other Releases</h5>
|
||||
{otherReleases.length === 0 && <div className="text-secondary">No other releases</div>}
|
||||
{otherReleases.length > 0 && (
|
||||
<div className="d-flex flex-wrap gap-2">
|
||||
{otherReleases.map((r) => (
|
||||
<Link
|
||||
key={r.releaseSeq}
|
||||
className="badge text-bg-light text-decoration-none"
|
||||
href={`/zxdb/releases/${data.entry.id}/${r.releaseSeq}`}
|
||||
>
|
||||
#{r.releaseSeq}{r.year != null ? ` · ${r.year}` : ""}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<div>
|
||||
<h5>Places (Magazines)</h5>
|
||||
{magazineGroups.length === 0 && <div className="text-secondary">No magazine references</div>}
|
||||
|
||||
Reference in New Issue
Block a user