import * as React from "react"; import {useCallback, useMemo, useState} from "react"; import {RequestResponse} from "~hooks/useRequests"; import styles from "./Details.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: { [key: string]: string } } function Headers({ title, headers }: HeadersProps) { return ( { Object.entries(headers).map(([key, value]) => ( )) }
{ title }
{key} {value}
) } interface DetailsProps { requestResponse: RequestResponse } type Tab = 'headers' | 'request' | 'response' export default function Details({ requestResponse }: DetailsProps) { const [tab, selectTab] = useState('headers'); const [raw, setRaw] = useState(false); const resend = useCallback(async () => fetch( `http://${getHost()}/resend/`, { method: 'POST', body: JSON.stringify({ ...requestResponse.request, id: undefined }) } ), [requestResponse]); return (
{ tab === 'headers' && ( <> { requestResponse.response && ( ) } ) } { tab === 'request' && ( ) } { tab === 'response' && requestResponse.response !== undefined && ( ) }
) }