From be3117651caf11de3bee7f89d858ee2ecec3f02c Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Sun, 26 May 2024 21:00:30 +0800 Subject: [PATCH] Add basic traceroute display This patch adds basic traceroute display functionality on the Messages page for an individual node. --- .../PageComponents/Messages/ChannelChat.tsx | 18 ++++++++++ .../PageComponents/Messages/TraceRoute.tsx | 33 +++++++++++++++++++ src/core/stores/deviceStore.ts | 2 +- src/pages/Messages.tsx | 3 +- 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/components/PageComponents/Messages/TraceRoute.tsx diff --git a/src/components/PageComponents/Messages/ChannelChat.tsx b/src/components/PageComponents/Messages/ChannelChat.tsx index e43ae196..438591c7 100644 --- a/src/components/PageComponents/Messages/ChannelChat.tsx +++ b/src/components/PageComponents/Messages/ChannelChat.tsx @@ -1,6 +1,7 @@ import { Subtle } from "@app/components/UI/Typography/Subtle.js"; import { MessageWithState, useDevice } from "@app/core/stores/deviceStore.js"; import { Message } from "@components/PageComponents/Messages/Message.js"; +import { TraceRoute } from "@components/PageComponents/Messages/TraceRoute.js"; import { MessageInput } from "@components/PageComponents/Messages/MessageInput.js"; import type { Types } from "@meshtastic/js"; import { InboxIcon } from "lucide-react"; @@ -9,12 +10,14 @@ export interface ChannelChatProps { messages?: MessageWithState[]; channel: Types.ChannelNumber; to: Types.Destination; + traceroutes?: Types.PacketMetadata[]; } export const ChannelChat = ({ messages, channel, to, + traceroutes, }: ChannelChatProps): JSX.Element => { const { nodes } = useDevice(); @@ -38,6 +41,21 @@ export const ChannelChat = ({ No Messages )} + {traceroutes ? ( + traceroutes.map((traceroute, index) => ( + + )) + ) : ( +
+ + No Traceroutes +
+ )}
diff --git a/src/components/PageComponents/Messages/TraceRoute.tsx b/src/components/PageComponents/Messages/TraceRoute.tsx new file mode 100644 index 00000000..86c4c8bb --- /dev/null +++ b/src/components/PageComponents/Messages/TraceRoute.tsx @@ -0,0 +1,33 @@ +import type { MessageWithState } from "@app/core/stores/deviceStore.js"; +import type { Protobuf } from "@meshtastic/js"; +import { + WaypointsIcon, + ArrowRightLeft, +} from "lucide-react"; + +export interface TraceRouteProps { + from?: Protobuf.Mesh.NodeInfo; + to?: Protobuf.Mesh.NodeInfo; + route?: Protobuf.Mesh.RouteDiscovery; +} + +export const TraceRoute = ({ + from, + to, + route, +}: TraceRouteProps): JSX.Element => { + return route.length == 0 ? ( +
+ + {from?.user?.longName}↔{to?.user?.longName} + +
+ ) : ( +
+ + {route} + +
+ + ); +}; diff --git a/src/core/stores/deviceStore.ts b/src/core/stores/deviceStore.ts index d350c154..a792fb4c 100644 --- a/src/core/stores/deviceStore.ts +++ b/src/core/stores/deviceStore.ts @@ -512,7 +512,7 @@ export const useDeviceStore = create((set, get) => ({ nodetraceroutes.push(traceroute); device.traceroutes.set(traceroute.from, nodetraceroutes); } else { - device.traceroutes.set(traceroute.from, [traceroute]); + device.traceroutes.set(traceroute.from, [traceroute]); } console.log(device.traceroutes); }), diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx index 29a5e9fa..4ac7ec64 100644 --- a/src/pages/Messages.tsx +++ b/src/pages/Messages.tsx @@ -13,7 +13,7 @@ import { useToast } from "@core/hooks/useToast.js"; export const MessagesPage = (): JSX.Element => { - const { channels, nodes, hardware, messages, connection } = useDevice(); + const { channels, nodes, hardware, messages, traceroutes, connection } = useDevice(); const [chatType, setChatType] = useState("broadcast"); const [activeChat, setActiveChat] = useState( @@ -108,6 +108,7 @@ export const MessagesPage = (): JSX.Element => { to={activeChat} messages={messages.direct.get(node.num)} channel={Types.ChannelNumber.Primary} + traceroutes={traceroutes.get(node.num)} /> ), )}