@visactor/vchart
Version:
charts lib based @visactor/VGrammar
75 lines (67 loc) • 2.84 kB
JavaScript
import { layoutByValue, layoutCrosshair } from "../../../../component/crosshair/utils/cartesian";
import { isFunction, isNumber, isObject, isValid } from "@visactor/vutils";
export const getActualTooltipPositionValue = (position, event) => {
let result;
if (isValid(position)) if (isNumber(position)) result = position; else if (isFunction(position)) {
const tooltipPosition = position(event);
isNumber(tooltipPosition) && (result = tooltipPosition);
}
return result;
};
export const positionType = {
left: [ -2, 0 ],
right: [ 2, 0 ],
top: [ 0, -2 ],
lt: [ -2, -2 ],
tl: [ -2, -2 ],
rt: [ 2, -2 ],
tr: [ 2, -2 ],
bottom: [ 0, 2 ],
bl: [ -2, 2 ],
lb: [ -2, 2 ],
br: [ 2, 2 ],
rb: [ 2, 2 ],
inside: [ 0, 0 ],
center: [ 0, 0 ],
centerBottom: [ 0, 1 ],
centerTop: [ 0, -1 ],
centerLeft: [ -1, 0 ],
centerRight: [ 1, 0 ]
};
export const getPositionType = (position, dim, defaultCase = 2) => {
var _a, _b;
return null !== (_b = null === (_a = positionType[position]) || void 0 === _a ? void 0 : _a["x" === dim ? 0 : 1]) && void 0 !== _b ? _b : defaultCase;
};
export const getCartesianCrosshairRect = (dimensionData, layoutStartPoint) => {
var _a;
const currValueX = new Map, currValueY = new Map, {series: series, datum: datum} = dimensionData, isHorizontal = "horizontal" === series.direction, axisId = (isHorizontal ? series.getYAxisHelper() : series.getXAxisHelper()).getAxisId(), axis = series.getChart().getComponentsByKey("axes").find((axis => axis.id === axisId));
if (!axis) return;
(isHorizontal ? currValueY : currValueX).set(axis.getSpecIndex(), {
datum: null === (_a = series.getDatumPositionValues(datum[0], series.getDimensionField())) || void 0 === _a ? void 0 : _a[0],
axis: axis
});
const state = {
xField: {
coordKey: "x",
anotherAxisKey: "y",
currentValue: currValueX,
attributes: {
visible: !!currValueX.size,
type: "rect"
}
},
yField: {
coordKey: "y",
anotherAxisKey: "x",
currentValue: currValueY,
attributes: {
visible: !!currValueY.size,
type: "rect"
}
}
};
return layoutByValue(state, series, layoutStartPoint), state.xField.cacheInfo ? layoutCrosshair(state.xField) : state.yField.cacheInfo ? layoutCrosshair(state.yField) : void 0;
};
export const isGlobalTooltipPositionPattern = obj => isObject(obj) && (isValid(obj.left) || isValid(obj.right) || isValid(obj.top) || isValid(obj.bottom));
export const isFixedTooltipPositionPattern = obj => isObject(obj) && (isValid(obj.x) || isValid(obj.y));
//# sourceMappingURL=position.js.map