1+ import React , { useEffect , useState } from "react" ;
2+ import { PageId } from "../PageId" ;
3+ import { GraphPage } from "./graph/GraphPage" ;
4+ import { fetchStats , Host , HostId , Stats } from "./Stats" ;
5+ import { HostsTablePage } from "./table/HostsTablePage" ;
6+
7+ export interface HostsPageProps {
8+ currentPageId : PageId ;
9+ setCurrentPageId : ( currentPageId : PageId ) => void ;
10+ }
11+
12+ export const HostsPage : React . FC < HostsPageProps > =
13+ ( { currentPageId, setCurrentPageId } ) => {
14+ const [ maybeStats , setMaybeStats ] = useState < Stats | null > ( null ) ;
15+ const [ maybeSelectedHostId , setMaybeSelectedHostId ] = useState < HostId | null > ( null ) ;
16+
17+ useEffect ( ( ) => {
18+ fetchStats ( ) . then ( stats => {
19+ setMaybeStats ( stats ) ;
20+ } ) . catch ( console . error ) ;
21+ } , [ ] ) ;
22+
23+ if ( maybeStats === null ) {
24+ return < p > Loading…</ p > ;
25+ }
26+ const stats = maybeStats ;
27+
28+ const maybeSelectedHostWithoutId =
29+ maybeSelectedHostId === null
30+ ? null
31+ : stats . hosts . get ( maybeSelectedHostId , null )
32+
33+ const maybeSelectedHost : Host & { hostId : HostId } | null =
34+ maybeSelectedHostId === null || maybeSelectedHostWithoutId == null
35+ ? null
36+ : { hostId : maybeSelectedHostId , ...maybeSelectedHostWithoutId } ;
37+
38+ const setSelectedHostIdAndViewGraph : ( hostId : HostId ) => void =
39+ ( hostId ) => {
40+ setMaybeSelectedHostId ( hostId ) ;
41+ setCurrentPageId ( PageId . hostsGraph ) ;
42+ } ;
43+
44+ return currentPageId === PageId . hostsTable
45+ ? < HostsTablePage { ...{ stats, setSelectedHostIdAndViewGraph } } />
46+ : < GraphPage { ...{ maybeStats, maybeSelectedHost, maybeSelectedHostId, setMaybeSelectedHostId } } />
47+ } ;
0 commit comments