diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/index.tsx b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/index.tsx index a585df4bbe..954ffbd56c 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/index.tsx @@ -3,7 +3,7 @@ import type { ResultPanelProps } from '@/app/components/workflow/run/result-pane import ResultPanel from '@/app/components/workflow/run/result-panel' import { NodeRunningStatus } from '@/app/components/workflow/types' import type { FC } from 'react' -import React from 'react' +import React, { useMemo } from 'react' import NoData from './no-data' import { useLastRun } from '@/service/use-workflow' import { RiLoader2Line } from '@remixicon/react' @@ -31,10 +31,15 @@ const LastRun: FC = ({ singleRunResult, ...otherResultPanelProps }) => { - const isRunning = oneStepRunRunningStatus === NodeRunningStatus.Running const isOneStepRunSucceed = oneStepRunRunningStatus === NodeRunningStatus.Succeeded const canRunLastRun = !isRunAfterSingleRun || isOneStepRunSucceed const { data: lastRunResult, isFetching, error } = useLastRun(appId, nodeId, canRunLastRun) + const isRunning = useMemo(() => { + if(!isRunAfterSingleRun) + return isFetching + return [NodeRunningStatus.Running, NodeRunningStatus.NotStart].includes(oneStepRunRunningStatus!) + }, [isFetching, isRunAfterSingleRun, oneStepRunRunningStatus]) + const noLastRun = (error as any)?.status === 404 const runResult = (canRunLastRun ? lastRunResult : singleRunResult) || {} diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts index 367eac0a0d..937261ca6b 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts @@ -138,6 +138,7 @@ const useLastRun = ({ runResult, iterationRunResult, loopRunResult, + setNodeRunning, } = oneStepRunRes const { @@ -174,10 +175,11 @@ const useLastRun = ({ return formattedData }, [isIterationNode, isLoopNode, singleRunParams?.allVarObject, id]) - const callRunApi = (data: Record) => { + const callRunApi = (data: Record, cb?: () => void) => { handleSyncWorkflowDraft(true, true, { onSuccess() { doCallRunApi(toSubmitData(data)) + cb?.() }, }) } @@ -254,9 +256,11 @@ const useLastRun = ({ const handleSingleRun = () => { // no need to input params if (isAllVarsHasValue(singleRunParams?.getDependentVars?.())) { - callRunApi({}) - setIsRunAfterSingleRun(true) - setTabType(TabType.lastRun) + callRunApi({}, async () => { + setIsRunAfterSingleRun(true) + setNodeRunning() + setTabType(TabType.lastRun) + }) } else { showSingleRun() diff --git a/web/app/components/workflow/nodes/_base/hooks/use-one-step-run.ts b/web/app/components/workflow/nodes/_base/hooks/use-one-step-run.ts index 0c39191c94..faa73c0612 100644 --- a/web/app/components/workflow/nodes/_base/hooks/use-one-step-run.ts +++ b/web/app/components/workflow/nodes/_base/hooks/use-one-step-run.ts @@ -173,7 +173,6 @@ const useOneStepRun = ({ invalidateConversationVarValues, } = useInspectVarsCrud() const runningStatus = data._singleRunningStatus || NodeRunningStatus.NotStart - const isPaused = !data._isSingleRun const setRunResult = useCallback(async (data: NodeRunResult | null) => { // The backend don't support pause the single run, so the frontend handle the pause state. @@ -200,6 +199,15 @@ const useOneStepRun = ({ }, [isPaused, isRunAfterSingleRun, runningStatus, appId, id, store, appendNodeInspectVars, invalidLastRun, isStartNode, invalidateSysVarValues, invalidateConversationVarValues]) const { handleNodeDataUpdate }: { handleNodeDataUpdate: (data: any) => void } = useNodeDataUpdate() + const setNodeRunning = () => { + handleNodeDataUpdate({ + id, + data: { + ...data, + _singleRunningStatus: NodeRunningStatus.Running, + }, + }) + } const [canShowSingleRun, setCanShowSingleRun] = useState(false) const isShowSingleRun = data._isSingleRun && canShowSingleRun const [iterationRunResult, setIterationRunResult] = useState([]) @@ -250,6 +258,7 @@ const useOneStepRun = ({ data: { ...data, _isSingleRun: true, + _singleRunningStatus: NodeRunningStatus.Running, }, }) } @@ -616,6 +625,7 @@ const useOneStepRun = ({ runResult, iterationRunResult, loopRunResult, + setNodeRunning, } }