@data-ui/sparkline
Version:
React + d3 library for creating sparklines
32 lines (27 loc) • 1.06 kB
JavaScript
;
exports.__esModule = true;
exports.default = findClosestDatum;
var _d3Array = require("d3-array");
var _localPoint = _interopRequireDefault(require("@vx/event/build/localPoint"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function findClosestDatum(_ref) {
var data = _ref.data,
getX = _ref.getX,
xScale = _ref.xScale,
event = _ref.event,
_ref$marginLeft = _ref.marginLeft,
marginLeft = _ref$marginLeft === void 0 ? 0 : _ref$marginLeft;
if (!event || !event.target || !event.target.ownerSVGElement) return {};
var bisect = (0, _d3Array.bisector)(getX).right;
var svgCoords = (0, _localPoint.default)(event.target.ownerSVGElement, event);
var x = svgCoords.x - marginLeft;
var dataX = xScale.invert(x);
var index = bisect(data, dataX, 1);
var d0 = data[index - 1];
var d1 = data[index];
var d = !d0 || Math.abs(dataX - getX(d0)) > Math.abs(dataX - getX(d1)) ? d1 : d0;
return {
datum: d,
index: d === d0 ? index - 1 : index
};
}