}
if (maxDefined) {
count = _limitValue(Math.max(
- _lookupByKey(_parsed, iScale.axis, max).hi + 1,
- animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),
+ _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,
+ animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),
start, pointCount) - start;
} else {
count = pointCount - start;
* @param {array} table - the table search. must be sorted!
* @param {string} key - property name for the value in each entry
* @param {number} value - value to find
+ * @param {boolean} [last] - lookup last index
* @private
*/
-export const _lookupByKey = (table, key, value) =>
- _lookup(table, value, index => table[index][key] < value);
+export const _lookupByKey = (table, key, value, last) =>
+ _lookup(table, value, last
+ ? index => table[index][key] <= value
+ : index => table[index][key] < value);
/**
* Reverse binary search
expect(point.stop).toBe(i === 3);
}
});
+
+ it('should correctly calc visible points on update', async() => {
+ var chart = window.acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ data: [
+ {x: 10, y: 20},
+ {x: 15, y: 19},
+ ]
+ }],
+ },
+ options: {
+ scales: {
+ y: {
+ type: 'linear',
+ min: 0,
+ max: 25,
+ },
+ x: {
+ type: 'linear',
+ min: 0,
+ max: 50
+ },
+ }
+ }
+ });
+
+ chart.data.datasets[0].data = [
+ {x: 10, y: 20},
+ {x: 15, y: 19},
+ {x: 17, y: 12},
+ {x: 50, y: 9},
+ {x: 50, y: 9},
+ {x: 50, y: 9},
+ ];
+ chart.update();
+
+ var point = chart.getDatasetMeta(0).data[0];
+ var event = {
+ type: 'mousemove',
+ native: true,
+ ...point
+ };
+
+ chart._handleEvent(event, false, true);
+ }, 500);
});