import { TimeAgo } from "@components/generic/TimeAgo"; import { Separator } from "@components/UI/Separator.tsx"; import { useNodeAsProto } from "@core/hooks/useNodesAsProto.ts"; import type { WaypointWithMetadata } from "@core/stores"; import { bearingDegrees, distanceMeters, hasPos, toLngLat, } from "@core/utils/geo"; import type { Protobuf } from "@meshtastic/sdk"; import { ClockFadingIcon, ClockPlusIcon, CompassIcon, MapPinnedIcon, MoveHorizontalIcon, NavigationIcon, RotateCwIcon, UserLockIcon, } from "lucide-react"; import { useTranslation } from "react-i18next"; interface WaypointDetailProps { waypoint: WaypointWithMetadata; myNode?: Protobuf.Mesh.NodeInfo; onEdit: () => void; } export const WaypointDetail = ({ waypoint, myNode }: WaypointDetailProps) => { const { t } = useTranslation("map"); const lockedToNode = useNodeAsProto(waypoint.lockedTo ?? 0); const waypointLngLat = toLngLat({ latitudeI: waypoint.latitudeI, longitudeI: waypoint.longitudeI, }); const distance = hasPos(myNode?.position) ? distanceMeters(toLngLat(myNode?.position), waypointLngLat) : undefined; const bearing = hasPos(myNode?.position) ? bearingDegrees(toLngLat(myNode?.position), waypointLngLat) : undefined; return (

{String.fromCodePoint(waypoint.icon) ?? "📍"} {waypoint.name}

{waypoint.description && (

{waypoint.description}

)}
{/* Coordinates */}
{t("waypointDetail.longitude")}
{t("waypointDetail.latitude")}
{waypointLngLat[0]}
{waypointLngLat[1]}
{/* Created */}
{t("waypointDetail.createdDate")}
{/* Updated */} {waypoint.metadata.updated && (
{t("waypointDetail.updated")}
)} {/* Expires */} {waypoint.expire !== 0 && (
{t("waypointDetail.expires")}
)} {/* Distance */} {distance != null && (
{t("waypointDetail.distance")}
{Math.round(distance)}{" "} {distance === 1 ? t("unit.meter.one") : t("unit.meter.plural")}
)} {/* Bearing */} {bearing != null && (
{t("waypointDetail.bearing")}
{Math.round(bearing)} {t("unit.degree.suffix")}
)} {/* Locked To */} {waypoint.lockedTo != null && waypoint.lockedTo !== 0 && (
{t("waypointDetail.lockedTo")}
{lockedToNode?.user?.longName ?? t("unknown.longName")}
)}
); };