import type { FC } from 'react' import { memo, useCallback } from 'react' import { useTranslation } from 'react-i18next' import { useStoreApi } from 'reactflow' import { useStore, useWorkflowStore, } from '../store' import { useIsChatMode, useNodesReadOnly, useNodesSyncDraft, useWorkflowRun, } from '../hooks' import { BlockEnum, WorkflowRunningStatus, } from '../types' import ViewHistory from './view-history' import { Play, StopCircle, } from '@/app/components/base/icons/src/vender/line/mediaAndDevices' import { Loading02 } from '@/app/components/base/icons/src/vender/line/general' import { useFeaturesStore } from '@/app/components/base/features/hooks' const RunMode = memo(() => { const { t } = useTranslation() const store = useStoreApi() const workflowStore = useWorkflowStore() const featuresStore = useFeaturesStore() const { handleStopRun, handleRunSetting, handleRun, } = useWorkflowRun() const { doSyncWorkflowDraft, handleSyncWorkflowDraft, } = useNodesSyncDraft() const workflowRunningData = useStore(s => s.workflowRunningData) const showInputsPanel = useStore(s => s.showInputsPanel) const isRunning = workflowRunningData?.result.status === WorkflowRunningStatus.Running const handleClick = 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 if (!startVariables.length && !fileSettings?.image?.enabled) { await doSyncWorkflowDraft() handleRunSetting() handleRun({ inputs: {}, files: [] }) } else { workflowStore.setState({ historyWorkflowData: undefined, showInputsPanel: true, }) handleSyncWorkflowDraft(true) } }, [ workflowStore, handleSyncWorkflowDraft, handleRunSetting, handleRun, doSyncWorkflowDraft, store, featuresStore, ]) return ( <>
{ isRunning ? ( <> {t('workflow.common.running')} ) : ( <> {t('workflow.common.run')} ) }
{ isRunning && (
handleStopRun(workflowRunningData?.task_id || '')} >
) } ) }) RunMode.displayName = 'RunMode' const PreviewMode = memo(() => { const { t } = useTranslation() const { handleRunSetting } = useWorkflowRun() const { handleSyncWorkflowDraft } = useNodesSyncDraft() const { nodesReadOnly } = useNodesReadOnly() const handleClick = () => { handleSyncWorkflowDraft(true) handleRunSetting() } return (
!nodesReadOnly && handleClick()} > { nodesReadOnly ? ( <> {t('workflow.common.inPreview')} ) : ( <> {t('workflow.common.preview')} ) }
) }) PreviewMode.displayName = 'PreviewMode' const RunAndHistory: FC = () => { const isChatMode = useIsChatMode() return (
{ !isChatMode && } { isChatMode && }
) } export default memo(RunAndHistory)