"use client"; import type { RouterOutputs } from "@openstatus/api"; import { calculateTiming } from "@openstatus/tinybird/src/schema"; import { DataTableSheet, DataTableSheetContent, DataTableSheetHeader, DataTableSheetTitle, } from "@/components/data-table/data-table-sheet"; import { DataTableBasics } from "./data-table-basics"; type TestTCP = RouterOutputs["checker"]["testTcp"]; type TestHTTP = RouterOutputs["checker"]["testHttp"]; type TestDNS = RouterOutputs["checker"]["testDns"]; type Monitor = NonNullable; export function DataTableSheetTest({ data, monitor, onClose, }: { data: TestTCP | TestHTTP | TestDNS | null; monitor: Monitor; onClose: () => void; }) { if (!data) return null; const _data = mapping(data, monitor); if (!_data) return null; return ( {/* NOTE: we are using onCloseAutoFocus to reset with a delay to avoid abrupt closing of the sheet */} Test Result ); } function mapping(data: TestTCP | TestHTTP | TestDNS, monitor: Monitor) { switch (data.type) { case "http": return { id: null, trigger: null, timestamp: data.timestamp, cronTimestamp: data.timestamp, type: data.type, requestStatus: "success", statusCode: data.status, headers: data.headers, region: data.region, latency: data.latency, timing: calculateTiming(data.timing), url: monitor.url, workspaceId: String(monitor.workspaceId), error: false, monitorId: String(monitor.id), assertions: monitor.assertions ?? null, message: null, body: data.body ?? null, } as const; case "tcp": return { id: null, trigger: null, timestamp: data.timestamp, cronTimestamp: data.timestamp, region: data.region, type: data.type, requestStatus: "success", error: false, latency: data.latency ?? 0, uri: monitor.url, monitorId: String(monitor.id), errorMessage: null, assertions: null, } as const; // FIXM: add DNS props case "dns": return { id: null, trigger: null, timestamp: data.timestamp, cronTimestamp: data.timestamp, region: data.region, type: data.type, requestStatus: "success", monitorId: String(monitor.id), error: false, uri: monitor.url, latency: data.latency ?? 0, records: data.records, errorMessage: null, assertions: null, } as const; default: return null; } }