import { ChevronDown, ChevronRight, Clipboard } from "lucide-react"; import { useState } from "react"; import type { RequestLog } from "../../types/requestLog"; import { formatJson } from "../../utils/format"; const RequestLogTab = ({ requestLog, copiedLogId, onClear, onCopy, }: { requestLog: RequestLog[]; copiedLogId: number | null; onClear: () => void; onCopy: (entry: RequestLog) => void; }) => { const [expanded, setExpanded] = useState>({}); const toggleExpanded = (id: number) => { setExpanded((prev) => ({ ...prev, [id]: !prev[id] })); }; return ( <>
{requestLog.length} requests
{requestLog.length === 0 ? (
No requests logged yet.
) : (
{requestLog.map((entry) => { const isExpanded = expanded[entry.id] ?? false; const hasDetails = entry.headers || entry.body || entry.responseBody; return (
{isExpanded && (
{entry.headers && Object.keys(entry.headers).length > 0 && (
Request Headers
                          {Object.entries(entry.headers)
                            .map(([k, v]) => `${k}: ${v}`)
                            .join("\n")}
                        
)} {entry.body && (
Request Body
{formatJsonSafe(entry.body)}
)} {entry.responseBody && (
Response Body
{formatJsonSafe(entry.responseBody)}
)}
)}
); })}
)} ); }; const formatJsonSafe = (text: string): string => { try { const parsed = JSON.parse(text); return formatJson(parsed); } catch { return text; } }; export default RequestLogTab;