import { useDevice } from "@core/stores/deviceStore.ts"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "../UI/Dialog.tsx"; import type { Protobuf, Types } from "@meshtastic/core"; import { numberToHexUnpadded } from "@noble/curves/abstract/utils"; import { TraceRoute } from "../PageComponents/Messages/TraceRoute.tsx"; import { useTranslation } from "react-i18next"; export interface TracerouteResponseDialogProps { traceroute: Types.PacketMetadata | undefined; open: boolean; onOpenChange: () => void; } export const TracerouteResponseDialog = ({ traceroute, open, onOpenChange, }: TracerouteResponseDialogProps) => { const { t } = useTranslation("dialog"); const { getNode } = useDevice(); const route: number[] = traceroute?.data.route ?? []; const routeBack: number[] = traceroute?.data.routeBack ?? []; const snrTowards = (traceroute?.data.snrTowards ?? []).map((snr) => snr / 4); const snrBack = (traceroute?.data.snrBack ?? []).map((snr) => snr / 4); const from = getNode(traceroute?.from ?? 0); const fromLongName = from?.user?.longName ?? (from ? `!${numberToHexUnpadded(from?.num)}` : t("unknown.shortName")); const fromShortName = from?.user?.shortName ?? (from ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : t("unknown.shortName")); const toUser = getNode(traceroute?.to ?? 0); if (!toUser || !from) { return null; } return ( {t("tracerouteResponse.title", { identifier: `${fromLongName} (${fromShortName})`, })} ); };