import * as React from "react"; import { RequestPayload, RequestResponse, ResponsePayload } from "~hooks/useRequests"; import {useCallback, useEffect, useMemo, useState} from "react"; import styles from "./Details.module.scss"; import RequestSummary from "../RequestSummary/RequestSummary"; import classNames from 'classnames'; import Content from "../Content/Content"; import {getHost} from "../../utils"; 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 (

{ title }

{ Object.entries(headers).map(([key, value]) => ( <>
{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 && ( ) }
) }