| | |
| | | import { useHooksStore } from '@/app/components/workflow/hooks-store' |
| | | 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 handleStartWorkflowRun = useHooksStore(s => s.handleStartWorkflowRun) |
| | | const handleWorkflowStartRunInWorkflow = useHooksStore(s => s.handleWorkflowStartRunInWorkflow) |
| | | const handleWorkflowStartRunInChatflow = useHooksStore(s => s.handleWorkflowStartRunInChatflow) |
| | | 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, |