use-workflow-start-run.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { useCallback } from 'react'
  2. import { useStoreApi } from 'reactflow'
  3. import { useWorkflowStore } from '../store'
  4. import {
  5. BlockEnum,
  6. WorkflowRunningStatus,
  7. } from '../types'
  8. import {
  9. useIsChatMode,
  10. useNodesSyncDraft,
  11. useWorkflowInteractions,
  12. useWorkflowRun,
  13. } from './index'
  14. import { useFeaturesStore } from '@/app/components/base/features/hooks'
  15. export const useWorkflowStartRun = () => {
  16. const store = useStoreApi()
  17. const workflowStore = useWorkflowStore()
  18. const featuresStore = useFeaturesStore()
  19. const isChatMode = useIsChatMode()
  20. const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions()
  21. const { handleRun } = useWorkflowRun()
  22. const { doSyncWorkflowDraft } = useNodesSyncDraft()
  23. const handleWorkflowStartRunInWorkflow = useCallback(async () => {
  24. const {
  25. workflowRunningData,
  26. } = workflowStore.getState()
  27. if (workflowRunningData?.result.status === WorkflowRunningStatus.Running)
  28. return
  29. const { getNodes } = store.getState()
  30. const nodes = getNodes()
  31. const startNode = nodes.find(node => node.data.type === BlockEnum.Start)
  32. const startVariables = startNode?.data.variables || []
  33. const fileSettings = featuresStore!.getState().features.file
  34. const {
  35. showDebugAndPreviewPanel,
  36. setShowDebugAndPreviewPanel,
  37. setShowInputsPanel,
  38. } = workflowStore.getState()
  39. if (showDebugAndPreviewPanel) {
  40. handleCancelDebugAndPreviewPanel()
  41. return
  42. }
  43. if (!startVariables.length && !fileSettings?.image?.enabled) {
  44. await doSyncWorkflowDraft()
  45. handleRun({ inputs: {}, files: [] })
  46. setShowDebugAndPreviewPanel(true)
  47. setShowInputsPanel(false)
  48. }
  49. else {
  50. setShowDebugAndPreviewPanel(true)
  51. setShowInputsPanel(true)
  52. }
  53. }, [store, workflowStore, featuresStore, handleCancelDebugAndPreviewPanel, handleRun, doSyncWorkflowDraft])
  54. const handleWorkflowStartRunInChatflow = useCallback(async () => {
  55. const {
  56. showDebugAndPreviewPanel,
  57. setShowDebugAndPreviewPanel,
  58. setHistoryWorkflowData,
  59. } = workflowStore.getState()
  60. if (showDebugAndPreviewPanel)
  61. handleCancelDebugAndPreviewPanel()
  62. else
  63. setShowDebugAndPreviewPanel(true)
  64. setHistoryWorkflowData(undefined)
  65. }, [workflowStore, handleCancelDebugAndPreviewPanel])
  66. const handleStartWorkflowRun = useCallback(() => {
  67. if (!isChatMode)
  68. handleWorkflowStartRunInWorkflow()
  69. else
  70. handleWorkflowStartRunInChatflow()
  71. }, [isChatMode, handleWorkflowStartRunInWorkflow, handleWorkflowStartRunInChatflow])
  72. return {
  73. handleStartWorkflowRun,
  74. handleWorkflowStartRunInWorkflow,
  75. handleWorkflowStartRunInChatflow,
  76. }
  77. }