@netdata/charts
Version:
Netdata frontend SDK and chart utilities
143 lines (142 loc) • 5.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _eventOffset = _interopRequireDefault(require("../../helpers/eventOffset"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
var shouldFindMaxValue = {
stacked: true,
stackedBar: true
};
var _default = exports["default"] = function _default(chartUI) {
var findClosest = function findClosest(event, points) {
if (!Array.isArray(points)) return {};
var _dygraph = chartUI.getDygraph();
var _getOffsets = (0, _eventOffset["default"])(event),
offsetX = _getOffsets.offsetX,
offsetY = _getOffsets.offsetY;
if (offsetY > _dygraph.getArea().h - 10) return {
seriesName: "ANNOTATIONS"
};
if (offsetY < 15) return {
seriesName: "ANOMALY_RATE"
};
if (shouldFindMaxValue[chartUI.chart.getAttribute("chartType")]) {
var _closestPoint$point;
var closestPoint = _dygraph.findStackedPoint(offsetX, offsetY);
if (((_closestPoint$point = closestPoint.point) === null || _closestPoint$point === void 0 ? void 0 : _closestPoint$point.canvasy) > offsetY) {
closestPoint = points.reduce(function (max, p) {
return p.yval > max.yval ? p : max;
}, {
yval: -Infinity
});
closestPoint = {
point: closestPoint,
row: closestPoint.idx,
seriesName: closestPoint.name
};
}
return closestPoint;
}
return _dygraph.findClosestPoint(offsetX, offsetY);
};
var lastX;
var lastY;
var lastPoints;
var lastTimestamp;
var getDimension = function getDimension(event, points) {
var _findClosest = findClosest(event, points),
seriesName = _findClosest.seriesName;
if (!seriesName) return;
var seriesProps = chartUI.getDygraph().getPropertiesForSeries(seriesName);
if (!seriesProps) return;
var dimensionIds = chartUI.chart.getPayloadDimensionIds();
if (!(dimensionIds !== null && dimensionIds !== void 0 && dimensionIds.length)) return;
return dimensionIds[seriesProps.column - 1] || seriesProps.name;
};
var highlight = function highlight(event, x, points) {
if (lastTimestamp === x) return;
lastPoints = points;
lastTimestamp = x;
var offsets = (0, _eventOffset["default"])(event);
lastX = offsets.offsetX;
lastY = offsets.offsetY;
var dimensionId = getDimension(event, points);
if (!dimensionId) return;
chartUI.sdk.trigger("highlightHover", chartUI.chart, x, dimensionId);
chartUI.chart.trigger("highlightHover", x, dimensionId);
};
var isNearAnnotation = function isNearAnnotation(event) {
var overlays = chartUI.chart.getAttribute("overlays");
var dygraph = chartUI.getDygraph();
var _getOffsets2 = (0, _eventOffset["default"])(event),
offsetX = _getOffsets2.offsetX;
for (var _i = 0, _Object$values = Object.values(overlays); _i < _Object$values.length; _i++) {
var overlay = _Object$values[_i];
if (overlay.type === "annotation") {
var annotationX = dygraph.toDomXCoord(overlay.timestamp * 1000);
if (Math.abs(offsetX - annotationX) < 10) {
return true;
}
}
}
return false;
};
var annotate = function annotate(event, x) {
if (isNearAnnotation(event)) return;
var existingDraft = chartUI.chart.getAttribute("draftAnnotation");
if (existingDraft && existingDraft.status === "editing") return;
chartUI.chart.updateAttribute("draftAnnotation", {
timestamp: x / 1000,
createdAt: new Date(),
status: "draft"
});
chartUI.sdk.trigger("annotationCreate", chartUI.chart, x / 1000);
chartUI.chart.trigger("annotationCreate", x / 1000);
};
var click = function click(event, x, points) {
if (lastTimestamp === x) return;
lastPoints = points;
lastTimestamp = x;
var offsets = (0, _eventOffset["default"])(event);
lastX = offsets.offsetX;
lastY = offsets.offsetY;
var dimensionId = getDimension(event, points);
annotate(event, x);
chartUI.sdk.trigger("highlightClick", chartUI.chart, x, dimensionId);
chartUI.chart.trigger("highlightClick", x, dimensionId);
};
var mousemove = function mousemove(event) {
var _getOffsets3 = (0, _eventOffset["default"])(event),
offsetX = _getOffsets3.offsetX,
offsetY = _getOffsets3.offsetY;
if (Math.abs(offsetX - lastX) < 5 && Math.abs(offsetY - lastY) < 5) return;
lastX = offsetX;
lastY = offsetY;
var dimensionId = getDimension(event, lastPoints);
if (!dimensionId) return;
chartUI.sdk.trigger("highlightHover", chartUI.chart, lastTimestamp, dimensionId);
chartUI.chart.trigger("highlightHover", lastTimestamp, dimensionId);
};
var mouseout = function mouseout() {
chartUI.sdk.trigger("highlightBlur", chartUI.chart);
chartUI.chart.trigger("highlightBlur");
};
var destroy = function destroy() {
lastY = null;
lastPoints = null;
lastTimestamp = null;
chartUI.off("highlightCallback", highlight);
chartUI.off("mousemove", mousemove);
chartUI.off("mouseout", mouseout);
chartUI.off("click", click);
};
var toggle = function toggle(enabled) {
return enabled ? chartUI.on("highlightCallback", highlight).on("mousemove", mousemove).on("mouseout", mouseout).on("click", click) : destroy();
};
return {
toggle: toggle,
destroy: destroy
};
};