diff options
| author | 2022-02-12 11:33:52 +0100 | |
|---|---|---|
| committer | 2022-02-12 11:33:52 +0100 | |
| commit | 871a85d9343cf49646d13dc455c062efadcb959a (patch) | |
| tree | 7d36b14b237719901d71d58c88f74b87b875ee61 /src/components/RequestDetails/RequestDetails.tsx | |
| parent | 7c48533571e9f9d3731a59433a56cc8d6e008123 (diff) | |
| download | client-871a85d9343cf49646d13dc455c062efadcb959a.tar.gz client-871a85d9343cf49646d13dc455c062efadcb959a.tar.bz2 client-871a85d9343cf49646d13dc455c062efadcb959a.zip | |
Beatified codev1.3.0
Diffstat (limited to 'src/components/RequestDetails/RequestDetails.tsx')
| -rw-r--r-- | src/components/RequestDetails/RequestDetails.tsx | 159 |
1 files changed, 72 insertions, 87 deletions
diff --git a/src/components/RequestDetails/RequestDetails.tsx b/src/components/RequestDetails/RequestDetails.tsx index 34e572c..693f691 100644 --- a/src/components/RequestDetails/RequestDetails.tsx +++ b/src/components/RequestDetails/RequestDetails.tsx | |||
| @@ -1,94 +1,87 @@ | |||
| 1 | import * as React from "react"; | 1 | import * as React from "react"; |
| 2 | import {useCallback, useMemo, useState} from "react"; | 2 | import { useCallback, useMemo, useState } from "react"; |
| 3 | import {RequestResponse, Headers} from "../../hooks/useRequests"; | 3 | import { RequestResponse, Headers } from "../../hooks/useRequests"; |
| 4 | import styles from "./RequestDetails.module.scss"; | 4 | import styles from "./RequestDetails.module.scss"; |
| 5 | import RequestSummary from "../RequestSummary/RequestSummary"; | 5 | import RequestSummary from "../RequestSummary/RequestSummary"; |
| 6 | import Content from "../Content/Content"; | 6 | import Content from "../Content/Content"; |
| 7 | import {getHost} from "../../utils"; | 7 | import { getHost } from "../../utils"; |
| 8 | import {Button, Card, Col, Container, Nav, Row, Table} from "react-bootstrap"; | 8 | import { Button, Card, Col, Container, Nav, Row, Table } from "react-bootstrap"; |
| 9 | |||
| 10 | 9 | ||
| 11 | interface TimingProps { | 10 | interface TimingProps { |
| 12 | timing: number; | 11 | timing: number; |
| 13 | } | 12 | } |
| 14 | 13 | ||
| 15 | |||
| 16 | function Timing({ timing }: TimingProps) { | 14 | function Timing({ timing }: TimingProps) { |
| 17 | const value = useMemo(() => (Math.round(timing * 1000) / 1000), [timing]); | 15 | const value = useMemo(() => Math.round(timing * 1000) / 1000, [timing]); |
| 18 | const showSeconds = useMemo(() => value > 1, [value]); | 16 | const showSeconds = useMemo(() => value > 1, [value]); |
| 19 | 17 | ||
| 20 | return !Number.isNaN(value) | 18 | return !Number.isNaN(value) ? ( |
| 21 | ? ( | 19 | <>{`${showSeconds ? value : value * 1000}${showSeconds ? "s" : "ms"}`}</> |
| 22 | <> | 20 | ) : null; |
| 23 | {`${showSeconds ? value : value * 1000}${ showSeconds ? 's' : 'ms' }`} | ||
| 24 | </> | ||
| 25 | ) | ||
| 26 | : null; | ||
| 27 | } | 21 | } |
| 28 | 22 | ||
| 29 | interface HeadersProps { | 23 | interface HeadersProps { |
| 30 | title: string | 24 | title: string; |
| 31 | headers: Headers | 25 | headers: Headers; |
| 32 | } | 26 | } |
| 33 | 27 | ||
| 34 | function Headers({ title, headers }: HeadersProps) { | 28 | function Headers({ title, headers }: HeadersProps) { |
| 35 | return ( | 29 | return ( |
| 36 | <Card className="m-3"> | 30 | <Card className="m-3"> |
| 37 | <Table | 31 | <Table striped responsive borderless hover className="mb-0"> |
| 38 | striped | 32 | <thead> |
| 39 | responsive | 33 | <tr> |
| 40 | borderless | 34 | <th colSpan={2} className="bg-dark text-white rounded-top"> |
| 41 | hover | 35 | {title} |
| 42 | className='mb-0' | 36 | </th> |
| 43 | > | 37 | </tr> |
| 44 | <thead> | 38 | </thead> |
| 39 | <tbody> | ||
| 40 | {headers.map(([key, value]) => ( | ||
| 45 | <tr> | 41 | <tr> |
| 46 | <th colSpan={2} className="bg-dark text-white rounded-top">{ title }</th> | 42 | <td>{key}</td> |
| 43 | <td>{value}</td> | ||
| 47 | </tr> | 44 | </tr> |
| 48 | </thead> | 45 | ))} |
| 49 | <tbody> | 46 | </tbody> |
| 50 | { | 47 | </Table> |
| 51 | headers.map(([key, value]) => ( | ||
| 52 | <tr> | ||
| 53 | <td>{key}</td> | ||
| 54 | <td>{value}</td> | ||
| 55 | </tr> | ||
| 56 | )) | ||
| 57 | } | ||
| 58 | </tbody> | ||
| 59 | </Table> | ||
| 60 | </Card> | 48 | </Card> |
| 61 | ) | 49 | ); |
| 62 | } | 50 | } |
| 63 | 51 | ||
| 64 | interface DetailsProps { | 52 | interface DetailsProps { |
| 65 | requestResponse: RequestResponse | null | 53 | requestResponse: RequestResponse | null; |
| 66 | } | 54 | } |
| 67 | 55 | ||
| 68 | type Tab = 'headers' | 'request' | 'response' | 56 | type Tab = "headers" | "request" | "response"; |
| 69 | 57 | ||
| 70 | export default function RequestDetails({ requestResponse }: DetailsProps) { | 58 | export default function RequestDetails({ requestResponse }: DetailsProps) { |
| 71 | const [tab, selectTab] = useState<Tab>('headers'); | 59 | const [tab, selectTab] = useState<Tab>("headers"); |
| 72 | const [raw, setRaw] = useState(false); | 60 | const [raw, setRaw] = useState(false); |
| 73 | 61 | ||
| 74 | const resend = useCallback(async () => requestResponse !== null && fetch( | 62 | const resend = useCallback( |
| 75 | `http://${getHost()}/resend/`, | 63 | async () => |
| 76 | { | 64 | requestResponse !== null && |
| 77 | method: 'POST', | 65 | fetch(`http://${getHost()}/resend/`, { |
| 78 | body: JSON.stringify({ | 66 | method: "POST", |
| 79 | ...requestResponse.request, | 67 | body: JSON.stringify({ |
| 80 | id: undefined | 68 | ...requestResponse.request, |
| 81 | }) | 69 | id: undefined, |
| 82 | } | 70 | }), |
| 83 | ), [requestResponse]); | 71 | }), |
| 72 | [requestResponse] | ||
| 73 | ); | ||
| 84 | 74 | ||
| 85 | return requestResponse !== null ? ( | 75 | return requestResponse !== null ? ( |
| 86 | <div className={styles.details}> | 76 | <div className={styles.details}> |
| 87 | <div className={styles.header}> | 77 | <div className={styles.header}> |
| 88 | <Row> | 78 | <Row> |
| 89 | <Col> | 79 | <Col> |
| 90 | <Container fluid style={{ fontSize: '1.5em' }} className="py-3"> | 80 | <Container fluid style={{ fontSize: "1.5em" }} className="py-3"> |
| 91 | <RequestSummary requestResponse={requestResponse} className={styles.summary}/> | 81 | <RequestSummary |
| 82 | requestResponse={requestResponse} | ||
| 83 | className={styles.summary} | ||
| 84 | /> | ||
| 92 | </Container> | 85 | </Container> |
| 93 | </Col> | 86 | </Col> |
| 94 | </Row> | 87 | </Row> |
| @@ -100,14 +93,10 @@ export default function RequestDetails({ requestResponse }: DetailsProps) { | |||
| 100 | onSelect={(tab) => selectTab(tab as Tab)} | 93 | onSelect={(tab) => selectTab(tab as Tab)} |
| 101 | > | 94 | > |
| 102 | <Nav.Item> | 95 | <Nav.Item> |
| 103 | <Nav.Link eventKey="headers"> | 96 | <Nav.Link eventKey="headers">Headers</Nav.Link> |
| 104 | Headers | ||
| 105 | </Nav.Link > | ||
| 106 | </Nav.Item> | 97 | </Nav.Item> |
| 107 | <Nav.Item> | 98 | <Nav.Item> |
| 108 | <Nav.Link eventKey="request"> | 99 | <Nav.Link eventKey="request">Request</Nav.Link> |
| 109 | Request | ||
| 110 | </Nav.Link> | ||
| 111 | </Nav.Item> | 100 | </Nav.Item> |
| 112 | <Nav.Item> | 101 | <Nav.Item> |
| 113 | <Nav.Link | 102 | <Nav.Link |
| @@ -121,46 +110,42 @@ export default function RequestDetails({ requestResponse }: DetailsProps) { | |||
| 121 | </Col> | 110 | </Col> |
| 122 | <Col className="border-bottom px-3 " xs="auto"> | 111 | <Col className="border-bottom px-3 " xs="auto"> |
| 123 | <Timing timing={requestResponse.response?.timing ?? NaN} /> | 112 | <Timing timing={requestResponse.response?.timing ?? NaN} /> |
| 124 | <Button variant="outline-primary" onClick={() => resend()} className="ms-3"> | 113 | <Button |
| 114 | variant="outline-primary" | ||
| 115 | onClick={() => resend()} | ||
| 116 | className="ms-3" | ||
| 117 | > | ||
| 125 | Resend | 118 | Resend |
| 126 | </Button> | 119 | </Button> |
| 127 | </Col> | 120 | </Col> |
| 128 | </Row> | 121 | </Row> |
| 129 | </div> | 122 | </div> |
| 130 | <div className={styles.content}> | 123 | <div className={styles.content}> |
| 131 | { | 124 | {tab === "headers" && ( |
| 132 | tab === 'headers' && ( | 125 | <> |
| 133 | <> | 126 | <Headers |
| 127 | title="request headers" | ||
| 128 | headers={requestResponse.request.headers} | ||
| 129 | /> | ||
| 130 | {requestResponse.response && ( | ||
| 134 | <Headers | 131 | <Headers |
| 135 | title="request headers" | 132 | title="response headers" |
| 136 | headers={requestResponse.request.headers} | 133 | headers={requestResponse.response.headers} |
| 137 | /> | 134 | /> |
| 138 | { | 135 | )} |
