@visactor/vchart
Version:
charts lib based @visactor/VGrammar
78 lines (70 loc) • 3.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerDimensionHover = exports.DimensionHover = void 0;
const vutils_1 = require("@visactor/vutils"), interface_1 = require("../../event/events/dimension/interface"), interface_2 = require("../../compile/mark/interface"), util_1 = require("../../util"), base_1 = require("./base"), factory_1 = require("../../core/factory"), defaultOptions = {
state: interface_2.STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,
reverseState: interface_2.STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE,
trigger: interface_1.DimensionEventEnum.dimensionHover
};
class DimensionHover extends base_1.BaseTrigger {
constructor(options) {
super(options), this.type = "dimension-hover", this._resetType = [], this.resetAll = () => {
const {state: state, reverseState: reverseState, interaction: interaction} = this.options, statedGraphics = interaction.getStatedGraphics(this);
statedGraphics && statedGraphics.length && (interaction.clearAllStatesOfTrigger(this, state, reverseState),
this.dispatchEvent("reset", {
graphics: statedGraphics,
options: this.options
}), interaction.setStatedGraphics(this, []));
}, this.handleStart = params => {
const interaction = this.options.interaction;
switch (params.action) {
case "enter":
const newStated = this.getStatedGraphics(params);
interaction.updateStates(this, this.getStatedGraphics(params), interaction.getStatedGraphics(this), this.options.state, this.options.reverseState),
interaction.setStatedGraphics(this, newStated);
break;
case "leave":
interaction.clearAllStatesOfTrigger(this, this.options.state, this.options.reverseState),
interaction.setStatedGraphics(this, []);
}
}, this.options = Object.assign({}, defaultOptions, options), this.updateMarkIdByState([ this.options.state, this.options.reverseState ]);
}
getStartState() {
return this.options.state;
}
getResetState() {
return this.options.reverseState;
}
getEvents() {
return [ {
type: this.options.trigger,
handler: this.handleStart
} ];
}
getStatedGraphics(params, reverse = !1) {
const marks = this.getMarksByState(reverse ? this.options.reverseState : this.options.state), items = [];
return params.dimensionInfo.forEach((df => {
df.data.forEach((dd => {
marks.filter((m => m.model === dd.series && m.getVisible())).forEach((m => {
const graphics = m.getGraphics();
if (!graphics || !graphics.length) return;
const elements = graphics.filter((g => {
const datum = (0, util_1.getDatumOfGraphic)(g);
let c;
return c = (0, vutils_1.isArray)(datum) ? datum.every(((oneData, i) => oneData === dd.datum[i])) : dd.datum.some((dd_d => dd_d === datum)),
reverse ? !c : c;
}));
items.push(...elements);
}));
}));
})), items;
}
}
exports.DimensionHover = DimensionHover, DimensionHover.type = "dimension-hover",
DimensionHover.defaultOptions = defaultOptions;
const registerDimensionHover = () => {
factory_1.Factory.registerInteractionTrigger(DimensionHover.type, DimensionHover);
};
exports.registerDimensionHover = registerDimensionHover;
//# sourceMappingURL=dimension-hover.js.map