From 505301a361f784773a3459911fdbe476886e4426 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 24 Apr 2025 15:10:21 +0800 Subject: [PATCH] feat: logic to use last run hooks --- .../_base/components/workflow-panel/index.tsx | 39 ++++-------- .../workflow-panel/last-run/use-last-run.ts | 59 +++++++++++++++++++ .../nodes/_base/hooks/use-one-step-run.ts | 2 +- 3 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts 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 c982f0ca15..8bf536fb90 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 @@ -8,8 +8,6 @@ import { useCallback, useEffect, useMemo, - useRef, - useState, } from 'react' import { RiCloseLine, @@ -51,10 +49,8 @@ import { useStore as useAppStore } from '@/app/components/app/store' import { useStore } from '@/app/components/workflow/store' import Tab, { TabType } from './tab' import LastRun from './last-run' -import useOneStepRun from '../../hooks/use-one-step-run' -import type { PanelExposedType } from '@/types/workflow' +import useLastRun from './last-run/use-last-run' import BeforeRunForm from '../before-run-form' -import { sleep } from '@/utils' import { debounce } from 'lodash-es' import { NODES_EXTRA_DATA } from '@/app/components/workflow/constants' @@ -138,42 +134,33 @@ const BasePanel: FC = ({ }, [handleNodeDataUpdateWithSyncDraft, id, saveStateToHistory]) const isSupportSingleRun = canRunBySingle(data.type) - const childPanelRef = useRef(null) + const appDetail = useAppStore(state => state.appDetail) const { isShowSingleRun, showSingleRun, hideSingleRun, runningStatus, - handleRun: callRunApi, handleStop, runInputData, runInputDataRef, - setRunInputData: doSetRunInputData, runResult, getInputVars, toVarInputs, - } = useOneStepRun({ + childPanelRef, + tabType, + setTabType, + singleRunParams, + setSingleRunParams, + setRunInputData, + hasLastRunData, + isDataFromHistory, + handleRun, + } = useLastRun({ id, data, defaultRunInputData: NODES_EXTRA_DATA[data.type]?.defaultRunInputData || {}, }) - const [singleRunParams, setSingleRunParams] = useState(undefined) - - const setRunInputData = useCallback(async (data: Record) => { - doSetRunInputData(data) - // console.log(childPanelRef.current?.singleRunParams) - await sleep(0) // wait for childPanelRef.current?.singleRunParams refresh - setSingleRunParams(childPanelRef.current?.singleRunParams) - }, [doSetRunInputData]) - - const [tabType, setTabType] = useState(TabType.lastRun) - const handleRun = async (data: Record) => { - setTabType(TabType.lastRun) - callRunApi(data) - hideSingleRun() - } - const hasLastRunData = true // TODO: add disabled logic return (
= ({ )} {tabType === TabType.lastRun && ( - + )} { 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 new file mode 100644 index 0000000000..fa76dc1560 --- /dev/null +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts @@ -0,0 +1,59 @@ +import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run' +import type { Params as OneStepRunParams } from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run' +import { useCallback, useRef, useState } from 'react' +import type { PanelExposedType } from '@/types/workflow' +import { TabType } from '../tab' +import { sleep } from '@/utils' + +type Params = OneStepRunParams +const useLastRun = ({ + ...oneStepRunParams +}: Params) => { + const childPanelRef = useRef(null) + + const oneStepRunRes = useOneStepRun(oneStepRunParams) + const { + hideSingleRun, + handleRun: callRunApi, + setRunInputData: doSetRunInputData, + } = oneStepRunRes + + const [singleRunParams, setSingleRunParams] = useState(undefined) + + const setRunInputData = useCallback(async (data: Record) => { + doSetRunInputData(data) + // console.log(childPanelRef.current?.singleRunParams) + await sleep(0) // wait for childPanelRef.current?.singleRunParams refresh + setSingleRunParams(childPanelRef.current?.singleRunParams) + }, [doSetRunInputData]) + + const [isDataFromHistory, setIsDataFromHistory] = useState(true) + const [tabType, setTabType] = useState(TabType.lastRun) + const handleRun = async (data: Record) => { + setIsDataFromHistory(false) + setTabType(TabType.lastRun) + callRunApi(data) + hideSingleRun() + } + + const handleTabClicked = useCallback((type: TabType) => { + setTabType(type) + setIsDataFromHistory(true) + }, []) + const hasLastRunData = true // TODO: add disabled logic + + return { + ...oneStepRunRes, + childPanelRef, + tabType, + setTabType: handleTabClicked, + singleRunParams, + setSingleRunParams, + setRunInputData, + hasLastRunData, + isDataFromHistory, + handleRun, + } +} + +export default useLastRun 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 6fb89af658..db2e532d74 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 @@ -67,7 +67,7 @@ const checkValidFns: Record = { [BlockEnum.Loop]: checkLoopValid, } as any -type Params = { +export type Params = { id: string data: CommonNodeType defaultRunInputData: Record