Cleanup display.
This commit is contained in:
parent
942a4c42c2
commit
99b148cdc5
|
|
@ -6,7 +6,7 @@ export function AppNav() {
|
||||||
<Navbar bg="dark" variant="dark" expand="sm" className="py-0">
|
<Navbar bg="dark" variant="dark" expand="sm" className="py-0">
|
||||||
<Container className="me-auto">
|
<Container className="me-auto">
|
||||||
<Navbar.Brand as={Link} to="/">
|
<Navbar.Brand as={Link} to="/">
|
||||||
J7-Bridge
|
J7s-Bridge
|
||||||
</Navbar.Brand>
|
</Navbar.Brand>
|
||||||
<Navbar.Toggle aria-controls="collapse-navbar-nav" />
|
<Navbar.Toggle aria-controls="collapse-navbar-nav" />
|
||||||
<Navbar.Collapse id="collapse-navbar-nav">
|
<Navbar.Collapse id="collapse-navbar-nav">
|
||||||
|
|
|
||||||
63
src/Home.tsx
63
src/Home.tsx
|
|
@ -1,6 +1,6 @@
|
||||||
import { AppNav, Footer } from "./AppNav.tsx";
|
import { AppNav, Footer } from "./AppNav.tsx";
|
||||||
import { Container, Row, Col, Image, Card } from "react-bootstrap";
|
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";
|
import { atomWithQuery } from "jotai-tanstack-query";
|
||||||
|
|
||||||
const costmapImageQuery = async () => {
|
const costmapImageQuery = async () => {
|
||||||
|
|
@ -11,33 +11,66 @@ const costmapImageQuery = async () => {
|
||||||
const blob = await resp.blob();
|
const blob = await resp.blob();
|
||||||
return URL.createObjectURL(blob);
|
return URL.createObjectURL(blob);
|
||||||
};
|
};
|
||||||
|
const costmapImageQueryAtom = atomWithQuery(() => ({
|
||||||
const costmapImageAtom = atomWithQuery(() => ({
|
|
||||||
queryKey: ["costmap_image"],
|
queryKey: ["costmap_image"],
|
||||||
queryFn: costmapImageQuery,
|
queryFn: costmapImageQuery,
|
||||||
refetchInterval: 1000, // 1s
|
refetchInterval: 1000, // 1s
|
||||||
}));
|
}));
|
||||||
|
const costmapImageAtom = atom((get) => {
|
||||||
|
const response = get(costmapImageQueryAtom);
|
||||||
|
if (response.isPending) {
|
||||||
|
return <p>"Loading..."</p>;
|
||||||
|
}
|
||||||
|
if (response.isError) {
|
||||||
|
return <p>"Error loading!"</p>;
|
||||||
|
}
|
||||||
|
const costmapStyle = {
|
||||||
|
minHeight: "65svb",
|
||||||
|
};
|
||||||
|
return <Image src={response.data} fluid style={costmapStyle} />;
|
||||||
|
});
|
||||||
|
|
||||||
|
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() {
|
export function Home() {
|
||||||
const [{ data, isPending, isError }] = useAtom(costmapImageAtom);
|
const costmapImage = useAtomValue(costmapImageAtom);
|
||||||
|
const statusString = useAtomValue(statusStringAtom);
|
||||||
|
|
||||||
let costmapImage = () => {
|
|
||||||
if (isPending) {
|
|
||||||
return <p>"Loading..."</p>;
|
|
||||||
}
|
|
||||||
if (isError) {
|
|
||||||
return <p>"Error!"</p>;
|
|
||||||
}
|
|
||||||
return <Image src={data} />;
|
|
||||||
};
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<AppNav />
|
<AppNav />
|
||||||
<Container className="vert-padded">
|
<Container className="vert-padded">
|
||||||
<Card className="padded">
|
<Card className="padded">
|
||||||
<Row>
|
<Row>
|
||||||
<Col lg={8}>{costmapImage()}</Col>
|
<Col lg={8}>{costmapImage}</Col>
|
||||||
<Col lg={4}></Col>
|
<Col lg={4}>
|
||||||
|
<p>Status:</p>
|
||||||
|
<pre>{statusString}</pre>
|
||||||
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
</Card>
|
</Card>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { AppNav, Footer } from "./AppNav.tsx";
|
import { AppNav, Footer } from "./AppNav.tsx";
|
||||||
import { Container, Row, Col, Card } from "react-bootstrap";
|
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 { atomWithQuery } from "jotai-tanstack-query";
|
||||||
import YAML from "yaml";
|
import YAML from "yaml";
|
||||||
|
|
||||||
|
|
@ -19,24 +19,20 @@ const versionQueryAtom = atomWithQuery(() => ({
|
||||||
|
|
||||||
const versionAtom = atom((get) => {
|
const versionAtom = atom((get) => {
|
||||||
const version = get(versionQueryAtom);
|
const version = get(versionQueryAtom);
|
||||||
let parseVersion = () => {
|
if (version.isPending) {
|
||||||
if (version.isPending) {
|
return "Loading...";
|
||||||
return "Loading...";
|
}
|
||||||
}
|
if (version.isError) {
|
||||||
if (version.isError) {
|
return "Error loading!";
|
||||||
return "Error loading!";
|
}
|
||||||
}
|
if (!version.data.status) {
|
||||||
if (!version.data.status) {
|
return "Can not find version";
|
||||||
return "Can not find version";
|
}
|
||||||
}
|
return YAML.stringify(version.data.message);
|
||||||
return YAML.stringify(version.data.message);
|
|
||||||
};
|
|
||||||
const versionText = parseVersion();
|
|
||||||
return versionText;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export function Version() {
|
export function Version() {
|
||||||
let versionText = useAtom(versionAtom);
|
let versionText = useAtomValue(versionAtom);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue