From f75567330c5878a933acab1728cd293352a27a67 Mon Sep 17 00:00:00 2001 From: Vardan Bansal Date: Wed, 13 Sep 2023 13:02:57 -0700 Subject: [PATCH] Delete Pipeline --- web/src/pages/PipelineList/PipelineList.tsx | 61 ++++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/web/src/pages/PipelineList/PipelineList.tsx b/web/src/pages/PipelineList/PipelineList.tsx index 969e2b7d5..c37ba7526 100644 --- a/web/src/pages/PipelineList/PipelineList.tsx +++ b/web/src/pages/PipelineList/PipelineList.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useMemo, useState } from 'react' -import { Classes, Menu, MenuItem, Popover, Position } from '@blueprintjs/core' +import { Classes, Intent, Menu, MenuItem, Popover, Position } from '@blueprintjs/core' import { Avatar, Button, @@ -8,18 +8,20 @@ import { FlexExpander, Layout, PageBody, + StringSubstitute, TableV2 as Table, Text, - Utils + Utils, + useToaster } from '@harnessio/uicore' import { Color } from '@harnessio/design-system' import cx from 'classnames' import type { CellProps, Column } from 'react-table' import Keywords from 'react-keywords' import { Link, useHistory } from 'react-router-dom' -import { useGet } from 'restful-react' +import { useGet, useMutate } from 'restful-react' import { Calendar, Timer, GitFork } from 'iconoir-react' -import { useStrings } from 'framework/strings' +import { String, useStrings } from 'framework/strings' import { LoadingSpinner } from 'components/LoadingSpinner/LoadingSpinner' import { SearchInputWithSpinner } from 'components/SearchInputWithSpinner/SearchInputWithSpinner' import { NoResultCard } from 'components/NoResultCard/NoResultCard' @@ -37,6 +39,7 @@ import { PipeSeparator } from 'components/PipeSeparator/PipeSeparator' import useNewPipelineModal from 'components/NewPipelineModal/NewPipelineModal' import { useGetSpaceParam } from 'hooks/useGetSpaceParam' import useSpaceSSE from 'hooks/useSpaceSSE' +import { useConfirmAct } from 'hooks/useConfirmAction' import noPipelineImage from '../RepositoriesListing/no-repo.svg' import css from './PipelineList.module.scss' @@ -205,6 +208,15 @@ const PipelineList = () => { const [menuOpen, setMenuOpen] = useState(false) const record = row.original const { uid } = record + const repoPath = useMemo(() => repoMetadata?.path || '', [repoMetadata]) + + const confirmDeleteSecret = useConfirmAct() + const { showSuccess, showError } = useToaster() + const { mutate: deletePipeline } = useMutate({ + verb: 'DELETE', + path: `/api/v1/repos/${repoPath}/+/pipelines/${uid}` + }) + return ( { text={getString('edit')} onClick={e => { e.stopPropagation() - history.push( - routes.toCODEPipelineEdit({ repoPath: repoMetadata?.path || '', pipeline: uid as string }) - ) + history.push(routes.toCODEPipelineEdit({ repoPath, pipeline: uid as string })) + }} + /> + { + e.stopPropagation() + confirmDeleteSecret({ + title: getString('pipelines.deletePipelineButton'), + confirmText: getString('delete'), + intent: Intent.DANGER, + message: ( + + ), + action: async () => { + deletePipeline({}) + .then(() => { + showSuccess( + , + 5000 + ) + pipelinesRefetch() + }) + .catch((pipelineDeleteErr: unknown) => { + showError(getErrorMessage(pipelineDeleteErr), 0, 'pipelines.deletePipelineError') + }) + } + }) }} />