summaryrefslogtreecommitdiffstats
path: root/src/components/App
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <tom@vanderlee.io>2022-01-18 22:03:20 +0100
committerGravatar Tom van der Lee <tom@vanderlee.io>2022-01-18 22:03:20 +0100
commitfc845f2661be61b1a86501eed306cb0d7cb60d73 (patch)
treed2801f1fe6888e9f538a423a60fbee48098cf6ea /src/components/App
parentfea814336bc91908fb460de0e41629923564f31a (diff)
downloadclient-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')
-rw-r--r--src/components/App/App.tsx46
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 @@
1import * as React from "react"; 1import * as React from "react";
2import useRequests, {RequestResponse} from "../../hooks/useRequests"; 2import useRequests, {RequestResponse, ReadyState} from "../../hooks/useRequests";
3import {useEffect, useMemo, useState} from "react"; 3import {useEffect, useMemo, useState} from "react";
4 4
5import styles from './App.module.scss'; 5import styles from './App.module.scss';
@@ -11,34 +11,56 @@ interface Config {
11 url: string 11 url: string
12} 12}
13 13
14type ReadyStateMap = {
15 [ReadyState.CONNECTING]: string,
16 [ReadyState.OPEN]: string,
17 [ReadyState.CLOSING]: string,
18 [ReadyState.CLOSED]: string,
19}
20
21const statusMap: ReadyStateMap = {
22 [ReadyState.CONNECTING]: '🔴',
23 [ReadyState.OPEN]: '🟢',
24 [ReadyState.CLOSING]: '🔴',
25 [ReadyState.CLOSED]: '🔴',
26}
27
14export default function App() { 28export 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 ))