diff --git a/web/app/components/workflow/block-selector/index.tsx b/web/app/components/workflow/block-selector/index.tsx index 4d97e19d56..46ab16dd32 100644 --- a/web/app/components/workflow/block-selector/index.tsx +++ b/web/app/components/workflow/block-selector/index.tsx @@ -61,8 +61,8 @@ const NodeSelector: FC = ({ }, [onOpenChange]) const handleTrigger = useCallback>((e) => { e.stopPropagation() - setLocalOpen(v => !v) - }, []) + handleOpenChange(!open) + }, [handleOpenChange, open]) const handleSelect = useCallback((type, toolDefaultValue) => { handleOpenChange(false) onSelect(type, toolDefaultValue) diff --git a/web/app/components/workflow/custom-edge.tsx b/web/app/components/workflow/custom-edge.tsx index 4a8e363aa6..06e9d6aa59 100644 --- a/web/app/components/workflow/custom-edge.tsx +++ b/web/app/components/workflow/custom-edge.tsx @@ -1,4 +1,8 @@ -import { memo } from 'react' +import { + memo, + useCallback, + useState, +} from 'react' import type { EdgeProps } from 'reactflow' import { BaseEdge, @@ -29,6 +33,10 @@ const CustomEdge = ({ targetY, targetPosition: Position.Left, }) + const [open, setOpen] = useState(false) + const handleOpenChange = useCallback((v: boolean) => { + setOpen(v) + }, []) return ( <> @@ -41,23 +49,25 @@ const CustomEdge = ({ }} /> - { - data?._hovering && ( -
- {}} - /> -
- ) - } +
+ {}} + /> +
) diff --git a/web/app/components/workflow/hooks/use-workflow-run.ts b/web/app/components/workflow/hooks/use-workflow-run.ts index aa3cc5906e..0fa04d43b9 100644 --- a/web/app/components/workflow/hooks/use-workflow-run.ts +++ b/web/app/components/workflow/hooks/use-workflow-run.ts @@ -22,6 +22,23 @@ export const useWorkflowRun = () => { const reactflow = useReactFlow() const workflowContainerRef = useRef(null) + const handleBackupDraft = useCallback(() => { + const { + getNodes, + getEdges, + getViewport, + } = reactflow + const { + setBackupDraft, + } = useStore.getState() + + setBackupDraft({ + nodes: getNodes(), + edges: getEdges(), + viewport: getViewport(), + }) + }, [reactflow]) + const handleLoadBackupDraft = useCallback(() => { const { setNodes, @@ -55,9 +72,10 @@ export const useWorkflowRun = () => { handleLoadBackupDraft() } else { + handleBackupDraft() const newNodes = produce(getNodes(), (draft) => { draft.forEach((node) => { - node.data._runningStatus = shouldClear ? undefined : NodeRunningStatus.Waiting + node.data._runningStatus = NodeRunningStatus.Waiting }) }) setNodes(newNodes) @@ -68,7 +86,7 @@ export const useWorkflowRun = () => { }) setEdges(newEdges) } - }, [store, handleLoadBackupDraft]) + }, [store, handleLoadBackupDraft, handleBackupDraft]) const handleRun = useCallback((params: any, callback?: IOtherOptions) => { const { @@ -77,8 +95,6 @@ export const useWorkflowRun = () => { edges, setEdges, } = store.getState() - const { getViewport } = reactflow - const { setBackupDraft } = useStore.getState() const appDetail = useAppStore.getState().appDetail const workflowContainer = document.getElementById('workflow-container') @@ -87,12 +103,6 @@ export const useWorkflowRun = () => { clientHeight, } = workflowContainer! - setBackupDraft({ - nodes: getNodes(), - edges, - viewport: getViewport(), - }) - let url = '' if (appDetail?.mode === 'advanced-chat') url = `/apps/${appDetail.id}/advanced-chat/workflows/draft/run` @@ -164,6 +174,7 @@ export const useWorkflowRun = () => { }, [store, reactflow]) return { + handleBackupDraft, handleRunSetting, handleRun, workflowContainerRef,