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 && (
)
}
)
}