import * as React from "react"; import { useCallback, useContext, useMemo, useState } from "react"; import styles from "~/components/RequestDetails/RequestDetails.module.scss"; import RequestSummary from "~/components/RequestSummary/RequestSummary"; import Content from "~/components/Content/Content"; import { getHost } from "~/utils"; import { Button, Card, Col, Container, Nav, Row, Table } from "react-bootstrap"; import { Call, Headers, selectedCall } from "~/types"; import { ConnectionContext } from "~/contexts/Connection"; import Frames from "~/components/Frames/Frames"; 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}
); } type Tab = "headers" | "request" | "response" | "messages"; export default function RequestDetails() { const { selectedCall } = useContext(ConnectionContext); const [tab, selectTab] = useState("headers"); const [raw, setRaw] = useState(false); const resend = useCallback( async () => selectedCall !== null && fetch(`http://${getHost()}/resend/`, { method: "POST", body: JSON.stringify({ ...selectedCall.request, id: undefined, }), }), [selectedCall] ); return selectedCall !== null ? (
{tab === "headers" && ( <> {selectedCall.type === "RequestResponse" && selectedCall.response !== undefined && ( )} )} {tab === "request" && ( )} {selectedCall.type === "RequestResponse" && tab === "response" && selectedCall.response !== undefined && ( )} {selectedCall.type === "WebsocketConnection" && tab === "response" && ( // //
{JSON.stringify(selectedCall.frames, undefined, 2)}
)}
) : (

Select a request to inspect it

); }