@amcharts/amcharts5
Version:
amCharts 5
96 lines • 3.07 kB
JavaScript
import { StockControl } from "./StockControl";
import { DropdownList } from "./DropdownList";
import { StockIcons } from "./StockIcons";
import * as $array from "../../../core/util/Array";
/**
* Shows selection of icons to choose from for annotating [[StockChart]].
*
* This class is instantiated automatically, and should not be used standalone.
*/
export class IconControl extends StockControl {
_afterNew() {
// Do parent stuff
super._afterNew();
// Create list of tools
const list = DropdownList.new(this._root, {
control: this,
parent: this.getPrivate("button"),
searchable: false
});
this.setPrivate("list", list);
list.getPrivate("list").className = "am5stock-control-icons";
list.events.on("closed", (_ev) => {
this.set("active", false);
});
list.events.on("invoked", (ev) => {
const item = JSON.parse(ev.item.id);
let icon;
const icons = this.get("icons");
$array.each(icons, (listIcon) => {
if (item.svgPath == listIcon.svgPath) {
icon = listIcon;
}
});
if (icon) {
this.setIcon(icon);
this.events.dispatch("selected", {
type: "selected",
icon: icon,
target: this
});
}
});
this.on("active", (active) => {
if (active) {
this.setTimeout(() => list.show(), 10);
}
else {
list.hide();
}
});
this._initIcons();
}
setIcon(icon) {
this.getPrivate("icon").innerHTML = "";
this.getPrivate("icon").appendChild(this._getDrawingIcon(icon));
//this.getPrivate("label")!.style.display = "none";
}
_initIcons() {
const list = this.getPrivate("list");
const icons = this.get("icons");
const items = [];
$array.each(icons, (icon) => {
items.push({
id: JSON.stringify(icon),
label: "",
icon: this._getDrawingIcon(icon)
});
});
list.set("items", items);
}
_getDrawingIcon(icon) {
return StockIcons._getSVG({ viewbox: "0 0 50 50", path: icon.svgPath });
}
_afterChanged() {
super._afterChanged();
if (this.isDirty("icons")) {
this._initIcons();
}
}
_dispose() {
super._dispose();
}
}
Object.defineProperty(IconControl, "className", {
enumerable: true,
configurable: true,
writable: true,
value: "IconControl"
});
Object.defineProperty(IconControl, "classNames", {
enumerable: true,
configurable: true,
writable: true,
value: StockControl.classNames.concat([IconControl.className])
});
//# sourceMappingURL=IconControl.js.map