diff --git a/bun.lock b/bun.lock index 8618493f..0e09b3bc 100644 --- a/bun.lock +++ b/bun.lock @@ -1517,6 +1517,8 @@ "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], diff --git a/src/PageRouter.tsx b/src/PageRouter.tsx index f59cb6fe..280e9277 100644 --- a/src/PageRouter.tsx +++ b/src/PageRouter.tsx @@ -5,7 +5,7 @@ import ConfigPage from "@pages/Config/index.tsx"; import MessagesPage from "@pages/Messages.tsx"; import NodesPage from "@pages/Nodes.tsx"; import { ErrorBoundary } from "react-error-boundary"; -import { ErrorPage } from "./components/UI/ErrorPage.tsx"; +import { ErrorPage } from "@components/UI/ErrorPage.tsx"; export const ErrorBoundaryWrapper = ({ children, diff --git a/src/components/Form/DynamicForm.tsx b/src/components/Form/DynamicForm.tsx index f8547114..00d26c4f 100644 --- a/src/components/Form/DynamicForm.tsx +++ b/src/components/Form/DynamicForm.tsx @@ -13,7 +13,8 @@ import { type SubmitHandler, useForm, } from "react-hook-form"; -import { Heading } from "../UI/Typography/Heading.tsx"; +import { Heading } from "@components/UI/Typography/Heading.tsx"; + interface DisabledBy { fieldName: Path; diff --git a/src/components/PageComponents/Connect/Serial.tsx b/src/components/PageComponents/Connect/Serial.tsx index 14c88474..b6cdf5f9 100644 --- a/src/components/PageComponents/Connect/Serial.tsx +++ b/src/components/PageComponents/Connect/Serial.tsx @@ -59,9 +59,8 @@ export const Serial = ({ closeDialog }: TabElementProps) => { await onConnect(port); }} > - {`# ${index} - ${usbVendorId ?? "UNK"} - ${ - usbProductId ?? "UNK" - }`} + {`# ${index} - ${usbVendorId ?? "UNK"} - ${usbProductId ?? "UNK" + }`} ); })} diff --git a/src/components/PageLayout.tsx b/src/components/PageLayout.tsx index 29eaf730..5f08ca6d 100644 --- a/src/components/PageLayout.tsx +++ b/src/components/PageLayout.tsx @@ -5,6 +5,7 @@ import { Spinner } from "@components/UI/Spinner.tsx"; import { ErrorBoundary } from "react-error-boundary"; import { ErrorPage } from "@components/UI/ErrorPage.tsx"; + export interface PageLayoutProps { label: string; noPadding?: boolean; diff --git a/src/components/UI/ErrorPage.tsx b/src/components/UI/ErrorPage.tsx index 651809df..dbf76d01 100644 --- a/src/components/UI/ErrorPage.tsx +++ b/src/components/UI/ErrorPage.tsx @@ -4,6 +4,7 @@ import { Heading } from "./Typography/Heading.tsx"; import { Link } from "./Typography/Link.tsx"; import { P } from "./Typography/P.tsx"; + export function ErrorPage({ error }: { error: Error }) { if (!error) { return null; diff --git a/src/core/utils/github.ts b/src/core/utils/github.ts index 636577de..3fa9648e 100644 --- a/src/core/utils/github.ts +++ b/src/core/utils/github.ts @@ -63,6 +63,7 @@ export default function newGithubIssueUrl( function validateOptions(options: GithubIssueUrlOptions): ValidatedOptions { const repoUrl = options.repoUrl ?? + (options.user && options.repo ? `https://github.com/${options.user}/${options.repo}` : undefined); diff --git a/src/pages/Nodes.tsx b/src/pages/Nodes.tsx index 6a390731..9f96b987 100644 --- a/src/pages/Nodes.tsx +++ b/src/pages/Nodes.tsx @@ -1,7 +1,7 @@ -import { LocationResponseDialog } from "@components/Dialog/LocationResponseDialog.tsx"; -import { NodeOptionsDialog } from "@components/Dialog/NodeOptionsDialog.tsx"; -import { TracerouteResponseDialog } from "@components/Dialog/TracerouteResponseDialog.tsx"; -import Footer from "@components/UI/Footer.tsx"; +import { LocationResponseDialog } from "@app/components/Dialog/LocationResponseDialog.tsx"; +import { NodeOptionsDialog } from "@app/components/Dialog/NodeOptionsDialog.tsx"; +import { TracerouteResponseDialog } from "@app/components/Dialog/TracerouteResponseDialog.tsx"; +import Footer from "@app/components/UI/Footer.tsx"; import { Sidebar } from "@components/Sidebar.tsx"; import { Avatar } from "@components/UI/Avatar.tsx"; import { Mono } from "@components/generic/Mono.tsx"; @@ -11,7 +11,7 @@ import { useDevice } from "@core/stores/deviceStore.ts"; import { Protobuf, type Types } from "@meshtastic/core"; import { numberToHexUnpadded } from "@noble/curves/abstract/utils"; import { LockIcon, LockOpenIcon } from "lucide-react"; -import { type JSX, useCallback, useEffect, useState } from "react"; +import { Fragment, type JSX, useCallback, useEffect, useState } from "react"; import { base16 } from "rfc4648"; export interface DeleteNoteDialogProps { @@ -19,7 +19,7 @@ export interface DeleteNoteDialogProps { onOpenChange: (open: boolean) => void; } -const NodesPage = () => { +const NodesPage = (): JSX.Element => { const { nodes, hardware, connection } = useDevice(); const [selectedNode, setSelectedNode] = useState< Protobuf.Mesh.NodeInfo | undefined @@ -108,9 +108,8 @@ const NodesPage = () => { {node.user?.shortName ?? (node.user?.macaddr ? `${base16 - .stringify(node.user?.macaddr.subarray(4, 6) ?? []) - .toLowerCase() - }` + .stringify(node.user?.macaddr.subarray(4, 6) ?? []) + .toLowerCase()}` : `${numberToHexUnpadded(node.num).slice(-4)}`)} , @@ -122,9 +121,8 @@ const NodesPage = () => { {node.user?.longName ?? (node.user?.macaddr ? `Meshtastic ${base16 - .stringify(node.user?.macaddr.subarray(4, 6) ?? []) - .toLowerCase() - }` + .stringify(node.user?.macaddr.subarray(4, 6) ?? []) + .toLowerCase()}` : `!${numberToHexUnpadded(node.num)}`)} , @@ -138,9 +136,11 @@ const NodesPage = () => { ?.join(":") ?? "UNK"} , - {node.lastHeard === 0 - ?

Never

- : } + {node.lastHeard === 0 ? ( +

Never

+ ) : ( + + )}
, {node.snr}db/ @@ -148,16 +148,19 @@ const NodesPage = () => { {(node.snr + 10) * 5}raw , - {node.user?.publicKey && node.user?.publicKey.length > 0 - ? - : } + {node.user?.publicKey && node.user?.publicKey.length > 0 ? ( + + ) : ( + + )} , - {node?.lastHeard !== 0 - ? node?.viaMqtt === false && node?.hopsAway === 0 + {node.lastHeard !== 0 + ? node.viaMqtt === false && node.hopsAway === 0 ? "Direct" - : `${node?.hopsAway?.toString()} ${node?.hopsAway > 1 ? "hops" : "hop" - } away` + : `${node.hopsAway?.toString()} ${ + node.hopsAway > 1 ? "hops" : "hop" + } away` : "-"} {node.viaMqtt === true ? ", via MQTT" : ""} ,