diff --git a/gcs/package.json b/gcs/package.json index 1f0ca8eee..d854bd938 100644 --- a/gcs/package.json +++ b/gcs/package.json @@ -6,7 +6,7 @@ "name": "Avis-Drone-Labs" }, "private": true, - "version": "0.2.6-alpha", + "version": "0.2.7-alpha", "license": "GPL-3.0-only", "homepage": "https://fgcs.projectfalcon.uk", "githubLink": "https://github.com/Avis-Drone-Labs/FGCS", diff --git a/gcs/src/components/missions/missionItemsTable.jsx b/gcs/src/components/missions/missionItemsTable.jsx index ee0412648..a8719d5ab 100644 --- a/gcs/src/components/missions/missionItemsTable.jsx +++ b/gcs/src/components/missions/missionItemsTable.jsx @@ -3,16 +3,26 @@ */ import { Table } from "@mantine/core" -import React from "react" +import React, { useMemo } from "react" import { isGlobalFrameHomeCommand } from "../../helpers/filterMissions" +import { buildMissionWaypointLegMetrics } from "../../helpers/missionWaypointMetrics" import MissionItemsTableRow from "./missionItemsTableRow" // Redux import { useSelector } from "react-redux" -import { selectDrawingMissionItems } from "../../redux/slices/missionSlice" +import { + selectDrawingMissionItems, + selectPlannedHomePosition, +} from "../../redux/slices/missionSlice" function MissionItemsTableNonMemo({ tableSectionHeight }) { const missionItems = useSelector(selectDrawingMissionItems) + const plannedHomePosition = useSelector(selectPlannedHomePosition) + + const rowMetricsByIdx = useMemo( + () => buildMissionWaypointLegMetrics(missionItems, plannedHomePosition), + [missionItems, plannedHomePosition], + ) return ( @@ -28,20 +38,23 @@ function MissionItemsTableNonMemo({ tableSectionHeight }) { Lat Lng Alt + Distance + Gradient Frame {missionItems.map((missionItem, idx) => { - // Skip home location if (idx === 0 && isGlobalFrameHomeCommand(missionItem)) { return null } + return ( ) })} @@ -54,6 +67,7 @@ function MissionItemsTableNonMemo({ tableSectionHeight }) { function propsAreEqual(prev, next) { return JSON.stringify(prev) === JSON.stringify(next) } + const MissionItemsTable = React.memo(MissionItemsTableNonMemo, propsAreEqual) export default MissionItemsTable diff --git a/gcs/src/components/missions/missionItemsTableRow.jsx b/gcs/src/components/missions/missionItemsTableRow.jsx index 726ce89c9..505857ce6 100644 --- a/gcs/src/components/missions/missionItemsTableRow.jsx +++ b/gcs/src/components/missions/missionItemsTableRow.jsx @@ -30,7 +30,15 @@ import { const coordsFractionDigits = 9 -export default function MissionItemsTableRow({ missionItemIndex }) { +function formatMetric(value, suffix) { + if (!Number.isFinite(value)) { + return "-" + } + + return `${value.toFixed(2)}${suffix}` +} + +export default function MissionItemsTableRow({ missionItemIndex, rowMetrics }) { const dispatch = useDispatch() const aircraftType = useSelector(selectAircraftType) const missionItem = useSelector( @@ -166,6 +174,8 @@ export default function MissionItemsTableRow({ missionItemIndex }) { hideControls /> + {formatMetric(rowMetrics?.distanceMeters, "m")} + {formatMetric(rowMetrics?.gradientPercent, "%")}