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 { useTranslation } from "react-i18next"; export interface LocationResponseDialogProps { location: Types.PacketMetadata | undefined; open: boolean; onOpenChange: () => void; } export const LocationResponseDialog = ({ location, open, onOpenChange, }: LocationResponseDialogProps) => { const { t } = useTranslation("dialog"); const { getNode } = useDevice(); const from = getNode(location?.from ?? 0); const longName = from?.user?.longName ?? (from ? `!${numberToHexUnpadded(from?.num)}` : t("unknown.shortName")); const shortName = from?.user?.shortName ?? (from ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : t("unknown.shortName")); const position = location?.data; const hasCoordinates = position && typeof position.latitudeI === "number" && typeof position.longitudeI === "number" && typeof position.altitude === "number"; return ( {t("locationResponse.title", { identifier: `${longName} (${shortName})`, })} {hasCoordinates ? (

{t("locationResponse.coordinates")} {" "} {position.latitudeI ?? 0 / 1e7},{" "} {position.longitudeI ?? 0 / 1e7}

{t("locationResponse.altitude")} {position.altitude} {position.altitude ?? 0 < 1 ? t("unit.meter.one") : t("unit.meter.plural")}

) : ( // Optional: Show a message if coordinates are not available

{t("locationResponse.noCoordinates")}

)}
); };