SPB Git
2.0 KB · 11 lines tsx
1import Link from "next/link";2import { adminPaperList } from "@/lib/admin/queries";3import { Notice, PageTitle } from "@/components/admin-ui";4export default async function AdminPapers({ searchParams }: { searchParams: Promise<Record<string, string | undefined>> }) {5  const sp = await searchParams; const rows = await adminPaperList(sp.q || undefined, sp.status || undefined);6  return (<div><PageTitle title={`Papers (${rows.length})`}><Link href="/admin/papers/new" className="btn btn-primary btn-sm no-underline">New paper</Link></PageTitle><Notice sp={sp} />7    <form className="flex flex-wrap gap-2 mb-4"><input name="q" defaultValue={sp.q ?? ""} placeholder="Search title or identifier" className="input !w-64" /><select name="status" defaultValue={sp.status ?? ""} className="input !w-auto"><option value="">All statuses</option>{["published", "draft", "reserved", "withdrawn", "superseded"].map((s) => <option key={s} value={s}>{s}</option>)}</select><button className="btn btn-sm">Filter</button></form>8    <div className="card overflow-x-auto"><table className="data"><thead><tr><th>ID</th><th>Title</th><th>Authors</th><th>Status</th><th>Version</th><th>PDF</th><th>Views / DL</th><th>Updated</th></tr></thead>9      <tbody>{rows.map((p) => <tr key={p.id}><td className="font-mono text-navy whitespace-nowrap"><Link href={`/admin/papers/${p.id}`} className="no-underline hover:underline">{p.identifier}</Link></td><td><Link href={`/admin/papers/${p.id}`} className="text-fg no-underline hover:underline">{p.title}</Link>{p.featured ? <span className="chip chip-burgundy ml-2">featured</span> : null}</td><td className="text-fg-2 text-xs">{p.authors}</td><td><span className={`chip ${p.status === "published" ? "chip-navy" : p.status === "withdrawn" ? "chip-burgundy" : ""}`}>{p.status}</span></td><td>{p.version_label ?? "—"}</td><td>{p.has_pdf ? "✓" : "—"}</td><td className="whitespace-nowrap">{p.view_count} / {p.download_count}</td><td className="whitespace-nowrap text-xs">{p.updated_at.slice(0, 16)}</td></tr>)}</tbody></table></div></div>);10}11
Files · main
Menu

Theme