@netdata/charts
Version:
Netdata frontend SDK and chart utilities
31 lines • 1.15 kB
JavaScript
export default (function (chart) {
var cachedHoverTimestamp = -1;
var cachedHoverRow = -1;
chart.invalidateClosestRowCache = function () {
cachedHoverTimestamp = -1;
cachedHoverRow = -1;
};
var getClosestRowBinary = function getClosestRowBinary(timestamp) {
var _chart$getPayload = chart.getPayload(),
data = _chart$getPayload.data;
if (data.length === 0) return -1;
if (timestamp < data[0][0]) return 0;
if (timestamp > data[data.length - 1][0]) return data.length - 1;
var start = 0;
var end = data.length - 1;
var closest = 0;
while (start <= end) {
var mid = Math.floor((start + end) / 2);
if (Math.abs(data[mid][0] - timestamp) < Math.abs(data[closest][0] - timestamp)) closest = mid;
if (data[mid][0] === timestamp) return mid;
if (data[mid][0] < timestamp) start = mid + 1;else end = mid - 1;
}
return closest;
};
chart.getClosestRow = function (timestamp) {
if (cachedHoverTimestamp === timestamp) return cachedHoverRow;
cachedHoverTimestamp = timestamp;
cachedHoverRow = getClosestRowBinary(timestamp);
return cachedHoverRow;
};
});