summaryrefslogtreecommitdiffstats
path: root/src/components/App/App.tsx
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <tom@vanderlee.io>2021-12-30 09:51:00 +0100
committerGravatar Tom van der Lee <tom@vanderlee.io>2022-01-11 00:00:22 +0100
commitbcb77d979d817e1e609adb4d007bbbcc3f61efbd (patch)
tree093c5a2914ee0f6e1ec559b3b98725190fee7285 /src/components/App/App.tsx
downloadclient-1.0.0.tar.gz
client-1.0.0.tar.bz2
client-1.0.0.zip
Prepare for githubv1.0.0
Diffstat (limited to 'src/components/App/App.tsx')
-rw-r--r--src/components/App/App.tsx68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx
new file mode 100644
index 0000000..3a7fe9b
--- /dev/null
+++ b/src/components/App/App.tsx
@@ -0,0 +1,68 @@
1import * as React from "react";
2import useRequests, {RequestResponse} from "../../hooks/useRequests";
3import {useEffect, useMemo, useState} from "react";
4
5import styles from './App.module.scss';
6import Details from "../Details/Details";
7import RequestSummary from "../RequestSummary/RequestSummary";
8import {getHost} from "../../utils";
9
10interface Config {
11 url: string
12}
13
14export default function App() {
15 const [config, setConfig]= useState<Config | null>(null)
16 useEffect(() => {
17 fetch(`http://${getHost()}/config/`)
18 .then(response => response.json() as Promise<Config>)
19 .then(setConfig)
20 }, [])
21
22 const requests = useRequests();
23 const [selectedRequestIndex, setSelectedRequestIndex] = useState<number | null>(null);
24 const selectedRequest = useMemo<RequestResponse | null>(() => (
25 selectedRequestIndex === null
26 ? null
27 : requests[selectedRequestIndex]
28 ), [selectedRequestIndex, requests]);
29
30 return config && (
31 <div className={styles.app}>
32 <header className={styles.header}>
33 TTUN
34 <a href={config.url} target="_blank">{config.url}</a>
35 </header>
36 <main className={styles.main}>
37 <ul className={styles.sidebar}>
38 {
39 requests.length > 0
40 ? requests.slice(0).reverse().map((requestResponse, index) => (
41 <li onClick={() => setSelectedRequestIndex(requests.length - index - 1)} key={`request-${index}`}>
42 <RequestSummary requestResponse={requestResponse} />
43 </li>
44 ))
45 : (
46 <div className={styles.noRequest}>
47 <p>No requests</p>
48 </div>
49 )
50 }
51 </ul>
52
53 <div className={styles.details}>
54 {
55 selectedRequest !== null
56 ? (
57 <Details requestResponse={selectedRequest} />
58 ) : (
59 <div className={styles.noRequestSelected}>
60 <p>Select a request to inspect it</p>
61 </div>
62 )
63 }
64 </div>
65 </main>
66 </div>
67 );
68}