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, "%")}