Skip to content

Commit e50f4f3

Browse files
authored
Do not apply sticky tooltip on double click (#5754)
1 parent c70f208 commit e50f4f3

3 files changed

Lines changed: 35 additions & 3 deletions

File tree

src/components/shared/chart/Canvas.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,17 @@ export class ChartCanvas<Item> extends React.Component<
327327

328328
_onDoubleClick = () => {
329329
this.props.onDoubleClickItem(this.state.hoveredItem);
330+
331+
if (this.props.stickyTooltips) {
332+
// The double click is received as a sequence of click + click + dblclick.
333+
// The each click sets the selectedItem inside _onClick.
334+
//
335+
// Unset the selectedItem here to differentiate the behavior between
336+
// the single click vs the double clicks.
337+
this.setState(() => ({
338+
selectedItem: null,
339+
}));
340+
}
330341
};
331342

332343
_getHoveredItemInfo = (): React.ReactNode => {

src/test/components/MarkerChart.test.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ describe('MarkerChart', function () {
319319
// No tooltip displayed yet
320320
expect(document.querySelector('.tooltip')).toBeFalsy();
321321

322-
function leftClick(pos: { x: CssPixels; y: CssPixels }) {
322+
function leftClick(pos: { x: CssPixels; y: CssPixels }, dblClick = false) {
323323
const positioningOptions = {
324324
offsetX: pos.x,
325325
offsetY: pos.y,
@@ -333,7 +333,7 @@ describe('MarkerChart', function () {
333333
// Because different components listen to different events, we trigger
334334
// all the right events, to be as close as possible to the real stuff.
335335
fireMouseEvent('mousemove', positioningOptions);
336-
fireFullClick(canvas, positioningOptions);
336+
fireFullClick(canvas, positioningOptions, dblClick);
337337
flushRafCalls();
338338
}
339339

@@ -365,6 +365,20 @@ describe('MarkerChart', function () {
365365

366366
// Now the tooltip should not be displayed.
367367
expect(document.querySelector('.tooltip')).toBeFalsy();
368+
369+
// The tooltip should be displayed also on double click.
370+
leftClick(position, true);
371+
372+
// Move the mouse outside of the marker.
373+
fireMouseEvent('mousemove', {
374+
offsetX: 0,
375+
offsetY: 0,
376+
pageX: 0,
377+
pageY: 0,
378+
});
379+
380+
// The double click shouldn't make the tooltip persisted.
381+
expect(document.querySelector('.tooltip')).toBeFalsy();
368382
});
369383

370384
it('only renders a single row when hovering', () => {

src/test/fixtures/utils.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,11 +491,18 @@ export function findFillTextPositionFromDrawLog(
491491
*/
492492
export function fireFullClick(
493493
element: HTMLElement,
494-
options?: FakeMouseEventInit
494+
options?: FakeMouseEventInit,
495+
dblClick?: boolean
495496
) {
496497
fireEvent(element, getMouseEvent('mousedown', options));
497498
fireEvent(element, getMouseEvent('mouseup', options));
498499
fireEvent(element, getMouseEvent('click', options));
500+
if (dblClick) {
501+
fireEvent(element, getMouseEvent('mousedown', options));
502+
fireEvent(element, getMouseEvent('mouseup', options));
503+
fireEvent(element, getMouseEvent('click', options));
504+
fireEvent(element, getMouseEvent('dblclick', options));
505+
}
499506
}
500507

501508
/**

0 commit comments

Comments
 (0)