From 7c48533571e9f9d3731a59433a56cc8d6e008123 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sat, 12 Feb 2022 10:59:19 +0100 Subject: Added search and filter options --- src/components/RequestDetails/RequestDetails.tsx | 166 +++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 src/components/RequestDetails/RequestDetails.tsx (limited to 'src/components/RequestDetails/RequestDetails.tsx') diff --git a/src/components/RequestDetails/RequestDetails.tsx b/src/components/RequestDetails/RequestDetails.tsx new file mode 100644 index 0000000..34e572c --- /dev/null +++ b/src/components/RequestDetails/RequestDetails.tsx @@ -0,0 +1,166 @@ +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

+
+ ) +} -- cgit v1.2.3