UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

69 lines (61 loc) 3.79 kB
import { isDiscrete } from "@visactor/vscale"; import { getDimensionData, getAxis } from "./common"; import { isNil } from "@visactor/vutils"; import { isXAxis, isYAxis } from "../../../../component/axis/cartesian/util/common"; const discreteXAxisGetDimensionField = series => series.fieldX[0], discreteYAxisGetDimensionField = series => series.fieldY[0], continuousXAxisGetDimensionField = series => { var _a; return [ series.fieldX[0], null !== (_a = series.fieldX2) && void 0 !== _a ? _a : series.fieldX[1] ]; }, continuousYAxisGetDimensionField = series => { var _a; return [ series.fieldY[0], null !== (_a = series.fieldY2) && void 0 !== _a ? _a : series.fieldY[1] ]; }, getDimensionFieldFunc = (isXAxis, isDiscreteAxis) => isXAxis ? isDiscreteAxis ? discreteXAxisGetDimensionField : continuousXAxisGetDimensionField : isDiscreteAxis ? discreteYAxisGetDimensionField : continuousYAxisGetDimensionField; export const getCartesianDimensionInfo = (chart, pos, isTooltip) => { var _a, _b; if (!chart) return null; const {x: x, y: y} = pos, xAxisList = null !== (_a = getAxis(chart, (cmp => isXAxis(cmp.getOrient())), pos)) && void 0 !== _a ? _a : [], yAxisList = null !== (_b = getAxis(chart, (cmp => isYAxis(cmp.getOrient())), pos)) && void 0 !== _b ? _b : []; if (!xAxisList.length && !yAxisList.length) return null; const bandAxisSet = new Set, linearAxisSet = new Set, forceAxisSet = new Set; [ xAxisList, yAxisList ].forEach((axisList => axisList.forEach((axis => { isDiscrete(axis.getScale().type) ? bandAxisSet.add(axis) : linearAxisSet.add(axis), isTooltip && axis.getSpec().hasDimensionTooltip && forceAxisSet.add(axis); })))); const targetAxisInfo = [], addAxisDimensionInfo = orient => { const isXAxis = "x" === orient, posValue = isXAxis ? x : y; (isXAxis ? xAxisList : yAxisList).forEach((axis => { if (forceAxisSet.size > 0) { if (forceAxisSet.has(axis)) { const info = getDimensionInfoByPosition(axis, posValue, getDimensionFieldFunc(isXAxis, isDiscrete(axis.getScale().type))); info && targetAxisInfo.push(info); } } else { const hasDiscreteAxis = bandAxisSet.size > 0; if ((hasDiscreteAxis ? bandAxisSet : linearAxisSet).has(axis)) { const info = getDimensionInfoByPosition(axis, posValue, getDimensionFieldFunc(isXAxis, hasDiscreteAxis)); info && targetAxisInfo.push(info); } } })); }; return "horizontal" === chart.getSpec().direction ? (addAxisDimensionInfo("y"), 0 === targetAxisInfo.length && addAxisDimensionInfo("x")) : (addAxisDimensionInfo("x"), 0 === targetAxisInfo.length && addAxisDimensionInfo("y")), targetAxisInfo.length ? targetAxisInfo : null; }; export const getDimensionInfoByPosition = (axis, posValue, getDimensionField) => { const value = axis.positionToData(posValue, !0); return isNil(value) ? null : getDimensionInfoByValue(axis, value, getDimensionField); }; export const getDimensionInfoByValue = (axis, value, getDimensionField) => { const scale = axis.getScale(); if (isNil(value)) return null; let index = scale.domain().findIndex((v => (null == v ? void 0 : v.toString()) === value.toString())); index < 0 && (index = void 0); const data = getDimensionData(value, axis, "cartesian", null != getDimensionField ? getDimensionField : isXAxis(axis.getOrient()) ? discreteXAxisGetDimensionField : discreteYAxisGetDimensionField); return { index: index, value: value, position: scale.scale(value), axis: axis, data: data }; }; //# sourceMappingURL=cartesian.js.map