diff --git a/web/app/components/datasets/create-from-pipeline/list/template-card/edit-pipeline-info.tsx b/web/app/components/datasets/create-from-pipeline/list/template-card/edit-pipeline-info.tsx
index 2a469ffc02..9c8733c755 100644
--- a/web/app/components/datasets/create-from-pipeline/list/template-card/edit-pipeline-info.tsx
+++ b/web/app/components/datasets/create-from-pipeline/list/template-card/edit-pipeline-info.tsx
@@ -9,16 +9,15 @@ import Button from '@/app/components/base/button'
import { useTranslation } from 'react-i18next'
import Toast from '@/app/components/base/toast'
import type { PipelineTemple } from '@/models/pipeline'
+import { useUpdatePipelineInfo } from '@/service/use-pipeline'
type EditPipelineInfoProps = {
onClose: () => void
- onSave: () => void
pipeline: PipelineTemple
}
const EditPipelineInfo = ({
onClose,
- onSave,
pipeline,
}: EditPipelineInfoProps) => {
const { t } = useTranslation()
@@ -62,7 +61,9 @@ const EditPipelineInfo = ({
setDescription(value)
}, [])
- const handleSave = useCallback(() => {
+ const { mutateAsync: updatePipeline } = useUpdatePipelineInfo()
+
+ const handleSave = useCallback(async () => {
if (!name) {
Toast.notify({
type: 'error',
@@ -70,16 +71,30 @@ const EditPipelineInfo = ({
})
return
}
- onSave()
- onClose()
- }, [name, onSave, onClose])
+ const request = {
+ pipeline_id: pipeline.id,
+ name,
+ icon_info: {
+ icon_type: appIcon.type,
+ icon: appIcon.type === 'image' ? appIcon.fileId : appIcon.icon,
+ icon_background: appIcon.type === 'image' ? undefined : appIcon.background,
+ icon_url: appIcon.type === 'image' ? appIcon.url : undefined,
+ },
+ description,
+ }
+ await updatePipeline(request, {
+ onSettled: () => {
+ onClose()
+ },
+ })
+ }, [name, appIcon, description, pipeline.id, updatePipeline, onClose])
return (
{/* Header */}
- Edit Pipeline Info
+ {t('datasetPipeline.editPipelineInfo')}
diff --git a/web/app/components/datasets/create-from-pipeline/list/template-card/index.tsx b/web/app/components/datasets/create-from-pipeline/list/template-card/index.tsx
index 8428ddf2c8..0152bb49c0 100644
--- a/web/app/components/datasets/create-from-pipeline/list/template-card/index.tsx
+++ b/web/app/components/datasets/create-from-pipeline/list/template-card/index.tsx
@@ -10,6 +10,10 @@ import Modal from '@/app/components/base/modal'
import EditPipelineInfo from './edit-pipeline-info'
import type { PipelineTemple } from '@/models/pipeline'
import { DOC_FORM_ICON, DOC_FORM_TEXT } from '@/models/datasets'
+import Confirm from '@/app/components/base/confirm'
+import { useDeletePipeline, useExportPipelineDSL } from '@/service/use-pipeline'
+import { downloadFile } from '@/utils/format'
+import Toast from '@/app/components/base/toast'
type TemplateCardProps = {
pipeline: PipelineTemple
@@ -22,6 +26,7 @@ const TemplateCard = ({
}: TemplateCardProps) => {
const { t } = useTranslation()
const [showEditModal, setShowEditModal] = useState(false)
+ const [showDeleteConfirm, setShowConfirmDelete] = useState(false)
const openEditModal = useCallback(() => {
setShowEditModal(true)
@@ -31,6 +36,48 @@ const TemplateCard = ({
setShowEditModal(false)
}, [])
+ const { mutateAsync: getDSLFileContent } = useExportPipelineDSL()
+
+ const handleExportDSL = useCallback(async () => {
+ await getDSLFileContent(pipeline.id, {
+ onSuccess: (res) => {
+ const blob = new Blob([res.data], { type: 'application/yaml' })
+ downloadFile({
+ data: blob,
+ fileName: `${pipeline.name}.dsl`,
+ })
+ Toast.notify({
+ type: 'success',
+ message: t('datasetPipeline.exportDSL.successTip'),
+ })
+ },
+ onError: () => {
+ Toast.notify({
+ type: 'error',
+ message: t('datasetPipeline.exportDSL.errorTip'),
+ })
+ },
+ })
+ }, [t, pipeline.id, pipeline.name, getDSLFileContent])
+
+ const handleDelete = useCallback(() => {
+ setShowConfirmDelete(true)
+ }, [])
+
+ const onCancelDelete = useCallback(() => {
+ setShowConfirmDelete(false)
+ }, [])
+
+ const { mutateAsync: deletePipeline } = useDeletePipeline()
+
+ const onConfirmDelete = useCallback(async () => {
+ await deletePipeline(pipeline.id, {
+ onSettled: () => {
+ setShowConfirmDelete(false)
+ },
+ })
+ }, [pipeline.id, deletePipeline])
+
const Icon = DOC_FORM_ICON[pipeline.doc_form] || General
const iconInfo = pipeline.icon_info
@@ -50,13 +97,21 @@ const TemplateCard = ({