1 changed files with 46 additions and 0 deletions
@ -0,0 +1,46 @@ |
|||||
|
import { useDevice } from "@app/core/stores/deviceStore"; |
||||
|
import { |
||||
|
Dialog, |
||||
|
DialogContent, |
||||
|
DialogDescription, |
||||
|
DialogHeader, |
||||
|
DialogTitle, |
||||
|
} from "@components/UI/Dialog.js"; |
||||
|
import type { Protobuf, Types } from "@meshtastic/js"; |
||||
|
import { numberToHexUnpadded } from "@noble/curves/abstract/utils"; |
||||
|
import { TraceRoute } from "../PageComponents/Messages/TraceRoute"; |
||||
|
|
||||
|
export interface TracerouteResponseDialogProps { |
||||
|
traceroute: Types.PacketMetadata<Protobuf.Mesh.RouteDiscovery> | undefined; |
||||
|
open: boolean; |
||||
|
onOpenChange: () => void; |
||||
|
} |
||||
|
|
||||
|
export const TracerouteResponseDialog = ({ |
||||
|
traceroute, |
||||
|
open, |
||||
|
onOpenChange, |
||||
|
}: TracerouteResponseDialogProps): JSX.Element => { |
||||
|
const { nodes } = useDevice(); |
||||
|
const route: number[] = traceroute?.data.route ?? []; |
||||
|
const from = nodes.get(traceroute?.from ?? 0); |
||||
|
const longName = |
||||
|
from?.user?.longName ?? |
||||
|
(from ? `!${numberToHexUnpadded(from?.num)}` : "Unknown"); |
||||
|
const shortName = |
||||
|
from?.user?.shortName ?? |
||||
|
(from ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : "UNK"); |
||||
|
const to = nodes.get(traceroute?.to ?? 0); |
||||
|
return ( |
||||
|
<Dialog open={open} onOpenChange={onOpenChange}> |
||||
|
<DialogContent> |
||||
|
<DialogHeader> |
||||
|
<DialogTitle>{`Traceroute: ${longName} (${shortName})`}</DialogTitle> |
||||
|
</DialogHeader> |
||||
|
<DialogDescription> |
||||
|
<TraceRoute route={route} from={from} to={to} /> |
||||
|
</DialogDescription> |
||||
|
</DialogContent> |
||||
|
</Dialog> |
||||
|
); |
||||
|
}; |
||||
Loading…
Reference in new issue