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 ; +}