@visactor/vchart
Version:
charts lib based @visactor/VGrammar
101 lines (91 loc) • 5.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.getAxis = exports.getDimensionData = exports.isSameDimensionInfo = exports.isInRegionBound = void 0;
const vutils_1 = require("@visactor/vutils"), vscale_1 = require("@visactor/vscale"), isInBound = (pos, min, max) => pos.x >= min.x && pos.x <= max.x && pos.y >= min.y && pos.y <= max.y, isInRegionBound = (chart, axis, pos) => {
const regionList = chart.getRegionsInIds((0, vutils_1.array)(axis.layout.layoutBindRegionID));
return null == regionList ? void 0 : regionList.some((region => {
const rect = region.getLayoutRect(), startPoint = region.getLayoutStartPoint();
return isInBound(pos, {
x: startPoint.x,
y: startPoint.y
}, {
x: rect.width + startPoint.x,
y: rect.height + startPoint.y
});
}));
};
exports.isInRegionBound = isInRegionBound;
const isSameDimensionInfo = (a, b) => {
var _a, _b;
return a === b || !(0, vutils_1.isNil)(a) && !(0, vutils_1.isNil)(b) && (a.value === b.value && (null === (_a = a.axis) || void 0 === _a ? void 0 : _a.id) === (null === (_b = b.axis) || void 0 === _b ? void 0 : _b.id));
};
exports.isSameDimensionInfo = isSameDimensionInfo;
const resolveTooltipFilterRange = (spec, scale) => {
const range = spec.tooltipFilterRange, rangeValue = "function" == typeof range ? range({
scale: scale
}) : range;
return (0, vutils_1.isValidNumber)(rangeValue) ? [ -rangeValue, rangeValue ] : rangeValue;
}, getDimensionData = (value, axis, coordinate, getDimensionField) => {
var _a;
const scale = axis.getScale(), isDiscreteAxis = (0, vscale_1.isDiscrete)(scale.type), data = [], seriesList = axis.getOption().getChart().getSeriesInIndex(axis.getSpecInfo().seriesIndexes);
for (const series of seriesList) if (series.coordinate === coordinate) {
const dimensionField = (0, vutils_1.array)(getDimensionField(series)), viewData = null === (_a = series.getViewData()) || void 0 === _a ? void 0 : _a.latestData;
if (dimensionField && viewData) if (isDiscreteAxis) {
const datums = [], datumIdList = [];
viewData.forEach(((datum, i) => {
var _a;
(null === (_a = datum[dimensionField[0]]) || void 0 === _a ? void 0 : _a.toString()) === (null == value ? void 0 : value.toString()) && (datums.push(datum),
datumIdList.push(i));
})), data.push({
series: series,
datum: datums,
key: getDimensionDataKey(series, datumIdList)
});
} else if ((0, vutils_1.isValid)(dimensionField[1])) {
const datums = [], datumIdList = [];
viewData.forEach(((datum, i) => {
var _a;
((null === (_a = datum[dimensionField[0]]) || void 0 === _a ? void 0 : _a.toString()) === (null == value ? void 0 : value.toString()) || (0,
vutils_1.isValid)(datum[dimensionField[0]]) && (0, vutils_1.isValid)(datum[dimensionField[1]]) && value >= datum[dimensionField[0]] && value < datum[dimensionField[1]]) && (datums.push(datum),
datumIdList.push(i));
})), data.push({
series: series,
datum: datums,
key: getDimensionDataKey(series, datumIdList)
});
} else {
const spec = axis.getSpec(), rangeArr = resolveTooltipFilterRange(spec, scale);
let datums = [], datumIdList = [];
if (rangeArr) viewData.forEach(((datum, i) => {
if ((0, vutils_1.isValid)(datum[dimensionField[0]])) {
const delta = datum[dimensionField[0]] - value;
delta >= rangeArr[0] && delta <= rangeArr[1] && (datums.push(datum), datumIdList.push(i));
}
})); else {
let minDelta = 1 / 0, deltaSign = 0;
viewData.forEach(((datum, i) => {
if ((0, vutils_1.isValid)(datum[dimensionField[0]])) {
const delta = Math.abs(datum[dimensionField[0]] - value), sign = Math.sign(datum[dimensionField[0]] - value);
delta < minDelta ? (minDelta = delta, datums = [ datum ], datumIdList = [ i ], deltaSign = sign) : delta === minDelta && sign === deltaSign && (datums.push(datum),
datumIdList.push(i));
}
}));
}
data.push({
series: series,
datum: datums,
key: getDimensionDataKey(series, datumIdList)
});
}
}
return data;
};
exports.getDimensionData = getDimensionData;
const getDimensionDataKey = (series, datumIdList) => `${series.id}_${datumIdList.join("_")}`, getAxis = (chart, filter, pos) => {
const axesComponents = chart.getAllComponents().filter((c => "axes" === c.specKey && filter(c) && (0,
exports.isInRegionBound)(chart, c, pos)));
return axesComponents.length ? axesComponents : null;
};
exports.getAxis = getAxis;
//# sourceMappingURL=common.js.map