@visactor/vchart
Version:
charts lib based @visactor/VGrammar
57 lines (45 loc) • 2.43 kB
JavaScript
import { BaseChart } from "../base/base-chart";
import { SeriesTypeEnum } from "../../series/interface/type";
import { registerSankeySeries } from "../../series/sankey/sankey";
import { Factory } from "../../core/factory";
import { SankeyChartSpecTransformer } from "./sankey-transformer";
import { isArray } from "@visactor/vutils";
import { loadScrollbar } from "@visactor/vrender-components";
import { registerMarkTooltipProcessor } from "../../component/tooltip/processor/mark-tooltip";
import { getDatumOfGraphic } from "../../util/mark";
export class SankeyChart extends BaseChart {
constructor() {
super(...arguments), this.transformerConstructor = SankeyChartSpecTransformer, this.type = "sankey",
this.seriesType = SeriesTypeEnum.sankey;
}
_setStateInDatum(stateKey, datum, filter, region) {
const activeDatum = isArray(datum) ? datum[0] : datum;
if (!activeDatum) return void this._interaction.clearByState(stateKey);
let activeNodeOrLink = null;
this.filterGraphicsByDatum(activeDatum, {
filter: (series, mark) => "text" !== mark.type && mark.getProduct() && (!filter || filter(series, mark)),
region: region,
getDatum: e => {
var _a;
let d = null === (_a = getDatumOfGraphic(e)) || void 0 === _a ? void 0 : _a.datum;
return isArray(d) && (d = d[0]), d;
},
callback: (element, mark, s, r) => {
var _a, _b;
const id = mark.getProductId();
id && (id.includes("node") || id.includes("link")) && (null === (_b = (_a = s)._handleEmphasisElement) || void 0 === _b || _b.call(_a, {
item: element,
mark: mark
}));
},
regionCallback: (elements, r) => {
activeDatum && elements.length && (activeNodeOrLink = elements[0]);
}
}), activeNodeOrLink && this._interaction.updateStateOfGraphics(stateKey, [ activeNodeOrLink ]);
}
}
SankeyChart.type = "sankey", SankeyChart.seriesType = SeriesTypeEnum.sankey, SankeyChart.transformerConstructor = SankeyChartSpecTransformer;
export const registerSankeyChart = () => {
registerMarkTooltipProcessor(), loadScrollbar(), registerSankeySeries(), Factory.registerChart(SankeyChart.type, SankeyChart);
};
//# sourceMappingURL=sankey.js.map