/** * dashboard-client/src/tabs/MaintenanceTab/SchemaHealthCard.tsx — Schema Health card. * * Extracted from MaintenanceTab.tsx (delegate-shell split). Renders schema * version, integrity check, column audit, and FK check from * GET /api/maintenance/schema-health. */ import type React from "react"; import type { SchemaHealthResponse } from "@contracts"; import { Badge } from "../../components/ui/badge"; import { Card, CardHeader, CardTitle, CardContent, } from "../../components/ui/card"; // --------------------------------------------------------------------------- // Schema Health card // --------------------------------------------------------------------------- function ColumnAuditCard({ columns, }: { columns: SchemaHealthResponse["columns"]; }): React.ReactElement { const missing = columns.filter((c) => !c.present); return (
Column Audit ({columns.length} columns, {missing.length} missing)
{columns.map((c) => ( ))}
Table Column Decl Status
{c.table} {c.column} {c.expectedDecl} {c.present ? "✓" : "MISSING"}
); } export function SchemaHealthCard({ data, loading, error, }: { data: SchemaHealthResponse | null; loading: boolean; error: Error | null; }): React.ReactElement { return ( Schema Health {data && ( {data.healthy ? "HEALTHY" : "DEGRADED"} )} {loading && !data && ( Loading… )} {error && !data && ( {error.message} )} {data && ( <>
Schema version {data.schemaVersion}
Integrity {data.integrity.join("; ")}
{data.fkCheck.length > 0 && (
FK Check ({data.fkCheck.length})
{data.fkCheck.map((line, i) => (
{line}
))}
)} )}
); }