123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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,
- }
- }
|