diff --git a/src/components/PageComponents/Messages/ChannelChat.tsx b/src/components/PageComponents/Messages/ChannelChat.tsx
index 8643446a..81ed007f 100644
--- a/src/components/PageComponents/Messages/ChannelChat.tsx
+++ b/src/components/PageComponents/Messages/ChannelChat.tsx
@@ -4,8 +4,8 @@ import {
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 { TraceRoute } from "@components/PageComponents/Messages/TraceRoute.js";
import type { Protobuf, Types } from "@meshtastic/js";
import { InboxIcon } from "lucide-react";
@@ -28,41 +28,45 @@ export const ChannelChat = ({
- {messages ? (
- messages.map((message, index) => (
-
- ))
- ) : (
-
-
- No Messages
-
- )}
+ {messages ? (
+ messages.map((message, index) => (
+
+ ))
+ ) : (
+
+
+ No Messages
+
+ )}
+
+
+ {to === "broadcast" ? null : traceroutes ? (
+ traceroutes.map((traceroute, index) => (
+
+ ))
+ ) : (
+
+
+ No Traceroutes
+
+ )}
-
- { to === "broadcast" ? null : traceroutes ? (
- traceroutes.map((traceroute, index) => (
-
- ))
- ) : (
-
-
- No Traceroutes
-
- )}
-
diff --git a/src/components/PageComponents/Messages/TraceRoute.tsx b/src/components/PageComponents/Messages/TraceRoute.tsx
index 6bc0a1e5..15d3bdea 100644
--- a/src/components/PageComponents/Messages/TraceRoute.tsx
+++ b/src/components/PageComponents/Messages/TraceRoute.tsx
@@ -7,7 +7,6 @@ export interface TraceRouteProps {
route: Array
;
}
-
export const TraceRoute = ({
from,
to,
@@ -15,20 +14,18 @@ export const TraceRoute = ({
}: TraceRouteProps): JSX.Element => {
const { nodes } = useDevice();
- return route.length == 0 ? (
+ return route.length === 0 ? (
- {to?.user?.longName}↔{from?.user?.longName}
+ {to?.user?.longName}↔{from?.user?.longName}
- ) : (
+ ) : (
- {to?.user?.longName}↔
- {route.map((hop) => (
- (nodes.get(hop)?.user?.longName ?? "Unknown") + "↔"
- ))}
- {from?.user?.longName}
+ {to?.user?.longName}↔
+ {route.map((hop) => `${nodes.get(hop)?.user?.longName ?? "Unknown"}↔`)}
+ {from?.user?.longName}
);
diff --git a/src/core/stores/deviceStore.ts b/src/core/stores/deviceStore.ts
index 193a4209..29ac6ee0 100644
--- a/src/core/stores/deviceStore.ts
+++ b/src/core/stores/deviceStore.ts
@@ -42,7 +42,10 @@ export interface Device {
direct: Map;
broadcast: Map;
};
- traceroutes: Map[]>;
+ traceroutes: Map<
+ number,
+ Types.PacketMetadata[]
+ >;
connection?: Types.ConnectionType;
activePage: Page;
activeNode: number;
@@ -76,7 +79,9 @@ export interface Device {
addPosition: (position: Types.PacketMetadata) => void;
addConnection: (connection: Types.ConnectionType) => void;
addMessage: (message: MessageWithState) => void;
- addTraceRoute: (traceroute: Types.PacketMetadata) => void;
+ addTraceRoute: (
+ traceroute: Types.PacketMetadata,
+ ) => void;
addMetadata: (from: number, metadata: Protobuf.Mesh.DeviceMetadata) => void;
removeNode: (nodeNum: number) => void;
setMessageState: (
@@ -512,12 +517,12 @@ export const useDeviceStore = create((set, get) => ({
return;
}
- const nodetraceroutes = device.traceroutes.get(traceroute.from)
+ const nodetraceroutes = device.traceroutes.get(traceroute.from);
if (nodetraceroutes) {
- nodetraceroutes.push(traceroute);
- device.traceroutes.set(traceroute.from, nodetraceroutes);
+ nodetraceroutes.push(traceroute);
+ device.traceroutes.set(traceroute.from, nodetraceroutes);
} else {
- device.traceroutes.set(traceroute.from, [traceroute]);
+ device.traceroutes.set(traceroute.from, [traceroute]);
}
}),
);
@@ -525,7 +530,10 @@ export const useDeviceStore = create((set, get) => ({
removeNode: (nodeNum) => {
set(
produce((draft) => {
-
+ const device = draft.devices.get(id);
+ if (!device) {
+ return;
+ }
device.nodes.delete(nodeNum);
}),
);
diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx
index f8d51cd9..4afe1e62 100644
--- a/src/pages/Messages.tsx
+++ b/src/pages/Messages.tsx
@@ -3,17 +3,17 @@ import { PageLayout } from "@components/PageLayout.js";
import { Sidebar } from "@components/Sidebar.js";
import { SidebarSection } from "@components/UI/Sidebar/SidebarSection.js";
import { SidebarButton } from "@components/UI/Sidebar/sidebarButton.js";
+import { useToast } from "@core/hooks/useToast.js";
import { useDevice } from "@core/stores/deviceStore.js";
import { Hashicon } from "@emeraldpay/hashicon-react";
import { Protobuf, Types } from "@meshtastic/js";
import { getChannelName } from "@pages/Channels.js";
import { HashIcon, WaypointsIcon } from "lucide-react";
import { useState } from "react";
-import { useToast } from "@core/hooks/useToast.js";
-
export const MessagesPage = (): JSX.Element => {
- const { channels, nodes, hardware, messages, traceroutes, connection } = useDevice();
+ const { channels, nodes, hardware, messages, traceroutes, connection } =
+ useDevice();
const [chatType, setChatType] =
useState("broadcast");
const [activeChat, setActiveChat] = useState(
@@ -29,7 +29,6 @@ export const MessagesPage = (): JSX.Element => {
const currentChannel = channels.get(activeChat);
const { toast } = useToast();
-
return (
<>
@@ -76,26 +75,27 @@ export const MessagesPage = (): JSX.Element => {
? nodes.get(activeChat)?.user?.longName ?? "Unknown"
: "Loading..."
}`}
- actions={
- chatType === "direct"
- ? [
- {
- icon: WaypointsIcon,
- async onClick() {
- if (nodes.get(activeChat)?.num === undefined) return;
- toast({
- title: "Sending Traceroute, please wait..."
- })
- await connection?.traceRoute(nodes.get(activeChat)?.num!).then(() =>
- toast({
- title: `Traceroute sent.`,
- }),
- );
- },
- },
- ]
- : []
- }
+ actions={
+ chatType === "direct"
+ ? [
+ {
+ icon: WaypointsIcon,
+ async onClick() {
+ const targetNode = nodes.get(activeChat)?.num;
+ if (targetNode === undefined) return;
+ toast({
+ title: "Sending Traceroute, please wait...",
+ });
+ await connection?.traceRoute(targetNode).then(() =>
+ toast({
+ title: "Traceroute sent.",
+ }),
+ );
+ },
+ },
+ ]
+ : []
+ }
>
{allChannels.map(
(channel) =>