@netdata/charts
Version:
Netdata frontend SDK and chart utilities
50 lines • 1.78 kB
JavaScript
import { getCellBoxSize, getXPosition, getYPosition, getOffsetPosition } from "./utilities";
export default (function (el, columns, total, _ref) {
var onMouseenter = _ref.onMouseenter,
onMouseout = _ref.onMouseout;
var _ref2 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
cellSize = _ref2.cellSize,
cellPadding = _ref2.cellPadding;
var hoveredIndex = -1;
var getEvent = function getEvent(index) {
var rect = el.getBoundingClientRect();
var offsetX = getXPosition(columns, index, cellSize);
var offsetY = getYPosition(columns, index, cellSize);
var left = rect.left + offsetX;
var top = rect.top + offsetY;
var cellBoxSize = getCellBoxSize(cellSize, cellPadding);
return {
index: index,
left: left,
top: top,
right: left + cellBoxSize,
bottom: top + cellBoxSize,
width: cellBoxSize,
height: cellBoxSize,
offsetX: offsetX,
offsetY: offsetY
};
};
var mouseout = function mouseout() {
onMouseout(getEvent(hoveredIndex));
hoveredIndex = -1;
};
var mousemove = function mousemove(e) {
var offsetX = e.offsetX,
offsetY = e.offsetY;
var x = getOffsetPosition(offsetX, cellSize);
var y = getOffsetPosition(offsetY, cellSize);
var nextHoveredIndex = y * columns + x;
if (nextHoveredIndex === hoveredIndex) return;
if (hoveredIndex !== -1) mouseout();
if (nextHoveredIndex >= total) return;
onMouseenter(getEvent(nextHoveredIndex));
hoveredIndex = nextHoveredIndex;
};
el.addEventListener("mousemove", mousemove);
el.addEventListener("mouseout", mouseout);
return function () {
el.removeEventListener("mousemove", mousemove);
el.removeEventListener("mouseout", mouseout);
};
});