From 62c1c76639265cebb458fecbddbfe912a2bf57ed Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 22 Apr 2025 16:05:14 +0800 Subject: [PATCH] feat: single run progress --- .../components/before-run-form/index.tsx | 6 ++-- .../_base/components/workflow-panel/index.tsx | 9 +++-- .../components/workflow-panel/last-run.tsx | 34 ++++++++++++++++--- .../nodes/_base/hooks/use-one-step-run.ts | 7 ++++ .../components/workflow/nodes/llm/panel.tsx | 5 --- .../components/workflow/run/result-panel.tsx | 2 +- 6 files changed, 47 insertions(+), 16 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx b/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx index 2259eb4c0a..0d37f9bee4 100644 --- a/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx @@ -1,6 +1,6 @@ 'use client' import type { FC } from 'react' -import React, { useCallback } from 'react' +import React from 'react' import { useTranslation } from 'react-i18next' import { RiCloseLine, @@ -87,7 +87,7 @@ const BeforeRunForm: FC = ({ return true })() - const handleRun = useCallback(() => { + const handleRun = () => { let errMsg = '' forms.forEach((form) => { form.inputs.forEach((input) => { @@ -137,7 +137,7 @@ const BeforeRunForm: FC = ({ } onRun(submitData) - }, [forms, onRun, t]) + } return (
diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/index.tsx b/web/app/components/workflow/nodes/_base/components/workflow-panel/index.tsx index 6748ba7082..42d00c7606 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/index.tsx @@ -145,7 +145,7 @@ const BasePanel: FC = ({ showSingleRun, hideSingleRun, runningStatus, - handleRun, + handleRun: callRunApi, handleStop, runInputData, runInputDataRef, @@ -168,6 +168,11 @@ const BasePanel: FC = ({ }, [doSetRunInputData]) const [tabType, setTabType] = useState(TabType.settings) + const handleRun = async (data: Record) => { + setTabType(TabType.lastRun) + callRunApi(data) + hideSingleRun() + } const hasLastRunData = true // TODO: add disabled logic return ( @@ -302,7 +307,7 @@ const BasePanel: FC = ({ )} {tabType === TabType.lastRun && ( - + )} { diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run.tsx b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run.tsx index 4c1951e85d..5d64e39165 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run.tsx +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run.tsx @@ -1,20 +1,44 @@ 'use client' import ResultPanel from '@/app/components/workflow/run/result-panel' +import { useWorkflowStore } from '@/app/components/workflow/store' +import { NodeRunningStatus } from '@/app/components/workflow/types' import type { FC } from 'react' -import React from 'react' +import React, { useEffect, useState } from 'react' type Props = { - appId: string + nodeId: string + runningStatus: NodeRunningStatus } const LastRun: FC = ({ - appId, + nodeId, + runningStatus, }) => { + const workflowStore = useWorkflowStore() + + const { + getLastRunNodeInfo, + } = workflowStore.getState() + const [runResult, setRunResult] = useState(getLastRunNodeInfo(nodeId)) + const isRunning = runningStatus === NodeRunningStatus.Running + + useEffect(() => { + setRunResult(getLastRunNodeInfo(nodeId)) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [runningStatus]) + if (isRunning) + return + + if (!runResult) { + return ( +
no data
+ ) + } return (
- last run: {appId}
) 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 daa2600e0b..7044756abd 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 @@ -228,6 +228,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Running, }, }) @@ -250,6 +251,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Succeeded, }, }) @@ -326,6 +328,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Failed, }, }) @@ -347,6 +350,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Succeeded, }, }) @@ -424,6 +428,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Failed, }, }) @@ -441,6 +446,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Failed, }, }) @@ -461,6 +467,7 @@ const useOneStepRun = ({ id, data: { ...data, + _isSingleRun: false, _singleRunningStatus: NodeRunningStatus.Succeeded, }, }) diff --git a/web/app/components/workflow/nodes/llm/panel.tsx b/web/app/components/workflow/nodes/llm/panel.tsx index b09e283af1..b27b8cc200 100644 --- a/web/app/components/workflow/nodes/llm/panel.tsx +++ b/web/app/components/workflow/nodes/llm/panel.tsx @@ -17,7 +17,6 @@ import { InputVarType, type NodePanelProps } from '@/app/components/workflow/typ import type { Props as FormProps } from '@/app/components/workflow/nodes/_base/components/before-run-form/form' import Tooltip from '@/app/components/base/tooltip' import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor' -import useCurrentVars from '../../hooks/use-current-vars' import StructureOutput from './components/structure-output' import Switch from '@/app/components/base/switch' import { RiAlertFill, RiQuestionLine } from '@remixicon/react' @@ -31,10 +30,6 @@ const Panel = forwardRef>(({ panelProps, }, ref) => { const { t } = useTranslation() - const { - currentVars, - } = useCurrentVars() - console.log(currentVars) const { readOnly, inputs, diff --git a/web/app/components/workflow/run/result-panel.tsx b/web/app/components/workflow/run/result-panel.tsx index 096a825bc6..be77f056d6 100644 --- a/web/app/components/workflow/run/result-panel.tsx +++ b/web/app/components/workflow/run/result-panel.tsx @@ -21,7 +21,7 @@ type ResultPanelProps = { nodeInfo?: NodeTracing inputs?: string process_data?: string - outputs?: string + outputs?: string | Record status: string error?: string elapsed_time?: number