diff --git a/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx
new file mode 100644
index 00000000..b1b354a0
--- /dev/null
+++ b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx
@@ -0,0 +1,63 @@
+import ReactFlow, { BaseEdge, EdgeLabelRenderer, EdgeProps, getSmoothStepPath, ReactFlowProvider } from 'reactflow';
+import * as simpleflow from '../../fixtures/simpleflow';
+
+function CustomEdge(props: EdgeProps) {
+ const [path, labelX, labelY] = getSmoothStepPath(props);
+ return (
+ <>
+
+
+ {props.id}
+
+ >
+ );
+}
+
+const simpleflow1 = { ...simpleflow };
+simpleflow1.edges = [...simpleflow1.edges];
+simpleflow1.edges[0] = { ...simpleflow1.edges[0], id: 'edge1' };
+
+const simpleflow2 = { ...simpleflow };
+simpleflow2.edges = [...simpleflow2.edges];
+simpleflow2.edges[0] = { ...simpleflow2.edges[0], id: 'edge2' };
+
+describe(': Multiple Instances', () => {
+ describe('render EdgeLabelRenderer', () => {
+ beforeEach(() => {
+ cy.mount(
+ <>
+
+
+
+
+
+
+ >
+ );
+ });
+
+ it('Each ReactFlow instance has one edge label in EdgeLabelRenderer', () => {
+ cy.get('.react-flow__edgelabel-renderer').should('have.length', 2);
+
+ cy.get('.react-flow__edgelabel-renderer')
+ .eq(0)
+ .within(() => {
+ cy.get('.label').should('have.length', 1).should('contain.text', 'edge1');
+ });
+
+ cy.get('.react-flow__edgelabel-renderer')
+ .eq(1)
+ .within(() => {
+ cy.get('.label').should('have.length', 1).should('contain.text', 'edge2');
+ });
+ });
+ });
+});
diff --git a/packages/core/src/components/EdgeLabelRenderer/index.tsx b/packages/core/src/components/EdgeLabelRenderer/index.tsx
index 0647364a..059dae1b 100644
--- a/packages/core/src/components/EdgeLabelRenderer/index.tsx
+++ b/packages/core/src/components/EdgeLabelRenderer/index.tsx
@@ -1,15 +1,20 @@
-import { useRef } from 'react';
import type { ReactNode } from 'react';
import { createPortal } from 'react-dom';
+import { useStore } from '../../hooks/useStore';
+import { ReactFlowState } from '../../types';
+
+const selector = (s: ReactFlowState) => ({
+ edgeLabelRenderer: s.domNode?.querySelector('.react-flow__edgelabel-renderer'),
+});
function EdgeLabelRenderer({ children }: { children: ReactNode }) {
- const wrapperRef = useRef(document.getElementById('edgelabel-portal'));
+ const { edgeLabelRenderer } = useStore(selector);
- if (!wrapperRef.current) {
+ if (!edgeLabelRenderer) {
return null;
}
- return createPortal(children, wrapperRef.current);
+ return createPortal(children, edgeLabelRenderer);
}
export default EdgeLabelRenderer;
diff --git a/packages/core/src/container/GraphView/index.tsx b/packages/core/src/container/GraphView/index.tsx
index 4190bed0..3af02659 100644
--- a/packages/core/src/container/GraphView/index.tsx
+++ b/packages/core/src/container/GraphView/index.tsx
@@ -158,7 +158,7 @@ const GraphView = ({
disableKeyboardA11y={disableKeyboardA11y}
rfId={rfId}
/>
-
+
, duration = 0) => {
return selection.transition().duration(duration);
};
+