UNPKG

@visx/xychart

Version:

Composable cartesian coordinate chart built with visx primitives

46 lines (45 loc) 2.47 kB
"use strict"; exports.__esModule = true; exports.default = findNearestGroupDatum; var _findNearestDatumX = _interopRequireDefault(require("./findNearestDatumX")); var _findNearestDatumY = _interopRequireDefault(require("./findNearestDatumY")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /** * This is a wrapper around findNearestDatumX/Y for BarGroup, accounting for a * Bar's group scale offset (which findNearestDatum does not). */ function findNearestGroupDatum(nearestDatumArgs, groupScale, horizontal) { var dataKey = nearestDatumArgs.dataKey, xAccessor = nearestDatumArgs.xAccessor, yAccessor = nearestDatumArgs.yAccessor, xScale = nearestDatumArgs.xScale, yScale = nearestDatumArgs.yScale, point = nearestDatumArgs.point; var datum = (horizontal ? _findNearestDatumY.default : _findNearestDatumX.default)(nearestDatumArgs); if (!datum || !point) return null; var barGroupOffset = groupScale(dataKey); var barWidth = groupScale.step(); if (horizontal) { var _groupPosition = yScale(yAccessor(datum.datum)); var _barStart = (_groupPosition != null ? _groupPosition : Infinity) + (barGroupOffset != null ? barGroupOffset : Infinity); var _barEnd = _barStart + barWidth; var _barMiddle = (_barStart + _barEnd) / 2; var _cursorIsOnBar = point.y >= _barStart && point.y <= _barEnd; return _extends({}, datum, { distanceX: 0, // we want all group bars to have same X distance so only Y distance matters distanceY: _cursorIsOnBar ? 0 : Math.abs(point.y - _barMiddle) }); } var groupPosition = xScale(xAccessor(datum.datum)); var barStart = (groupPosition != null ? groupPosition : Infinity) + (barGroupOffset != null ? barGroupOffset : Infinity); var barEnd = barStart + barWidth; var barMiddle = (barStart + barEnd) / 2; var cursorIsOnBar = point.x >= barStart && point.x <= barEnd; return _extends({}, datum, { distanceY: 0, // we want all group bars to have same Y distance so only X distance matters distanceX: cursorIsOnBar ? 0 : Math.abs(point.x - barMiddle) }); }