UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

81 lines (76 loc) 3.72 kB
"use strict"; 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