From b26d403183443165103611154b27ee392b1d10fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Fadum?= Date: Wed, 20 Nov 2024 10:34:01 +0100 Subject: [PATCH 1/3] Add stop dialog content for undefined tasks --- .../FrontPage/MissionOverview/StopDialogs.tsx | 17 ++++++++++++++--- frontend/src/language/en.json | 6 +++++- frontend/src/language/no.json | 6 +++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx b/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx index c3bf6cadf..f68ddbd17 100644 --- a/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx +++ b/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx @@ -42,7 +42,7 @@ const ContainButton = styled.div` interface MissionProps { missionName: string robotId: string - missionTaskType: TaskType + missionTaskType: TaskType | undefined } export enum MissionStatusRequest { @@ -51,7 +51,7 @@ export enum MissionStatusRequest { Resume, } -const DialogContent = ({ missionTaskType }: { missionTaskType: TaskType }) => { +const DialogContent = ({ missionTaskType }: { missionTaskType: TaskType | undefined }) => { const { TranslateText } = useLanguageContext() switch (missionTaskType) { case TaskType.Localization: @@ -76,7 +76,7 @@ const DialogContent = ({ missionTaskType }: { missionTaskType: TaskType }) => { ) - default: + case TaskType.Inspection: return ( {TranslateText('Stop button pressed warning text')} @@ -85,6 +85,17 @@ const DialogContent = ({ missionTaskType }: { missionTaskType: TaskType }) => { ) + default: + return ( + + + {TranslateText('Stop button pressed with no tasktype warning text')} + + + {TranslateText('Stop button pressed with no mission confirmation text')} + + + ) } } diff --git a/frontend/src/language/en.json b/frontend/src/language/en.json index 3fefd0014..a193ec619 100644 --- a/frontend/src/language/en.json +++ b/frontend/src/language/en.json @@ -83,6 +83,7 @@ "Stop button pressed warning text": "You are about to stop the entire mission. If there are no more missions in the queue, the robot will return to the start position.", "Stop button pressed confirmation text": "Are you sure you want to stop the mission?", "Stop mission": "Stop mission", + "Stop mission:": "Stop mission: ", "Search for missions": "Search for missions", "Search for a tag": "Search for a tag", "Search for a robot name": "Search for a robot name", @@ -271,5 +272,8 @@ "Mission Control": "Mission Control", "Open mission": "Open mission", "Open robot information": "Open robot information", - "Not available": "Not available" + "Not available": "Not available", + "Stop button pressed with no tasktype warning text": "A stop command was recieved with no ongoing tasks.", + "No mission running": "No Flotilla mission is running", + "Stop button pressed with no mission confirmation text": "Do you want to send the stop command to the robot regardless?" } diff --git a/frontend/src/language/no.json b/frontend/src/language/no.json index 7443023e3..6f93a155e 100644 --- a/frontend/src/language/no.json +++ b/frontend/src/language/no.json @@ -83,6 +83,7 @@ "Stop button pressed warning text": "Du er i ferd med å stoppe hele oppdraget. Hvis det ikke er flere oppdrag i kø vil roboten bli sendt tilbake til startposisjonen sin.", "Stop button pressed confirmation text": "Er du sikker på at du vil stoppe oppdraget?", "Stop mission": "Stopp oppdraget", + "Stop mission:": "Stopp oppdrag: ", "Search for missions": "Søk etter oppdrag", "Search for a tag": "Søk etter tag", "Search for a robot name": "Søk etter robotnavn", @@ -271,5 +272,8 @@ "Mission Control": "Oppdragskontroll", "Open mission": "Åpne oppdrag", "Open robot information": "Åpne robotinformasjon", - "Not available": "Ikke tilgjengelig" + "Not available": "Ikke tilgjengelig", + "No mission running": "Ingen pågående Flotilla oppdrag", + "Stop button pressed with no tasktype warning text": "Et stopp signal ble mottat uten noen pågående oppdrag.", + "Stop button pressed with no mission confirmation text": "Ønsker du å sende stopp signalet til roboten likevel?" } From b65c966089816d99738d28d052f9bf380af074ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Fadum?= Date: Wed, 20 Nov 2024 10:39:28 +0100 Subject: [PATCH 2/3] Make StopMissionDialog independent of button --- .../MissionButtons/MissionControlButtons.tsx | 39 +++++++++- .../FrontPage/MissionOverview/StopDialogs.tsx | 78 +++++++++---------- 2 files changed, 73 insertions(+), 44 deletions(-) diff --git a/frontend/src/components/Displays/MissionButtons/MissionControlButtons.tsx b/frontend/src/components/Displays/MissionButtons/MissionControlButtons.tsx index 4c51e709f..a295fd240 100644 --- a/frontend/src/components/Displays/MissionButtons/MissionControlButtons.tsx +++ b/frontend/src/components/Displays/MissionButtons/MissionControlButtons.tsx @@ -8,6 +8,7 @@ import { useLanguageContext } from 'components/Contexts/LanguageContext' import { useMissionControlContext } from 'components/Contexts/MissionControlContext' import { StopMissionDialog, MissionStatusRequest } from 'components/Pages/FrontPage/MissionOverview/StopDialogs' import { TaskType } from 'models/Task' +import { useState } from 'react' interface MissionControlButtonsProps { missionName: string @@ -70,12 +71,29 @@ export const MissionControlButtons = ({ const OngoingMissionButton = ({ missionName, robotId, missionTaskType }: MissionProps) => { const { TranslateText } = useLanguageContext() const { updateRobotMissionState } = useMissionControlContext() + const [isDialogOpen, setIsDialogOpen] = useState(false) + const toggleStopMissionDialog = () => { + setIsDialogOpen(!isDialogOpen) + } return ( <> - + {TranslateText('Stop')} @@ -99,12 +117,29 @@ const OngoingMissionButton = ({ missionName, robotId, missionTaskType }: Mission const PausedMissionButton = ({ missionName, robotId, missionTaskType }: MissionProps) => { const { TranslateText } = useLanguageContext() const { updateRobotMissionState } = useMissionControlContext() + const [isDialogOpen, setIsDialogOpen] = useState(false) + const toggleStopMissionDialog = () => { + setIsDialogOpen(!isDialogOpen) + } return ( <> - + {TranslateText('Stop')} diff --git a/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx b/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx index f68ddbd17..3d1ce9c99 100644 --- a/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx +++ b/frontend/src/components/Pages/FrontPage/MissionOverview/StopDialogs.tsx @@ -1,9 +1,7 @@ -import { Button, Dialog, Typography, Icon } from '@equinor/eds-core-react' +import { Button, Dialog, Typography } from '@equinor/eds-core-react' import styled from 'styled-components' import { useLanguageContext } from 'components/Contexts/LanguageContext' -import { Icons } from 'utils/icons' import { useState } from 'react' -import { tokens } from '@equinor/eds-tokens' import { useMissionControlContext } from 'components/Contexts/MissionControlContext' import { BackendAPICaller } from 'api/ApiCaller' import { useInstallationContext } from 'components/Contexts/InstallationContext' @@ -40,7 +38,7 @@ const ContainButton = styled.div` ` interface MissionProps { - missionName: string + missionName?: string robotId: string missionTaskType: TaskType | undefined } @@ -99,48 +97,44 @@ const DialogContent = ({ missionTaskType }: { missionTaskType: TaskType | undefi } } -export const StopMissionDialog = ({ missionName, robotId, missionTaskType }: MissionProps): JSX.Element => { +export const StopMissionDialog = ({ + missionName, + robotId, + missionTaskType, + isStopMissionDialogOpen, + toggleDialog, +}: MissionProps & { isStopMissionDialogOpen: boolean; toggleDialog: () => void }): JSX.Element => { const { TranslateText } = useLanguageContext() - const [isStopMissionDialogOpen, setIsStopMissionDialogOpen] = useState(false) const { updateRobotMissionState } = useMissionControlContext() return ( - <> - - - - - - - {TranslateText('Stop mission')} '{missionName}'?{' '} - - - - - - - - - - - - - - + + + + + {missionName ? TranslateText('Stop mission:') : TranslateText('No mission running')}{' '} + {missionName && missionName} + + + + + + + + + + + + + ) } From e819a600a43818e3a9895bb580742ccf599a7cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Fadum?= Date: Fri, 29 Nov 2024 13:52:04 +0100 Subject: [PATCH 3/3] Add robot specific stop button on robot page --- .../components/Pages/RobotPage/RobotPage.tsx | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Pages/RobotPage/RobotPage.tsx b/frontend/src/components/Pages/RobotPage/RobotPage.tsx index 80de16d06..c66dfff60 100644 --- a/frontend/src/components/Pages/RobotPage/RobotPage.tsx +++ b/frontend/src/components/Pages/RobotPage/RobotPage.tsx @@ -1,4 +1,4 @@ -import { Typography } from '@equinor/eds-core-react' +import { Icon, Typography } from '@equinor/eds-core-react' import { useParams } from 'react-router-dom' import styled from 'styled-components' import { BackButton } from 'utils/BackButton' @@ -23,6 +23,11 @@ import { VideoStreamSection } from '../MissionPage/MissionPage' import { useEffect, useState } from 'react' import { VideoStreamWindow } from '../MissionPage/VideoStream/VideoStreamWindow' import { MoveRobotArmSection } from './RobotArmMovement' +import { Icons } from 'utils/icons' +import { tokens } from '@equinor/eds-tokens' +import { StopMissionDialog } from '../FrontPage/MissionOverview/StopDialogs' +import { TaskType } from 'models/Task' +import { useMissionsContext } from 'components/Contexts/MissionRunsContext' const StyledTextButton = styled(StyledButton)` text-align: left; @@ -57,9 +62,22 @@ export const RobotPage = () => { const { enabledRobots } = useRobotContext() const { mediaStreams } = useMediaStreamContext() const [videoMediaStreams, setVideoMediaStreams] = useState([]) + const { ongoingMissions } = useMissionsContext() const selectedRobot = enabledRobots.find((robot) => robot.id === robotId) + const [isDialogOpen, setIsDialogOpen] = useState(false) + const toggleStopMissionDialog = () => { + setIsDialogOpen(!isDialogOpen) + } + + const mission = ongoingMissions.find((mission) => mission.robot.id === selectedRobot?.id) + + let missionTaskType = undefined + if (mission?.tasks.every((task) => task.type === TaskType.Inspection)) missionTaskType = TaskType.Inspection + if (mission?.tasks.every((task) => task.type === TaskType.ReturnHome)) missionTaskType = TaskType.ReturnHome + if (mission?.tasks.every((task) => task.type === TaskType.Localization)) missionTaskType = TaskType.Localization + const returnRobotToHome = () => { if (robotId) { BackendAPICaller.returnRobotToHome(robotId).catch((e) => { @@ -136,6 +154,26 @@ export const RobotPage = () => { {selectedRobot.model.type === RobotType.TaurobInspector && } {TranslateText('Actions')} + { + toggleStopMissionDialog() + }} + > + + {TranslateText('Stop')} {selectedRobot.name} + + {TranslateText('Return robot to home')}