UNPKG

@amcharts/amcharts5

Version:
88 lines 3.23 kB
import { HierarchyDefaultTheme } from "./HierarchyDefaultTheme"; import { Container } from "../../core/render/Container"; import { Label } from "../../core/render/Label"; import { RoundedRectangle } from "../../core/render/RoundedRectangle"; import { Template } from "../../core/util/Template"; import { ListTemplate } from "../../core/util/List"; import * as $utils from "../../core/util/Utils"; /** * Creates a breadcrumb navigation control. * * @see {@link https://www.amcharts.com/docs/v5/charts/hierarchy/breadcrumbs/} for more info * @important */ export class BreadcrumbBar extends Container { constructor() { super(...arguments); /** * A list of labels in the bar. * * `labels.template` can be used to configure label apperance and behavior. * * @default new ListTemplate<Label> */ this.labels = this.addDisposer(new ListTemplate(Template.new({}), () => Label._new(this._root, { themeTags: $utils.mergeTags(this.labels.template.get("themeTags", []), ["label"]), background: RoundedRectangle.new(this._root, { themeTags: ["background"] }) }, [this.labels.template]))); } /** * @ignore */ makeLabel(dataItem) { const label = this.labels.make(); label._setDataItem(dataItem); label.states.create("hover", {}); label.states.create("down", {}); label.events.on("click", () => { const series = this.get("series"); if (series) { series.selectDataItem(dataItem); } }); this.labels.push(label); return label; } _afterNew() { this._defaultThemes.push(HierarchyDefaultTheme.new(this._root)); this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, ["breadcrumb"]); super._afterNew(); } _changed() { super._changed(); if (this.isDirty("series")) { if (this._disposer) { this._disposer.dispose(); this._disposer = undefined; } const series = this.get("series"); if (series) { this._disposer = series.events.on("dataitemselected", (event) => { this._handleDataItem(event.dataItem); }); this._handleDataItem(series.get("selectedDataItem")); } } } _handleDataItem(dataItem) { this._setC("minHeight", this.height()); this.children.clear(); this.labels.clear(); if (dataItem) { let parent = dataItem; while (parent) { let label = this.makeLabel(parent); if (parent == dataItem) { label.addTag("last"); } this.children.moveValue(label, 0); parent = parent.get("parent"); } } } } BreadcrumbBar.className = "BreadcrumbBar"; BreadcrumbBar.classNames = Container.classNames.concat([BreadcrumbBar.className]); //# sourceMappingURL=BreadcrumbBar.js.map