devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
79 lines (78 loc) • 2.52 kB
JavaScript
/**
* DevExtreme (esm/__internal/viz/funnel/tracker.js)
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
isDefined
} from "../../../core/utils/type";
import {
Tracker
} from "../../viz/components/tracker";
import Funnel from "../../viz/funnel/funnel";
const DATA_KEY_BASE = "__funnel_data_";
let dataKeyModifier = 0;
const proto = Funnel.prototype;
proto._eventsMap.onItemClick = {
name: "itemClick"
};
proto._eventsMap.onLegendClick = {
name: "legendClick"
};
const getDataKey = function() {
return DATA_KEY_BASE + dataKeyModifier++
};
export const plugin = {
name: "tracker",
init() {
const that = this;
const dataKey = getDataKey();
const getProxyData = function(e) {
const rootOffset = that._renderer.getRootOffset();
const x = Math.floor(e.pageX - rootOffset.left);
const y = Math.floor(e.pageY - rootOffset.top);
return that._hitTestTargets(x, y)
};
that._tracker = new Tracker({
widget: that,
root: that._renderer.root,
getData(e, tooltipData) {
const target = e.target;
const data = target[dataKey];
if (isDefined(data)) {
return data
}
const proxyData = getProxyData(e);
if (tooltipData && proxyData && "inside-label" !== proxyData.type) {
return
}
return proxyData && proxyData.id
},
getNode: index => that._items[index],
click(e) {
const proxyData = getProxyData(e.event);
const dataType = proxyData && proxyData.type;
const event = "legend" === dataType ? "legendClick" : "itemClick";
that._eventTrigger(event, {
item: e.node,
event: e.event
})
}
});
this._dataKey = dataKey
},
dispose() {
this._tracker.dispose()
},
extenders: {
_change_TILING() {
const dataKey = this._dataKey;
this._items.forEach(((item, index) => {
item.element.data(dataKey, index)
}))
}
}
};