import { useQuery } from "@tanstack/react-query"; import { Link } from "wouter"; import type { RunDetailResponse } from "./types"; import { fetchAdminJson, getAdminErrorMessage } from "./api"; export default function AdminRunDetail({ runId }: { runId: string }) { const detailQuery = useQuery({ queryKey: ["admin/runs", runId], queryFn: async () => { const data = await fetchAdminJson(`admin/runs/${runId}`, { treat404AsNull: true, }); return data; }, }); if (detailQuery.isLoading) { return
Loading run...
; } if (detailQuery.isError) { return (
{getAdminErrorMessage(detailQuery.error, "Failed to load run.")}
); } if (!detailQuery.data) { return
Run not found.
; } const { run, config, engine_status, state_snapshot, ledger_events, orders, trades, invariants } = detailQuery.data; return (
<- Back to runs

{run.run_id}

User: {run.user_id}

Metadata

Status: {run.status}

Mode: {run.mode ?? "-"}

Strategy: {run.strategy ?? "-"}

Started: {run.started_at ?? "-"}

Last event: {run.last_event_time ?? "-"}

Engine Status

Status: {engine_status?.status ?? "-"}

Updated: {engine_status?.last_updated ?? "-"}

Config

{JSON.stringify(config, null, 2)}
          

State Snapshot

{JSON.stringify(state_snapshot, null, 2)}
          

Invariants

{Object.entries(invariants).map(([key, value]) => (
{key} {String(value)}
))}

Ledger Events

{ledger_events.map((evt: RunDetailResponse["ledger_events"][number], idx: number) => (
{String(evt.event)}{" "} {String(evt.timestamp ?? "")}
))}

Orders

{orders.map((order: RunDetailResponse["orders"][number], idx: number) => ( ))}
ID Symbol Side
{String(order.id)} {String(order.symbol)} {String(order.side)}

Trades

{trades.map((trade: RunDetailResponse["trades"][number], idx: number) => ( ))}
ID Symbol Side
{String(trade.id)} {String(trade.symbol)} {String(trade.side)}
); }