import * as React from "react"; import { useCallback, useMemo, useState } from "react"; import { RequestResponse, Headers } from "../../hooks/useRequests"; import styles from "./RequestDetails.module.scss"; import RequestSummary from "../RequestSummary/RequestSummary"; import Content from "../Content/Content"; import { getHost } from "../../utils"; import { Button, Card, Col, Container, Nav, Row, Table } from "react-bootstrap"; interface TimingProps { timing: number; } function Timing({ timing }: TimingProps) { const value = useMemo(() => Math.round(timing * 1000) / 1000, [timing]); const showSeconds = useMemo(() => value > 1, [value]); return !Number.isNaN(value) ? ( <>{`${showSeconds ? value : value * 1000}${showSeconds ? "s" : "ms"}`} ) : null; } interface HeaderTableProps { title: string; headers: Headers; } function HeaderTable({ title, headers }: HeaderTableProps) { return ( {headers.map(([key, value]) => ( ))}
{title}
{key} {value}
); } interface DetailsProps { requestResponse: RequestResponse | null; } type Tab = "headers" | "request" | "response"; export default function RequestDetails({ requestResponse }: DetailsProps) { const [tab, selectTab] = useState("headers"); const [raw, setRaw] = useState(false); const resend = useCallback( async () => requestResponse !== null && fetch(`http://${getHost()}/resend/`, { method: "POST", body: JSON.stringify({ ...requestResponse.request, id: undefined, }), }), [requestResponse] ); return requestResponse !== null ? (
{tab === "headers" && ( <> {requestResponse.response && ( )} )} {tab === "request" && ( )} {tab === "response" && requestResponse.response !== undefined && ( )}
) : (

Select a request to inspect it

); }