import { Alert, Badge, Group, Paper, SimpleGrid, Stack, Text } from "@mantine/core"; import { IconClipboard } from "@tabler/icons-react"; export interface PreviewNamedRequest { id: string; kind: "query" | "action"; method: string; path: string; minimumBoardPermission?: string; } export interface PreviewJournalEntry { id: string; requestId: string; method: string; path: string; simulated: boolean; status: number | null; durationMs: number; } interface PreviewRequestPanelMessages { method: string; authentication: string; endpoint: string; status: string; notRun: string; named: string; journal: string; journalEmpty: string; simulated: string; redacted: string; permission: (permission: string) => string; duration: (duration: number) => string; } interface PreviewRequestPanelProps { method: string; authentication: string; endpoint: string; status?: number; namedRequests: PreviewNamedRequest[]; journal?: PreviewJournalEntry[]; methodColor: (method: string) => string; messages: PreviewRequestPanelMessages; } const journalColor = ({ simulated, status }: PreviewJournalEntry): string => { if (simulated) return "yellow"; if (status !== null && status >= 200 && status < 400) return "green"; return "red"; }; export function PreviewRequestPanel({ method, authentication, endpoint, status, namedRequests, journal, methodColor, messages, }: PreviewRequestPanelProps) { return ( {namedRequests.length > 0 && ( {messages.named} {namedRequests.map((request) => ( {request.id} {request.path} {request.method} {messages.permission(request.minimumBoardPermission ?? "view")} ))} )} {journal && journal.length > 0 ? ( {messages.journal} {journal.map((entry) => ( {entry.requestId} {entry.path} {entry.method} {entry.simulated ? messages.simulated : (entry.status ?? "—")} {messages.duration(entry.durationMs)} ))} ) : ( {messages.journalEmpty} )} }> {messages.redacted} ); } function RequestFact({ label, value }: { label: string; value: string }) { return ( {label} {value || "—"} ); }