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 HeadersProps { title: string headers: Headers } function Headers({ title, headers }: HeadersProps) { 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

) }