@antv/g2
Version:
the Grammar of Graphics in Javascript
101 lines • 4.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var util_1 = require("@antv/util");
var util_2 = require("../util");
var state_base_1 = tslib_1.__importDefault(require("./state-base"));
function getItem(shape) {
return (0, util_1.get)(shape.get('delegateObject'), 'item');
}
/**
* 状态量 Action 的基类,允许多个 Element 同时拥有某个状态
* @class
* @ignore
*/
var ElementState = /** @class */ (function (_super) {
tslib_1.__extends(ElementState, _super);
function ElementState() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.ignoreListItemStates = ['unchecked'];
return _this;
}
// 是否忽略触发的列表项
ElementState.prototype.isItemIgnore = function (item, list) {
var states = this.ignoreListItemStates;
var filtered = states.filter(function (state) {
return list.hasState(item, state);
});
return !!filtered.length;
};
// 设置由组件选项导致的状态变化
ElementState.prototype.setStateByComponent = function (component, item, enable) {
var view = this.context.view;
var field = component.get('field');
var elements = (0, util_2.getElements)(view);
this.setElementsStateByItem(elements, field, item, enable);
};
// 处理触发源由 element 导致的状态变化
ElementState.prototype.setStateByElement = function (element, enable) {
this.setElementState(element, enable);
};
/** 组件的选项是否同 element 匹配 */
ElementState.prototype.isMathItem = function (element, field, item) {
var view = this.context.view;
var scale = (0, util_2.getScaleByField)(view, field);
var value = (0, util_2.getElementValue)(element, field);
return !(0, util_1.isNil)(value) && item.name === scale.getText(value);
};
ElementState.prototype.setElementsStateByItem = function (elements, field, item, enable) {
var _this = this;
(0, util_1.each)(elements, function (el) {
if (_this.isMathItem(el, field, item)) {
el.setState(_this.stateName, enable);
}
});
};
/** 设置状态是否激活 */
ElementState.prototype.setStateEnable = function (enable) {
var element = (0, util_2.getCurrentElement)(this.context);
if (element) {
// 触发源由于 element 导致
if ((0, util_2.isElementChange)(this.context)) {
this.setStateByElement(element, enable);
}
}
else {
// 触发源由组件导致
var delegateObject = (0, util_2.getDelegationObject)(this.context);
// 如果触发源时列表,图例、坐标轴
if ((0, util_2.isList)(delegateObject)) {
var item = delegateObject.item, component = delegateObject.component;
if (item && component && !this.isItemIgnore(item, component)) {
var event_1 = this.context.event.gEvent;
// 防止闪烁
if (event_1 && event_1.fromShape && event_1.toShape && getItem(event_1.fromShape) === getItem(event_1.toShape)) {
return;
}
this.setStateByComponent(component, item, enable);
}
}
}
};
/**
* 切换状态
*/
ElementState.prototype.toggle = function () {
var element = (0, util_2.getCurrentElement)(this.context);
if (element) {
var hasState = element.hasState(this.stateName);
this.setElementState(element, !hasState);
}
};
/**
* 取消当前时间影响的状态
*/
ElementState.prototype.reset = function () {
this.setStateEnable(false);
};
return ElementState;
}(state_base_1.default));
exports.default = ElementState;
//# sourceMappingURL=state.js.map