Skip to content
Snippets Groups Projects
Commit 198d3e41 authored by ali asaria's avatar ali asaria
Browse files

auto zoom to the number of nodes that are on the canvas

parent 40a63dca
No related branches found
No related tags found
No related merge requests found
import { Background, ControlButton, Controls, ReactFlow } from '@xyflow/react'; import {
Background,
ControlButton,
Controls,
ReactFlow,
ReactFlowProvider,
useReactFlow,
} from '@xyflow/react';
import { PlusCircleIcon } from 'lucide-react'; import { PlusCircleIcon } from 'lucide-react';
import React from 'react'; import React, { useEffect } from 'react';
function generateNodes(workflow: any) { function generateNodes(workflow: any) {
let out: any[] = []; let out: any[] = [];
...@@ -47,12 +54,31 @@ function generateEdges(workflow: any) { ...@@ -47,12 +54,31 @@ function generateEdges(workflow: any) {
return out; return out;
} }
export default function WorkflowCanvas({ selectedWorkflow }) { const Flow = ({ selectedWorkflow }) => {
const reactFlowInstance = useReactFlow();
// Use fitView after the component mounts
useEffect(() => {
// Wait a moment to ensure the flow is rendered before fitting
const timer = setTimeout(() => {
reactFlowInstance.fitView({
includeHiddenNodes: false, // Don't include hidden nodes
minZoom: 0.5, // Set minimum zoom level
maxZoom: 10, // Set maximum zoom level
});
}, 100);
return () => clearTimeout(timer);
}, [reactFlowInstance, selectedWorkflow]);
return ( return (
<ReactFlow <ReactFlow
nodes={generateNodes(selectedWorkflow)} nodes={generateNodes(selectedWorkflow)}
edges={generateEdges(selectedWorkflow)} edges={generateEdges(selectedWorkflow)}
fitView fitView
zoomOnScroll={false}
zoomOnPinch={false}
zoomOnDoubleClick={false}
panOnScroll={false}
style={{ backgroundColor: '#F7F9FB' }} style={{ backgroundColor: '#F7F9FB' }}
> >
<Background color="#96ADE9" /> <Background color="#96ADE9" />
...@@ -72,4 +98,12 @@ export default function WorkflowCanvas({ selectedWorkflow }) { ...@@ -72,4 +98,12 @@ export default function WorkflowCanvas({ selectedWorkflow }) {
/> />
</ReactFlow> </ReactFlow>
); );
};
export default function WorkflowCanvas({ selectedWorkflow }) {
return (
<ReactFlowProvider>
<Flow selectedWorkflow={selectedWorkflow} />
</ReactFlowProvider>
);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment