import Link from "next/link"; import { listTools } from "@/lib/admin/tools"; import { fmtDate, label } from "@/lib/utils"; import { Badge } from "@/components/ui/badge"; export default async function AdminTools({ searchParams }: { searchParams: Promise> }) { const sp = await searchParams; const res = await listTools({ q: sp.q, status: sp.status, visibility: sp.visibility, linkState: sp.linkState, depth: sp.depth, category: sp.category, page: Number(sp.page ?? 1), sort: sp.sort as any }); const qs = (patch: Record) => { const p = new URLSearchParams(); for (const [k, v] of Object.entries({ ...sp, ...patch })) if (v) p.set(k, v); return `/admin/tools?${p}`; }; return (

Tools

{res.total} records

New record
{[["status", ["draft", "reviewed", "published", "deprecated"]], ["visibility", ["public", "private"]], ["linkState", ["ok", "redirected", "broken", "unchecked"]], ["depth", ["deep", "standard"]], ["sort", ["updated", "name", "quality", "checked"]]].map(([k, opts]) => ( ))}
{res.items.map((t: any) => ( ))}
NameCategoryStatusDepthQualityLinksCheckedOwnerUpdated
{t.name}{t.slug}{t.visibility === "private" ? " · private" : ""}{t.featured ? " · featured" : ""}{t.category ?? "—"} {t.editorialStatus}{label(t.depth)}{t.qualityScore} {label(t.linkState)}{fmtDate(t.checkedAt)}{t.useState ?? "—"}{fmtDate(t.updatedAt)}
{res.page > 1 && Previous}Page {res.page} / {res.pages}{res.page < res.pages && Next}
); }