| import { useCallback } from 'react' |
| import { useStoreApi } from 'reactflow' |
| import { useWorkflowStore } from '../store' |
| import { |
| BlockEnum, |
| WorkflowRunningStatus, |
| } from '../types' |
| import { |
| useIsChatMode, |
| useNodesSyncDraft, |
| useWorkflowInteractions, |
| useWorkflowRun, |
| } from './index' |
| import { useFeaturesStore } from '@/app/components/base/features/hooks' |
|
|
| export const useWorkflowStartRun = () => { |
| const store = useStoreApi() |
| const workflowStore = useWorkflowStore() |
| const featuresStore = useFeaturesStore() |
| const isChatMode = useIsChatMode() |
| const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions() |
| const { handleRun } = useWorkflowRun() |
| const { doSyncWorkflowDraft } = useNodesSyncDraft() |
|
|
| const handleWorkflowStartRunInWorkflow = useCallback(async () => { |
| const { |
| workflowRunningData, |
| } = workflowStore.getState() |
|
|
| if (workflowRunningData?.result.status === WorkflowRunningStatus.Running) |
| return |
|
|
| const { getNodes } = store.getState() |
| const nodes = getNodes() |
| const startNode = nodes.find(node => node.data.type === BlockEnum.Start) |
| const startVariables = startNode?.data.variables || [] |
| const fileSettings = featuresStore!.getState().features.file |
| const { |
| showDebugAndPreviewPanel, |
| setShowDebugAndPreviewPanel, |
| setShowInputsPanel, |
| setShowEnvPanel, |
| } = workflowStore.getState() |
|
|
| setShowEnvPanel(false) |
|
|
| if (showDebugAndPreviewPanel) { |
| handleCancelDebugAndPreviewPanel() |
| return |
| } |
|
|
| if (!startVariables.length && !fileSettings?.image?.enabled) { |
| await doSyncWorkflowDraft() |
| handleRun({ inputs: {}, files: [] }) |
| setShowDebugAndPreviewPanel(true) |
| setShowInputsPanel(false) |
| } |
| else { |
| setShowDebugAndPreviewPanel(true) |
| setShowInputsPanel(true) |
| } |
| }, [store, workflowStore, featuresStore, handleCancelDebugAndPreviewPanel, handleRun, doSyncWorkflowDraft]) |
|
|
| const handleWorkflowStartRunInChatflow = useCallback(async () => { |
| const { |
| showDebugAndPreviewPanel, |
| setShowDebugAndPreviewPanel, |
| setHistoryWorkflowData, |
| setShowEnvPanel, |
| setShowChatVariablePanel, |
| } = workflowStore.getState() |
|
|
| setShowEnvPanel(false) |
| setShowChatVariablePanel(false) |
|
|
| if (showDebugAndPreviewPanel) |
| handleCancelDebugAndPreviewPanel() |
| else |
| setShowDebugAndPreviewPanel(true) |
|
|
| setHistoryWorkflowData(undefined) |
| }, [workflowStore, handleCancelDebugAndPreviewPanel]) |
|
|
| const handleStartWorkflowRun = useCallback(() => { |
| if (!isChatMode) |
| handleWorkflowStartRunInWorkflow() |
| else |
| handleWorkflowStartRunInChatflow() |
| }, [isChatMode, handleWorkflowStartRunInWorkflow, handleWorkflowStartRunInChatflow]) |
|
|
| return { |
| handleStartWorkflowRun, |
| handleWorkflowStartRunInWorkflow, |
| handleWorkflowStartRunInChatflow, |
| } |
| } |
|
|