// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { I18n, Logger } from '@aws-amplify/core'; import { useEffect, useState } from 'react'; import { useLocation } from 'react-router'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Breadcrumb from 'react-bootstrap/Breadcrumb'; import { API } from '@aws-amplify/api'; import { API_NAME } from '../../util/Utils'; /** * Renders the header of the UI. * @returns page title bar */ export default function PageTitleBar(props: any): JSX.Element { const location = useLocation(); const logger = new Logger('Page Title'); const [running, setRunning] = useState({ devices: 0, sims: 0 }); /** * Gets number of simulations and devices running from DynamoDb */ const getSimulationStats = async () => { try { const results = await API.get(API_NAME, '/simulation', { queryStringParameters: { op: "getRunningStat" } }); setRunning(results); } catch (err) { logger.error(I18n.get("simulations.get.error"), err); throw err; } } /** * react useEffect hook * updates title bar every 30 seconds */ useEffect(() => { const interval = setInterval(() => { getSimulationStats(); }, 30000); return () => clearInterval(interval); }, []); /** * adds a breadcrumb for each item in path * @returns Breadcrumb item */ const getPaths = () => { const pages = location.pathname.split('/'); let pageItems: Array = []; pages.forEach((page, index) => { pageItems.push(page.replace("-", " ")); }) pageItems.splice(0, 1); return (pageItems.map((page, index) => ( {page} )) ) } return (

{props.title}

{I18n.get("home")} {getPaths()}
{I18n.get('devices')}

{`${running.devices} ${I18n.get("running")}`}

{I18n.get('simulations')}

{`${running.sims} ${I18n.get("running")}`}

); }