diff --git a/gcs/src/components/missions/missionStatistics.jsx b/gcs/src/components/missions/missionStatistics.jsx index 959628372..a04b48b25 100644 --- a/gcs/src/components/missions/missionStatistics.jsx +++ b/gcs/src/components/missions/missionStatistics.jsx @@ -288,8 +288,8 @@ export default function MissionStatistics() { label="Max distance between waypoints" value={maxDistanceBetweenWaypoints.maxDistance} tooltip={ - maxDistanceBetweenWaypoints.points && - `Between ${maxDistanceBetweenWaypoints.points[0].seq} and ${maxDistanceBetweenWaypoints.points[1].seq}` + maxDistanceBetweenWaypoints?.points?.length > 1 && + `Between ${maxDistanceBetweenWaypoints.points[0]?.seq} and ${maxDistanceBetweenWaypoints.points[1]?.seq}` } units="m" /> @@ -298,7 +298,7 @@ export default function MissionStatistics() { label="Max slope gradient" value={maxSlopeGradient.maxGradient} tooltip={ - maxSlopeGradient.points && + maxSlopeGradient?.points?.length > 1 && `Between ${maxSlopeGradient.points[0]?.seq} and ${maxSlopeGradient.points[1]?.seq}` } units="%" diff --git a/gcs/src/missions.jsx b/gcs/src/missions.jsx index 97adabb49..132f138e8 100644 --- a/gcs/src/missions.jsx +++ b/gcs/src/missions.jsx @@ -6,29 +6,27 @@ import { useEffect, useRef, useState } from "react" // 3rd Party Imports -import { useSessionStorage } from "@mantine/hooks" import { ResizableBox } from "react-resizable" import { v4 as uuidv4 } from "uuid" // Custom component and helpers import { - ActionIcon, Button, Divider, Modal, NumberInput, Progress, + Select, Tabs, Tooltip, } from "@mantine/core" -import { IconInfoCircle, IconX } from "@tabler/icons-react" +import { IconInfoCircle } from "@tabler/icons-react" import Layout from "./components/layout" import FenceItemsTable from "./components/missions/fenceItemsTable" import MissionItemsTable from "./components/missions/missionItemsTable" import MissionStatistics from "./components/missions/missionStatistics" import MissionsMapSection from "./components/missions/missionsMap" import RallyItemsTable from "./components/missions/rallyItemsTable" -import NoDroneConnected from "./components/noDroneConnected" import { coordToInt, intToCoord } from "./helpers/dataFormatters" // Redux @@ -43,6 +41,10 @@ import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../tailwind.config" import UpdatePlannedHomePositionModal from "./components/missions/updatePlannedHomePositionModal" import { showErrorNotification } from "./helpers/notification" +import { + selectAircraftType, + setDroneAircraftType, +} from "./redux/slices/droneInfoSlice" import { emitExportMissionToFile, emitGetCurrentMission, @@ -96,6 +98,7 @@ export default function Missions() { const targetInfo = useSelector(selectTargetInfo) const plannedHomePosition = useSelector(selectPlannedHomePosition) const activeTab = useSelector(selectActiveTab) + const aircraftType = useSelector(selectAircraftType) // Mission items const missionItems = useSelector(selectDrawingMissionItems) @@ -105,12 +108,6 @@ export default function Missions() { const missionProgressModalOpened = useSelector(selectMissionProgressModal) const missionProgressModalData = useSelector(selectMissionProgressData) - // Other states - const [showWarningBanner, setShowWarningBanner] = useSessionStorage({ - key: "showWarningBanner", - defaultValue: true, - }) - // Need to keep a reference to the active tab to avoid stale closures const activeTabRef = useRef(activeTab) const tabsListRef = useRef(null) @@ -345,249 +342,239 @@ export default function Missions() { - {/* Banner to let people know that things are still under development */} - {showWarningBanner && ( -
-

- Missions is still under development so some features are still - missing. If you find any bugs please report them to us. -

- setShowWarningBanner(false)} - variant="transparent" - className="mr-2" +
+
+ {/* Resizable Sidebar */} +
+ } + className="relative bg-falcongrey-800 overflow-y-auto" > - - -
- )} - - {connected ? ( -
-
- {/* Resizable Sidebar */} -
- } - className="relative bg-falcongrey-800 overflow-y-auto" - > -
-
- - - - -
- - - -
- - -
- - - -
-

- Planned home{" "} - - -

- The planned home location is used to approximate - the starting location of the mission. The - dashboard displays the actual home location - used by the drone. -

- - } - > - - - -

- setPlannedHomeLatInput(val)} - onBlur={() => { - if (isInvalidInputNumber(plannedHomeLatInput)) { - setPlannedHomeLatInput( - intToCoord(plannedHomePosition?.lat).toFixed( - coordsFractionDigits, - ), - ) - } - }} - min={-90} - max={90} - step={0.000001} - hideControls - /> - setPlannedHomeLonInput(val)} - onBlur={() => { - if (isInvalidInputNumber(plannedHomeLonInput)) { - setPlannedHomeLonInput( - intToCoord(plannedHomePosition?.lon).toFixed( - coordsFractionDigits, - ), - ) - } +
+
+ {connected ? ( + <> + + + + + ) : ( +