VizTooltip: Fix positioning at bottom and right edges on mobile (#92042)

This commit is contained in:
Leon Sorokin 2024-08-20 08:48:37 -05:00 committed by GitHub
parent d35e9264bb
commit 74ebc66520
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -313,8 +313,10 @@ export const TooltipPlugin2 = ({
}
// only pinnable tooltip is visible *and* is within proximity to series/point
else if (_isHovering && closestSeriesIdx != null && !_isPinned) {
_isPinned = true;
scheduleRender(true);
setTimeout(() => {
_isPinned = true;
scheduleRender(true);
}, 0);
}
}
});
@ -608,14 +610,29 @@ export const TooltipPlugin2 = ({
size.width = width;
size.height = height;
const event = plot!.cursor.event;
let event = plot!.cursor.event;
// if not viaSync, re-dispatch real event
if (event != null) {
// we expect to re-dispatch mousemove, but on mobile we'll get mouseup or click
const isMobile = event.type !== 'mousemove';
if (isMobile) {
event = new MouseEvent('mousemove', {
view: window,
bubbles: true,
cancelable: true,
clientX: event.clientX,
clientY: event.clientY,
screenX: event.screenX,
screenY: event.screenY,
});
}
// this works around the fact that uPlot does not unset cursor.event (for perf reasons)
// so if the last real mouse event was mouseleave and you manually trigger u.setCursor()
// it would end up re-dispatching mouseleave
const isStaleEvent = performance.now() - event.timeStamp > 16;
const isStaleEvent = isMobile ? false : performance.now() - event.timeStamp > 16;
!isStaleEvent && plot!.over.dispatchEvent(event);
} else {