diff --git a/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx b/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx
index d777531e..8738436e 100644
--- a/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx
+++ b/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx
@@ -2,6 +2,7 @@ import ReactFlow, { EdgeProps } from 'reactflow';
import ControlledFlow from '../../support/ControlledFlow';
import * as simpleflow from '../../fixtures/simpleflow';
+import { RefReactFlow } from '../../support/RefReactFlow';
describe(': Basic Props', () => {
describe('uses defaultNodes and defaultEdges', () => {
@@ -194,4 +195,32 @@ describe(': Basic Props', () => {
cy.mount();
cy.get('.react-flow').should('have.class', 'custom');
});
+
+ it('uses function ref', () => {
+ let pResolve: ((element: HTMLDivElement | PromiseLike | null) => void) | null = null;
+ const promise: Promise = new Promise((resolve) => {
+ pResolve = resolve;
+ });
+
+ function ref(root: HTMLDivElement | null) {
+ pResolve && pResolve(root);
+ }
+
+ cy.mount();
+ cy.wrap(promise).should('be.instanceOf', HTMLDivElement);
+ });
+
+ it('use mutable ref', () => {
+ let pResolve: ((element: HTMLDivElement | PromiseLike | null) => void) | null = null;
+ const promise: Promise = new Promise((resolve) => {
+ pResolve = resolve;
+ });
+
+ function onGetRef(root: HTMLDivElement | null) {
+ pResolve && pResolve(root);
+ }
+
+ cy.mount();
+ cy.wrap(promise).should('be.instanceOf', HTMLDivElement);
+ });
});
diff --git a/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx
index eacf8d4f..b1b354a0 100644
--- a/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx
+++ b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx
@@ -31,7 +31,6 @@ describe(': Multiple Instances', () => {
defaultNodes={simpleflow1.nodes}
edgeTypes={{ default: CustomEdge }}
defaultEdges={simpleflow1.edges}
- id="reactflow-a"
/>
@@ -39,23 +38,26 @@ describe(': Multiple Instances', () => {
defaultNodes={simpleflow2.nodes}
edgeTypes={{ default: CustomEdge }}
defaultEdges={simpleflow2.edges}
- id="reactflow-b"
/>
>
);
});
- it('Each ReactFlow instance has its EdgeLabelRenderer DOM element without conflict', () => {
- cy.get('#edgelabel-portal-reactflow-a').should('have.length', 1);
- cy.get('#edgelabel-portal-reactflow-b').should('have.length', 1);
- });
-
it('Each ReactFlow instance has one edge label in EdgeLabelRenderer', () => {
- cy.get('#edgelabel-portal-reactflow-a .label').should('have.length', 1);
- cy.get('#edgelabel-portal-reactflow-a .label').should('contain.text', 'edge1');
- cy.get('#edgelabel-portal-reactflow-b .label').should('have.length', 1);
- cy.get('#edgelabel-portal-reactflow-b .label').should('contain.text', 'edge2');
+ 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/examples/vite-app/cypress/support/RefReactFlow.tsx b/examples/vite-app/cypress/support/RefReactFlow.tsx
new file mode 100644
index 00000000..baec9696
--- /dev/null
+++ b/examples/vite-app/cypress/support/RefReactFlow.tsx
@@ -0,0 +1,12 @@
+import { useEffect, useRef } from 'react';
+import ReactFlow from 'reactflow';
+
+export function RefReactFlow({ onGetRef }: { onGetRef: (element: HTMLDivElement | null) => void }) {
+ const ref = useRef(null);
+
+ useEffect(() => {
+ onGetRef(ref.current);
+ }, []);
+
+ return ;
+}