"use client"; import Link from "next/link"; import { ArrowLeft } from "lucide-react"; import { api, type DatasetDetail } from "@/lib/api"; import { useAsync, useQueryParam } from "@/lib/hooks"; import { fmtBytes, fmtInt, fmtTs } from "@/lib/format"; import { Card, Empty, ErrorState, KV, PageHeader, Skeleton, StatusBadge } from "@/components/ui"; import { DataTable } from "@/components/DataTable"; import { JsonView } from "@/components/JsonView"; export default function DatasetDetailPage() { const id = useQueryParam("id"); const { data, error, loading, reload } = useAsync((s) => api.get(`/catalog/datasets/${encodeURIComponent(id!)}`, undefined, s), [id], { enabled: !!id }); const d = data?.data; return ( <> Datasets {id}} actions={ d && ( <> {d.status === "active" && d.kind === "market_bars" && ( Explore bars )} {d.status === "active" && ( Coverage )} ) } /> {!id && Missing ?id= parameter.} {error && } {loading && !data && } {d && (

{d.description || No description.}

{d.notes &&

{d.notes}

}

{d.license_text || "License not yet determined."}

v.version} mobile="scroll" columns={[ { key: "version", header: "Version", render: (v) => v{v.version} }, { key: "snapshot_id", header: "Snapshot", mono: true }, { key: "row_count", header: "Rows", num: true, render: (v) => fmtInt(v.row_count) }, { key: "file_count", header: "Files", num: true, render: (v) => fmtInt(v.file_count) }, { key: "bytes", header: "Bytes", num: true, render: (v) => fmtBytes(v.bytes) }, { key: "created_at", header: "Created", render: (v) => {fmtTs(v.created_at)} }, { key: "note", header: "Note", render: (v) => {v.note ?? "—"} }, ]} empty="No version published yet." /> f.layout} mobile="scroll" columns={[ { key: "layout", header: "Layout", render: (f) => {f.layout} }, { key: "n", header: "Files", num: true, render: (f) => fmtInt(f.n) }, { key: "rows", header: "Rows", num: true, render: (f) => fmtInt(f.rows) }, { key: "bytes", header: "Bytes", num: true, render: (f) => fmtBytes(f.bytes) }, { key: "d0", header: "From", render: (f) => f.d0 ?? "—" }, { key: "d1", header: "To", render: (f) => f.d1 ?? "—" }, ]} empty="No files registered." /> {data.checkpoints.length === 0 ? ( No checkpoints. ) : (
    {data.checkpoints.map((c) => (
  • {c.key} {fmtTs(c.updated_at)}
  • ))}
)}
)} ); }