Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

use-DSL.ts 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {
  2. useCallback,
  3. useState,
  4. } from 'react'
  5. import { useTranslation } from 'react-i18next'
  6. import {
  7. DSL_EXPORT_CHECK,
  8. } from '@/app/components/workflow/constants'
  9. import { useNodesSyncDraft } from './use-nodes-sync-draft'
  10. import { useEventEmitterContextContext } from '@/context/event-emitter'
  11. import { fetchWorkflowDraft } from '@/service/workflow'
  12. import { useToastContext } from '@/app/components/base/toast'
  13. import { useWorkflowStore } from '@/app/components/workflow/store'
  14. import { useExportPipelineDSL } from '@/service/use-pipeline'
  15. export const useDSL = () => {
  16. const { t } = useTranslation()
  17. const { notify } = useToastContext()
  18. const { eventEmitter } = useEventEmitterContextContext()
  19. const [exporting, setExporting] = useState(false)
  20. const { doSyncWorkflowDraft } = useNodesSyncDraft()
  21. const workflowStore = useWorkflowStore()
  22. const { mutateAsync: exportPipelineConfig } = useExportPipelineDSL()
  23. const handleExportDSL = useCallback(async (include = false) => {
  24. const { pipelineId, knowledgeName } = workflowStore.getState()
  25. if (!pipelineId)
  26. return
  27. if (exporting)
  28. return
  29. try {
  30. setExporting(true)
  31. await doSyncWorkflowDraft()
  32. const { data } = await exportPipelineConfig({
  33. pipelineId,
  34. include,
  35. })
  36. const a = document.createElement('a')
  37. const file = new Blob([data], { type: 'application/yaml' })
  38. a.href = URL.createObjectURL(file)
  39. a.download = `${knowledgeName}.pipeline`
  40. a.click()
  41. }
  42. catch {
  43. notify({ type: 'error', message: t('app.exportFailed') })
  44. }
  45. finally {
  46. setExporting(false)
  47. }
  48. }, [notify, t, doSyncWorkflowDraft, exporting, exportPipelineConfig, workflowStore])
  49. const exportCheck = useCallback(async () => {
  50. const { pipelineId } = workflowStore.getState()
  51. if (!pipelineId)
  52. return
  53. try {
  54. const workflowDraft = await fetchWorkflowDraft(`/rag/pipelines/${pipelineId}/workflows/draft`)
  55. const list = (workflowDraft.environment_variables || []).filter(env => env.value_type === 'secret')
  56. if (list.length === 0) {
  57. handleExportDSL()
  58. return
  59. }
  60. eventEmitter?.emit({
  61. type: DSL_EXPORT_CHECK,
  62. payload: {
  63. data: list,
  64. },
  65. } as any)
  66. }
  67. catch {
  68. notify({ type: 'error', message: t('app.exportFailed') })
  69. }
  70. }, [eventEmitter, handleExportDSL, notify, t, workflowStore])
  71. return {
  72. exportCheck,
  73. handleExportDSL,
  74. }
  75. }