From 99b148cdc558040ac349b3b3dcb917632260934a Mon Sep 17 00:00:00 2001 From: James Pace Date: Sat, 7 Mar 2026 15:02:23 +0000 Subject: [PATCH] Cleanup display. --- src/AppNav.tsx | 2 +- src/Home.tsx | 63 +++++++++++++++++++++++++++++++++++++------------ src/Version.tsx | 28 ++++++++++------------ 3 files changed, 61 insertions(+), 32 deletions(-) diff --git a/src/AppNav.tsx b/src/AppNav.tsx index 58f72d8..4ad09c9 100644 --- a/src/AppNav.tsx +++ b/src/AppNav.tsx @@ -6,7 +6,7 @@ export function AppNav() { - J7-Bridge + J7s-Bridge diff --git a/src/Home.tsx b/src/Home.tsx index 7cd58e7..b944640 100644 --- a/src/Home.tsx +++ b/src/Home.tsx @@ -1,6 +1,6 @@ import { AppNav, Footer } from "./AppNav.tsx"; import { Container, Row, Col, Image, Card } from "react-bootstrap"; -import { atom, useAtom } from "jotai"; +import { atom, useAtomValue } from "jotai"; import { atomWithQuery } from "jotai-tanstack-query"; const costmapImageQuery = async () => { @@ -11,33 +11,66 @@ const costmapImageQuery = async () => { const blob = await resp.blob(); return URL.createObjectURL(blob); }; - -const costmapImageAtom = atomWithQuery(() => ({ +const costmapImageQueryAtom = atomWithQuery(() => ({ queryKey: ["costmap_image"], queryFn: costmapImageQuery, refetchInterval: 1000, // 1s })); +const costmapImageAtom = atom((get) => { + const response = get(costmapImageQueryAtom); + if (response.isPending) { + return

"Loading..."

; + } + if (response.isError) { + return

"Error loading!"

; + } + const costmapStyle = { + minHeight: "65svb", + }; + return ; +}); + +const statusStringQuery = async () => { + const resp = await fetch("api/status"); + if (!resp.ok) { + throw new Error("Network response was not ok"); + } + return resp.json(); +}; +const statusStringQueryAtom = atomWithQuery(() => ({ + queryKey: ["status_string"], + queryFn: statusStringQuery, + refetchInterval: 500, // 0.5s +})); +const statusStringAtom = atom((get) => { + const response = get(statusStringQueryAtom); + if (response.isPending) { + return "Loading..."; + } + if (response.isError) { + return "Error loading!"; + } + if (!response.data.status) { + return "N/A"; + } + return response.data.message; +}); export function Home() { - const [{ data, isPending, isError }] = useAtom(costmapImageAtom); + const costmapImage = useAtomValue(costmapImageAtom); + const statusString = useAtomValue(statusStringAtom); - let costmapImage = () => { - if (isPending) { - return

"Loading..."

; - } - if (isError) { - return

"Error!"

; - } - return ; - }; return (
- {costmapImage()} - + {costmapImage} + +

Status:

+
{statusString}
+
diff --git a/src/Version.tsx b/src/Version.tsx index f066923..e1bb2b7 100644 --- a/src/Version.tsx +++ b/src/Version.tsx @@ -1,6 +1,6 @@ import { AppNav, Footer } from "./AppNav.tsx"; import { Container, Row, Col, Card } from "react-bootstrap"; -import { atom, useAtom } from "jotai"; +import { atom, useAtomValue } from "jotai"; import { atomWithQuery } from "jotai-tanstack-query"; import YAML from "yaml"; @@ -19,24 +19,20 @@ const versionQueryAtom = atomWithQuery(() => ({ const versionAtom = atom((get) => { const version = get(versionQueryAtom); - let parseVersion = () => { - if (version.isPending) { - return "Loading..."; - } - if (version.isError) { - return "Error loading!"; - } - if (!version.data.status) { - return "Can not find version"; - } - return YAML.stringify(version.data.message); - }; - const versionText = parseVersion(); - return versionText; + if (version.isPending) { + return "Loading..."; + } + if (version.isError) { + return "Error loading!"; + } + if (!version.data.status) { + return "Can not find version"; + } + return YAML.stringify(version.data.message); }); export function Version() { - let versionText = useAtom(versionAtom); + let versionText = useAtomValue(versionAtom); return (