UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

83 lines (75 loc) 3.5 kB
import { isArray, isEmpty, isNil } from "@visactor/vutils"; import { drillFilter, DrillEnum } from "../../data/transforms/drill"; import { getDefaultTriggerEventByMode } from "../../component/common/trigger/config"; import { findHierarchyPath } from "../../util/hierarchy"; import { ChartEvent } from "../../constant/event"; import { registerDataSetInstanceTransform } from "../../data/register"; import { ComponentTypeEnum } from "../../component/interface/type"; export class Drillable { _getDrillTriggerEvent(type) { var _a; const {mode: mode} = this._drillParams; return null === (_a = getDefaultTriggerEventByMode(mode)) || void 0 === _a ? void 0 : _a[type]; } _hideTooltip() { const tooltip = this.getChart().getComponentsByType(ComponentTypeEnum.tooltip)[0]; tooltip && tooltip.hideTooltip(); } initDrillable(params) { this._drillParams = params; } initDrillableData(dataSet) { const {getRawData: getRawData} = this._drillParams; registerDataSetInstanceTransform(dataSet, "drillFilter", 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 (isNil(e.datum) || 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 = 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 (!isArray(drillPath) || isEmpty(drillPath)) return drillPath; const dataKey = drillPath[drillPath.length - 1]; return this._drillInfo = { key: dataKey, path: drillPath, type: DrillEnum.DrillDown }, getRawData().reRunAllTransform(), event.emit(ChartEvent.drill, { value: { path: drillPath, type: 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 (!isArray(path) || isEmpty(path)) return path; const dataKey = path.pop(); return this._drillInfo = { key: dataKey, path: path, type: DrillEnum.DrillUp }, getRawData().reRunAllTransform(), event.emit(ChartEvent.drill, { value: { path: path, type: DrillEnum.DrillUp }, model: this }), path; } } //# sourceMappingURL=drillable.js.map