@visactor/vchart
Version:
charts lib based @visactor/VGrammar
81 lines (76 loc) • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.Drillable = void 0;
const vutils_1 = require("@visactor/vutils"), drill_1 = require("../../data/transforms/drill"), config_1 = require("../../component/common/trigger/config"), hierarchy_1 = require("../../util/hierarchy"), event_1 = require("../../constant/event"), register_1 = require("../../data/register"), type_1 = require("../../component/interface/type");
class Drillable {
_getDrillTriggerEvent(type) {
var _a;
const {mode: mode} = this._drillParams;
return null === (_a = (0, config_1.getDefaultTriggerEventByMode)(mode)) || void 0 === _a ? void 0 : _a[type];
}
_hideTooltip() {
const tooltip = this.getChart().getComponentsByType(type_1.ComponentTypeEnum.tooltip)[0];
tooltip && tooltip.hideTooltip();
}
initDrillable(params) {
this._drillParams = params;
}
initDrillableData(dataSet) {
const {getRawData: getRawData} = this._drillParams;
(0, register_1.registerDataSetInstanceTransform)(dataSet, "drillFilter", drill_1.drillFilter),
getRawData().transform({
type: "drillFilter",
options: {
info: () => this._drillInfo,
keyField: () => this._drillParams.drillField()
}
});
}
bindDrillEvent() {
const {event: event, getRawData: getRawData, drillField: drillField} = this._drillParams, keyField = drillField();
this._getDrillTriggerEvent("start") && event.on(this._getDrillTriggerEvent("start"), (e => {
var _a, _b, _c;
if ((0, vutils_1.isNil)(e.datum) || (0, vutils_1.isNil)(null === (_a = e.datum) || void 0 === _a ? void 0 : _a[keyField])) return void this.drillUp();
this._hideTooltip();
const dataKey = e.datum[keyField], selectPath = null !== (_c = null === (_b = this._drillInfo) || void 0 === _b ? void 0 : _b.path) && void 0 !== _c ? _c : [], clickedPath = (0,
hierarchy_1.findHierarchyPath)(getRawData().rawData, dataKey, keyField, "children");
selectPath[selectPath.length - 1] === clickedPath[clickedPath.length - 1] ? this.drillUp() : this.drillDown(clickedPath);
}));
}
drillDown(drillPath = []) {
const {getRawData: getRawData, event: event} = this._drillParams;
if (!(0, vutils_1.isArray)(drillPath) || (0, vutils_1.isEmpty)(drillPath)) return drillPath;
const dataKey = drillPath[drillPath.length - 1];
return this._drillInfo = {
key: dataKey,
path: drillPath,
type: drill_1.DrillEnum.DrillDown
}, getRawData().reRunAllTransform(), event.emit(event_1.ChartEvent.drill, {
value: {
path: drillPath,
type: drill_1.DrillEnum.DrillDown
},
model: this
}), drillPath;
}
drillUp() {
var _a, _b;
const {getRawData: getRawData, event: event} = this._drillParams, path = null !== (_b = null === (_a = this._drillInfo) || void 0 === _a ? void 0 : _a.path) && void 0 !== _b ? _b : [];
if (!(0, vutils_1.isArray)(path) || (0, vutils_1.isEmpty)(path)) return path;
const dataKey = path.pop();
return this._drillInfo = {
key: dataKey,
path: path,
type: drill_1.DrillEnum.DrillUp
}, getRawData().reRunAllTransform(), event.emit(event_1.ChartEvent.drill, {
value: {
path: path,
type: drill_1.DrillEnum.DrillUp
},
model: this
}), path;
}
}
exports.Drillable = Drillable;
//# sourceMappingURL=drillable.js.map