diff options
| author | 2022-01-18 22:03:20 +0100 | |
|---|---|---|
| committer | 2022-01-18 22:03:20 +0100 | |
| commit | fc845f2661be61b1a86501eed306cb0d7cb60d73 (patch) | |
| tree | d2801f1fe6888e9f538a423a60fbee48098cf6ea /src/components/App/App.tsx | |
| parent | fea814336bc91908fb460de0e41629923564f31a (diff) | |
| download | client-fc845f2661be61b1a86501eed306cb0d7cb60d73.tar.gz client-fc845f2661be61b1a86501eed306cb0d7cb60d73.tar.bz2 client-fc845f2661be61b1a86501eed306cb0d7cb60d73.zip | |
Show historic requests for the session on page loadv1.1.0
Diffstat (limited to 'src/components/App/App.tsx')
| -rw-r--r-- | src/components/App/App.tsx | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx index 3a7fe9b..e361aa5 100644 --- a/src/components/App/App.tsx +++ b/src/components/App/App.tsx | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | import * as React from "react"; | 1 | import * as React from "react"; |
| 2 | import useRequests, {RequestResponse} from "../../hooks/useRequests"; | 2 | import useRequests, {RequestResponse, ReadyState} from "../../hooks/useRequests"; |
| 3 | import {useEffect, useMemo, useState} from "react"; | 3 | import {useEffect, useMemo, useState} from "react"; |
| 4 | 4 | ||
| 5 | import styles from './App.module.scss'; | 5 | import styles from './App.module.scss'; |
| @@ -11,34 +11,56 @@ interface Config { | |||
| 11 | url: string | 11 | url: string |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | type ReadyStateMap = { | ||
| 15 | [ReadyState.CONNECTING]: string, | ||
| 16 | [ReadyState.OPEN]: string, | ||
| 17 | [ReadyState.CLOSING]: string, | ||
| 18 | [ReadyState.CLOSED]: string, | ||
| 19 | } | ||
| 20 | |||
| 21 | const statusMap: ReadyStateMap = { | ||
| 22 | [ReadyState.CONNECTING]: '🔴', | ||
| 23 | [ReadyState.OPEN]: '🟢', | ||
| 24 | [ReadyState.CLOSING]: '🔴', | ||
| 25 | [ReadyState.CLOSED]: '🔴', | ||
| 26 | } | ||
| 27 | |||
| 14 | export default function App() { | 28 | export default function App() { |
| 29 | |||
| 15 | const [config, setConfig]= useState<Config | null>(null) | 30 | const [config, setConfig]= useState<Config | null>(null) |
| 31 | |||
| 32 | const { calls, readyState } = useRequests({ | ||
| 33 | onConnect: async () => { | ||
| 34 | const response = await fetch(`http://${getHost()}/config/`) | ||
| 35 | const config = await response.json() | ||
| 36 | setConfig(config) | ||
| 37 | } | ||
| 38 | }); | ||
| 39 | |||
| 16 | useEffect(() => { | 40 | useEffect(() => { |
| 17 | fetch(`http://${getHost()}/config/`) | 41 | const url = new URL(config?.url ?? 'https://loading...'); |
| 18 | .then(response => response.json() as Promise<Config>) | 42 | document.title = `${statusMap[readyState]} ${url.host} | TTUN`; |
| 19 | .then(setConfig) | 43 | }, [readyState, config?.url]) |
| 20 | }, []) | ||
| 21 | 44 | ||
| 22 | const requests = useRequests(); | ||
| 23 | const [selectedRequestIndex, setSelectedRequestIndex] = useState<number | null>(null); | 45 | const [selectedRequestIndex, setSelectedRequestIndex] = useState<number | null>(null); |
| 24 | const selectedRequest = useMemo<RequestResponse | null>(() => ( | 46 | const selectedRequest = useMemo<RequestResponse | null>(() => ( |
| 25 | selectedRequestIndex === null | 47 | selectedRequestIndex === null |
| 26 | ? null | 48 | ? null |
| 27 | : requests[selectedRequestIndex] | 49 | : calls[selectedRequestIndex] |
| 28 | ), [selectedRequestIndex, requests]); | 50 | ), [selectedRequestIndex, calls]); |
| 29 | 51 | ||
| 30 | return config && ( | 52 | return config && ( |
| 31 | <div className={styles.app}> | 53 | <div className={styles.app}> |
| 32 | <header className={styles.header}> | 54 | <header className={styles.header}> |
| 33 | TTUN | 55 | {statusMap[readyState]} TTUN |
| 34 | <a href={config.url} target="_blank">{config.url}</a> | 56 | <a href={config.url} target="_blank">{config.url}</a> |
| 35 | </header> | 57 | </header> |
| 36 | <main className={styles.main}> | 58 | <main className={styles.main}> |
| 37 | <ul className={styles.sidebar}> | 59 | <ul className={styles.sidebar}> |
| 38 | { | 60 | { |
| 39 | requests.length > 0 | 61 | calls.length > 0 |
| 40 | ? requests.slice(0).reverse().map((requestResponse, index) => ( | 62 | ? calls.slice(0).reverse().map((requestResponse, index) => ( |
| 41 | <li onClick={() => setSelectedRequestIndex(requests.length - index - 1)} key={`request-${index}`}> | 63 | <li onClick={() => setSelectedRequestIndex(calls.length - index - 1)} key={`request-${index}`}> |
| 42 | <RequestSummary requestResponse={requestResponse} /> | 64 | <RequestSummary requestResponse={requestResponse} /> |
| 43 | </li> | 65 | </li> |
| 44 | )) | 66 | )) |
