@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
109 lines • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var _ = tslib_1.__importStar(require("@antv/util"));
// import { compare } from '../../base/controller/state';
// 对axis label和label样式进行缓存
var labels;
var originAttrs;
function onActive(plot, condition) {
if (!labels) {
getAllAxisLabels(plot);
}
_.each(labels, function (label, index) {
var _a = beforeCompare(label, condition), labelData = _a.labelData, con = _a.con;
if (compare(labelData, con)) {
var originAttr = originAttrs[index];
var disableStyle = labelActiveStyle(originAttr);
label.shape.attr(disableStyle);
}
});
}
function onDisable(plot, condition) {
if (!labels) {
getAllAxisLabels(plot);
}
_.each(labels, function (label, index) {
var _a = beforeCompare(label, condition), labelData = _a.labelData, con = _a.con;
if (compare(labelData, con)) {
var originAttr = originAttrs[index];
var disableStyle = labelDisableStyle(originAttr);
label.shape.attr(disableStyle);
}
});
}
function getAllAxisLabels(plot) {
labels = [];
originAttrs = [];
var axes = plot.view.get('axisController').axes;
_.each(axes, function (axis) {
var labelArr = [];
var scale = getScale(plot, axis);
var labelShapes = axis
.get('labelRenderer')
.get('group')
.get('children');
_.each(labelShapes, function (shape) {
if (shape.type === 'text') {
labelArr.push({ shape: shape });
originAttrs.push(shape.attr());
}
});
if (scale) {
// 取到scale values作为原始数据,避免被label format的影响
var ticks_1 = scale.ticks, field_1 = scale.field;
_.each(labelArr, function (label, index) {
label.value = ticks_1[index];
label.scaleField = field_1;
label.type = scale.type;
});
}
labels.push.apply(labels, labelArr);
});
}
// 获取坐标轴对应的scale
function getScale(plot, axis) {
var props = plot.options;
var dim = 'y';
var position = axis.get('position');
if (position === 'bottom' || position === 'top') {
dim = 'x';
}
var scaleField = props[dim + "Field"];
return plot.view.get('scales')[scaleField];
}
function beforeCompare(label, condition) {
var _a;
var labelData = (_a = {}, _a[label.scaleField] = label.value, _a);
var con = _.clone(condition);
if (label.type === 'time' && _.isObject(condition) && !_.isFunction(con.exp)) {
con.exp = new Date(con.exp).getTime();
}
return { labelData: labelData, con: con };
}
function labelDisableStyle(style) {
var opacity = style.opacity || 1;
return { opacity: opacity * 0.2 };
}
function labelActiveStyle(style) {
return { opacity: 1, fontWeight: 600, fill: 'red' };
}
function compare(origin, condition) {
if (!_.isFunction(condition)) {
var name_1 = condition.name, exp = condition.exp;
if (!origin[name_1]) {
return false;
}
if (_.isFunction(exp)) {
return exp(origin[name_1]);
}
return origin[name_1] === exp;
}
return condition(origin);
}
exports.default = {
active: onActive,
selected: onActive,
disable: onDisable,
};
//# sourceMappingURL=state.js.map