import { toast } from "@app/core/hooks/useToast"; import { useAppStore } from "@app/core/stores/appStore"; import { useDevice } from "@app/core/stores/deviceStore"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@components/UI/Dialog"; import type { Protobuf } from "@meshtastic/js"; import { numberToHexUnpadded } from "@noble/curves/abstract/utils"; import { TrashIcon } from "lucide-react"; import type { JSX } from "react"; import { Button } from "../UI/Button"; export interface NodeOptionsDialogProps { node: Protobuf.Mesh.NodeInfo | undefined; open: boolean; onOpenChange: () => void; } export const NodeOptionsDialog = ({ node, open, onOpenChange, }: NodeOptionsDialogProps): JSX.Element => { const { setDialogOpen, connection, setActivePage } = useDevice(); const { setNodeNumToBeRemoved, setNodeNumDetails, setChatType, setActiveChat, } = useAppStore(); const longName = node?.user?.longName ?? (node ? `!${numberToHexUnpadded(node?.num)}` : "Unknown"); const shortName = node?.user?.shortName ?? (node ? `${numberToHexUnpadded(node?.num).substring(0, 4)}` : "UNK"); function handleDirectMessage() { if (!node) return; setChatType("direct"); setActiveChat(node.num); setActivePage("messages"); } function handleRequestPosition() { if (!node) return; toast({ title: "Requesting position, please wait...", }); connection?.requestPosition(node.num).then(() => toast({ title: "Position request sent.", }), ); onOpenChange(); } function handleTraceroute() { if (!node) return; toast({ title: "Sending Traceroute, please wait...", }); connection?.traceRoute(node.num).then(() => toast({ title: "Traceroute sent.", }), ); onOpenChange(); } return ( {`${longName} (${shortName})`}
); };