From beae4446aa5143e236be2f78eac9b1b7190f67dc Mon Sep 17 00:00:00 2001 From: Mustafa Gezen Date: Sun, 30 Oct 2022 22:10:39 +0100 Subject: [PATCH] Add Cancel button to running tasks --- .../ui/src/components/ProjectTaskDetails.tsx | 81 ++++++++++++++----- tsconfig.json | 2 +- 2 files changed, 61 insertions(+), 22 deletions(-) diff --git a/peridot/ui/src/components/ProjectTaskDetails.tsx b/peridot/ui/src/components/ProjectTaskDetails.tsx index 9e4b963..bd11dc3 100644 --- a/peridot/ui/src/components/ProjectTaskDetails.tsx +++ b/peridot/ui/src/components/ProjectTaskDetails.tsx @@ -40,6 +40,7 @@ import { packageApi, taskApi } from 'peridot/ui/src/api'; import { V1GetTaskResponse, V1TaskType, + V1TaskStatus, } from 'bazel-bin/peridot/proto/v1/client_typescript'; import { ToolbarHeader } from 'common/mui/ToolbarHeader'; import Divider from '@mui/material/Divider'; @@ -54,12 +55,14 @@ import TabContext from '@mui/lab/TabContext'; import TabList from '@mui/lab/TabList'; import Box from '@mui/material/Box'; import Tab from '@mui/material/Tab'; +import Button from '@mui/material/Button'; import TabPanel from '@mui/lab/TabPanel'; import ProjectTaskFullLog from 'peridot/ui/src/components/ProjectTaskFullLog'; import { RemoteErrors } from 'common/ui/types'; import Tabs from '@mui/material/Tabs'; import Toolbar from '@mui/material/Toolbar'; import { ProjectTasksSubtasks } from 'peridot/ui/src/components/ProjectTasksSubtasks'; +import { reqap } from 'common/ui/reqap'; export interface ProjectPackageDetailsRouteProps { id: string; @@ -77,6 +80,7 @@ export default function ( V1GetTaskResponse | undefined | null | RemoteErrors >(undefined); const [tabValue, setTabValue] = React.useState('1'); + const [submitting, setSubmitting] = React.useState(false); const handleTabValueChange = (event, newValue) => { setTabValue(newValue); @@ -91,6 +95,26 @@ export default function ( setTaskRes ); + const cancelTask = async () => { + if (!confirm('Are you sure you want to cancel this task?')) { + return; + } + setSubmitting(true); + const [err, res] = await reqap(() => + taskApi.cancelTask({ + id: props.match.params.id, + projectId: project.id || '', + }) + ); + if (err) { + alert(err); + setSubmitting(false); + return; + } + + window.location.reload(); + }; + return ( <> {suspenseRemoteResource(taskRes, (res) => { @@ -119,31 +143,46 @@ export default function ( -
-
-

Type

-
- {translateTaskTypeToText( - parentTask.type || V1TaskType.Unspecified - )} -
-
-
-

Status

-
- {transformTaskStatusToIcon(parentTask.status, true)} -
-
- {[V1TaskType.Import, V1TaskType.Build].includes( - parentTask.type || V1TaskType.Unspecified - ) && ( +
+
-

Package

+

Type

- {parentTaskMetadata?.packageName} + {translateTaskTypeToText( + parentTask.type || V1TaskType.Unspecified + )}
- )} +
+

Status

+
+ {transformTaskStatusToIcon(parentTask.status, true)} +
+
+ {[V1TaskType.Import, V1TaskType.Build].includes( + parentTask.type || V1TaskType.Unspecified + ) && ( +
+

Package

+
+ {parentTaskMetadata?.packageName} +
+
+ )} +
+ {!parentTask.parentTaskId && + parentTask.status == V1TaskStatus.Running && ( +
+ +
+ )}
diff --git a/tsconfig.json b/tsconfig.json index 533a1fe..edd6db5 120000 --- a/tsconfig.json +++ b/tsconfig.json @@ -1 +1 @@ -rules_byc/internal/byc_bundle/tsconfig.json \ No newline at end of file +rules_resf/internal/resf_bundle/tsconfig.json \ No newline at end of file