diff --git a/web/app/components/workflow/block-selector/index.tsx b/web/app/components/workflow/block-selector/index.tsx index 6b948a86fa..b742f5f1c3 100644 --- a/web/app/components/workflow/block-selector/index.tsx +++ b/web/app/components/workflow/block-selector/index.tsx @@ -99,7 +99,7 @@ const NodeSelector: FC = ({ } -
+
{ export const useWorkflow = () => { const store = useStoreApi() + const reactflow = useReactFlow() const nodesExtraData = useNodesExtraData() + const { handleSyncWorkflowDraft } = useNodesSyncDraft() const handleLayout = useCallback(async () => { const { @@ -51,6 +56,7 @@ export const useWorkflow = () => { edges, setNodes, } = store.getState() + const { setViewport } = reactflow const nodes = getNodes() const layout = getLayoutByDagre(nodes, edges) @@ -58,13 +64,19 @@ export const useWorkflow = () => { draft.forEach((node) => { const nodeWithPosition = layout.node(node.id) node.position = { - x: nodeWithPosition.x, - y: nodeWithPosition.y, + x: nodeWithPosition.x + AUTO_LAYOUT_OFFSET.x, + y: nodeWithPosition.y + AUTO_LAYOUT_OFFSET.y, } }) }) setNodes(newNodes) - }, [store]) + setViewport({ + x: 0, + y: 0, + zoom: 0.8, + }) + setTimeout(() => handleSyncWorkflowDraft()) + }, [store, reactflow, handleSyncWorkflowDraft]) const getTreeLeafNodes = useCallback((nodeId: string) => { const { diff --git a/web/app/components/workflow/utils.ts b/web/app/components/workflow/utils.ts index 0c733a74f0..8281164f9c 100644 --- a/web/app/components/workflow/utils.ts +++ b/web/app/components/workflow/utils.ts @@ -146,10 +146,12 @@ export const getNodesPositionMap = (nodes: Node[], edges: Edge[]) => { return positionMap } +const dagreGraph = new dagre.graphlib.Graph() +dagreGraph.setDefaultEdgeLabel(() => ({})) + export const getLayoutByDagre = (originNodes: Node[], originEdges: Edge[]) => { const nodes = cloneDeep(originNodes) const edges = cloneDeep(originEdges) - const dagreGraph = new dagre.graphlib.Graph() dagreGraph.setGraph({ rankdir: 'LR', align: 'UL',