Просмотр исходного кода

fix: workflow sync before export (#6380)

zxhlyh 9 месяцев назад
Родитель
Сommit
984658f5e9
1 измененных файлов с 18 добавлено и 2 удалено
  1. 18 2
      web/app/components/workflow/hooks/use-workflow-interactions.ts

+ 18 - 2
web/app/components/workflow/hooks/use-workflow-interactions.ts

@@ -1,4 +1,7 @@
-import { useCallback } from 'react'
+import {
+  useCallback,
+  useState,
+} from 'react'
 import { useTranslation } from 'react-i18next'
 import { useReactFlow } from 'reactflow'
 import { useWorkflowStore } from '../store'
@@ -10,6 +13,7 @@ import {
 } from '../utils'
 import { useEdgesInteractions } from './use-edges-interactions'
 import { useNodesInteractions } from './use-nodes-interactions'
+import { useNodesSyncDraft } from './use-nodes-sync-draft'
 import { useEventEmitterContextContext } from '@/context/event-emitter'
 import { fetchWorkflowDraft } from '@/service/workflow'
 import { exportAppConfig } from '@/service/apps'
@@ -79,12 +83,21 @@ export const useWorkflowUpdate = () => {
 export const useDSL = () => {
   const { t } = useTranslation()
   const { notify } = useToastContext()
+  const [exporting, setExporting] = useState(false)
+  const { doSyncWorkflowDraft } = useNodesSyncDraft()
+
   const appDetail = useAppStore(s => s.appDetail)
 
   const handleExportDSL = useCallback(async () => {
     if (!appDetail)
       return
+
+    if (exporting)
+      return
+
     try {
+      setExporting(true)
+      await doSyncWorkflowDraft()
       const { data } = await exportAppConfig(appDetail.id)
       const a = document.createElement('a')
       const file = new Blob([data], { type: 'application/yaml' })
@@ -95,7 +108,10 @@ export const useDSL = () => {
     catch (e) {
       notify({ type: 'error', message: t('app.exportFailed') })
     }
-  }, [appDetail, notify, t])
+    finally {
+      setExporting(false)
+    }
+  }, [appDetail, notify, t, doSyncWorkflowDraft, exporting])
 
   return {
     handleExportDSL,