public render()

in src/UXClient/Components/EllipsisMenu/EllipsisMenu.ts [57:111]


    public render (menuItems, options: any = {}) {
        this.menuIsVisible = false;
        this.chartOptions.setOptions(options);

        this.containerElement = d3.select(this.renderTarget).classed("tsi-ellipsisMenuContainer", true);
        this.setMenuItems(menuItems);
        d3.select(this.renderTarget).selectAll("*").remove();
        super.themify(this.containerElement, this.chartOptions.theme);

        let self = this;
        this.buttonElement = d3.select(this.renderTarget).insert("button")
            .attr("class", "tsi-ellipsisButton")
            .attr("aria-label", this.getString("Show ellipsis menu"))
            .attr("role", "menu")
            .attr("title", this.getString("Show ellipsis menu"))
            .attr("type", "button")
            .on("click", function () {
                d3.select(this).attr("aria-label", !self.menuIsVisible ? self.getString("Show ellipsis menu") : self.getString("Hide ellipsis menu"))
                               .attr("title", !self.menuIsVisible ? self.getString("Show ellipsis menu") : self.getString("Hide ellipsis menu"));
                self.setMenuVisibility(!self.menuIsVisible);
                if(self.menuIsVisible) {
                    self.focusOnMenuItem(0);
                }
            });
        
        this.menuElement = d3.select(this.renderTarget).insert("div")
            .attr("class", "tsi-ellipsisMenu");

        this.menuElement.selectAll(".tsi-ellipsisMenuItem").data(this.menuItems)
            .enter()
            .append("button")
            .classed("tsi-ellipsisMenuItem", true)
            .attr("aria-label", d => d.label)
            .attr("type", "button")
            .attr("role", "menuitem")
            .on('keydown', (d, i) => {this.menuItemKeyHandler(d, i)})
            .on("click", (d: any) => {
                d.action();
            })
            .each(function () {
                d3.select(this)
                    .append("div")
                    .attr("class", (d: any) => "tsi-ellipsisMenuIcon " + self.createIconPath(d.iconClass, self.chartOptions.theme));

                d3.select(this)
                    .append("div")
                    .classed("tsi-ellipsisMenuLabel", true)
                    .text((d: any) => d.label);
                    
                d3.select(this)
                    .append("div")
                    .classed("tsi-ellipsisMenuDescription", true)
                    .style("display", "none");
            });
    }