import { Fragment, useState } from "react"; import type { ResourceKind, ResourcePage, ResourceRecord } from "../contracts"; import { Modal } from "./Modal"; import { StatusPill } from "./StatusPill"; export type Density = "comfortable" | "compact"; export type ColumnKey = "name" | "status" | "project" | "summary" | "risk" | "decision" | "actions"; const ALL_COLUMNS: Record = { projects: ["name", "status", "project", "summary"], servers: ["name", "status", "project", "summary"], tools: ["name", "status", "project", "summary", "risk", "actions"], connectors: ["name", "status", "project", "summary"], clients: ["name", "status", "project", "summary", "actions"], policies: ["name", "status", "project", "summary"], audit: ["name", "status", "project", "summary", "decision"], }; export function columnsFor(kind: ResourceKind): ColumnKey[] { return ALL_COLUMNS[kind]; } export function DataTable({ data, kind, density, visibleColumns, onClientAction, onConfig, onTest, navigate, busyClientId, }: { data: ResourcePage; kind: ResourceKind; density: Density; visibleColumns: ColumnKey[]; onClientAction: (id: string, action: "disable" | "revoke") => void; onConfig: (id: string) => void; onTest: (row: ResourceRecord) => void; navigate?: (next: string) => void; busyClientId?: string | null; }) { const show = (column: ColumnKey) => visibleColumns.includes(column); const [confirmingAction, setConfirmingAction] = useState<{ id: string; action: "disable" | "revoke"; name: string } | null>(null); const actions = (row: ResourceRecord) => { if (kind === "clients" && show("actions")) { const disabled = busyClientId === row.id; const resume = `/clients?onboard=${encodeURIComponent(row.id)}`; const secondary = <>{row.onboardingStage ? { event.preventDefault(); navigate(resume); } : undefined}>Onboarding : null}; return
{secondary}
More actions
{secondary}
; } if (kind === "tools" && show("actions")) return
; return null; }; const name = (row: ResourceRecord) => { const href = kind === "projects" ? `/projects/${encodeURIComponent(row.id)}` : kind === "connectors" ? `/connectors/${encodeURIComponent(row.id)}` : kind === "clients" ? row.onboardingStage ? `/clients?onboard=${encodeURIComponent(row.id)}` : `/clients?q=${encodeURIComponent(row.id)}` : null; return href ? { event.preventDefault(); navigate(href); } : undefined}>{row.name} : {row.name}; }; return (
{show("name") && } {show("status") && } {show("project") && } {show("summary") && } {kind === "tools" && show("risk") && } {kind === "audit" && show("decision") && } {(kind === "clients" || kind === "tools") && show("actions") && } {data.rows.map((row) => ( {show("name") && } {show("status") && } {show("project") && } {show("summary") && } {kind === "tools" && show("risk") && } {kind === "audit" && show("decision") && } {(kind === "clients" || kind === "tools") && show("actions") && } ))}
{kind} records
NameStatusProjectSummaryRiskDecision / traceActions
{name(row)}{row.id}{row.project ?? "—"}{row.summary}{row.onboardingStage ? {row.onboardingStage} : null}{row.risk ?? "R0"}{row.decision ?? "unknown"}{row.traceId && {row.traceId}}{actions(row)}
{data.rows.map((row) =>
{name(row)}{row.id}
{show("status") && }
{show("project") && <>
Project
{row.project ?? "—"}
}{show("summary") && <>
Summary
{row.summary}{row.onboardingStage ? {row.onboardingStage} : null}
}{kind === "tools" && show("risk") && <>
Risk
{row.risk ?? "R0"}
}{kind === "audit" && show("decision") && <>
Decision / trace
{row.decision ?? "unknown"}{row.traceId && {row.traceId}}
}
{actions(row)}
)}
setConfirmingAction(null)} >

This action is logged and takes effect immediately.

); }