Merge branch 'namack-always-allow-onElementClick'

This commit is contained in:
moklick
2020-08-19 18:37:47 +02:00
4 changed files with 35 additions and 10 deletions
@@ -20,6 +20,20 @@ describe('Interaction Flow Rendering', () => {
expect(pointerEvents).to.equal('none'); expect(pointerEvents).to.equal('none');
}); });
it('toggles on capture element click', () => {
cy.get('.react-flow__captureelementclick').click();
});
it('allows node clicks when enabled', () => {
const pointerEvents = Cypress.$('.react-flow__node:first').css('pointer-events');
expect(pointerEvents).to.equal('all');
});
it('allows edge clicks when enabled', () => {
const pointerEvents = Cypress.$('.react-flow__edge:first').css('pointer-events');
expect(pointerEvents).to.equal('all');
});
it('tries to do a selection', () => { it('tries to do a selection', () => {
cy.get('body').type('{shift}', { release: false }).get('.react-flow__selectionpane').should('not.exist'); cy.get('body').type('{shift}', { release: false }).get('.react-flow__selectionpane').should('not.exist');
cy.get('body').type('{shift}', { release: true }); cy.get('body').type('{shift}', { release: true });
+14 -1
View File
@@ -28,6 +28,7 @@ const InteractionFlow = () => {
const [zoomOnDoubleClick, setZoomOnDoubleClick] = useState(false); const [zoomOnDoubleClick, setZoomOnDoubleClick] = useState(false);
const [paneMoveable, setPaneMoveable] = useState(true); const [paneMoveable, setPaneMoveable] = useState(true);
const [captureZoomClick, setCaptureZoomClick] = useState(false); const [captureZoomClick, setCaptureZoomClick] = useState(false);
const [captureElementClick, setCaptureElementClick] = useState(false);
return ( return (
<ReactFlow <ReactFlow
@@ -38,7 +39,7 @@ const InteractionFlow = () => {
zoomOnScroll={zoomOnScroll} zoomOnScroll={zoomOnScroll}
zoomOnDoubleClick={zoomOnDoubleClick} zoomOnDoubleClick={zoomOnDoubleClick}
onConnect={onConnect} onConnect={onConnect}
onElementClick={onElementClick} onElementClick={captureElementClick ? onElementClick : undefined}
onNodeDragStart={onNodeDragStart} onNodeDragStart={onNodeDragStart}
onNodeDragStop={onNodeDragStop} onNodeDragStop={onNodeDragStop}
paneMoveable={paneMoveable} paneMoveable={paneMoveable}
@@ -133,6 +134,18 @@ const InteractionFlow = () => {
/> />
</label> </label>
</div> </div>
<div>
<label htmlFor="captureelementclick">
capture element click
<input
id="captureelementclick"
type="checkbox"
checked={captureElementClick}
onChange={(event) => setCaptureElementClick(event.target.checked)}
className="react-flow__captureelementclick"
/>
</label>
</div>
</div> </div>
</ReactFlow> </ReactFlow>
); );
+3 -5
View File
@@ -53,15 +53,13 @@ export default (EdgeComponent: ComponentType<EdgeCompProps>) => {
const edgeClasses = cc(['react-flow__edge', `react-flow__edge-${type}`, className, { selected, animated }]); const edgeClasses = cc(['react-flow__edge', `react-flow__edge-${type}`, className, { selected, animated }]);
const edgeGroupStyle: CSSProperties = { const edgeGroupStyle: CSSProperties = {
pointerEvents: elementsSelectable ? 'all' : 'none', pointerEvents: elementsSelectable || onClick ? 'all' : 'none',
}; };
const onEdgeClick = (event: React.MouseEvent<SVGGElement, MouseEvent>): void => { const onEdgeClick = (event: React.MouseEvent<SVGGElement, MouseEvent>): void => {
if (!elementsSelectable) { if (elementsSelectable) {
return; setSelectedElements({ id, source, target });
} }
setSelectedElements({ id, source, target });
if (onClick) { if (onClick) {
const edgeElement: Edge = { id, source, target, type }; const edgeElement: Edge = { id, source, target, type };
+4 -4
View File
@@ -241,10 +241,10 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
(event: MouseEvent) => { (event: MouseEvent) => {
if (!isDraggable && isSelectable) { if (!isDraggable && isSelectable) {
setSelectedElements({ id: node.id, type: node.type } as Node); setSelectedElements({ id: node.id, type: node.type } as Node);
}
if (onClick) { if (onClick) {
onClick(event, node); onClick(event, node);
}
} }
}, },
[isSelectable, isDraggable, node] [isSelectable, isDraggable, node]
@@ -279,7 +279,7 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
const nodeStyle: CSSProperties = { const nodeStyle: CSSProperties = {
zIndex: selected ? 10 : 3, zIndex: selected ? 10 : 3,
transform: `translate(${xPos}px,${yPos}px)`, transform: `translate(${xPos}px,${yPos}px)`,
pointerEvents: isSelectable || isDraggable ? 'all' : 'none', pointerEvents: isSelectable || isDraggable || onClick ? 'all' : 'none',
...style, ...style,
}; };