UNPKG

@antv/g2plot

Version:

G2 Plot, a market of plots built with the Grammar of Graphics'

106 lines 3.41 kB
import * as _ from '@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); } export default { active: onActive, selected: onActive, disable: onDisable, }; //# sourceMappingURL=state.js.map