in src/UXClient/Components/EventsTable/EventsTable.ts [99:183]
public renderLegend() {
this.eventsLegend.html("");
this.eventsLegend.append("ul");
var columns = this.eventsTableData.sortColumnKeys()
.map((cIdx) => this.eventsTableData.columns[cIdx]);
this.setSelectAllState();
if (columns.length > 2) { // tristate - all selected
var selectAllColumns = this.eventsLegend.select("ul")
.append("li").attr("class", "tsi-selectAllColumns");
selectAllColumns.append("button").attr("class", "tsi-columnToggleButton")
.attr("aria-label", () => {
var selectAllState = this.getSelectAllState();
return selectAllState !== "all" ? this.getString("Toggle all columns") : this.getString("Toggle all columns");
})
.on("click", () => {
var setAllVisible: boolean = false;
var selectAllState = this.getSelectAllState();
if (selectAllState != "all") {
setAllVisible = true;
}
Object.keys(this.eventsTableData.columns).forEach((columnKey) => {
if (setAllVisible) {
this.eventsTableData.columns[columnKey].visible = true;
} else {
if (columnKey != this.timestampColumnName)
this.eventsTableData.columns[columnKey].visible = false;
}
});
this.setLegendColumnStates();
this.buildTable();
});
selectAllColumns.append("span").attr("class", "tsi-columnToggleCheckbox");
selectAllColumns.append("span").attr("class", "tsi-selectAllSomeState");
selectAllColumns.append("span").attr("class", "tsi-columnToggleName")
.text(this.getString("All Columns"));
}
var toggleableColumnLis = this.eventsLegend.select("ul").selectAll(".tsi-columnToggle")
.data(columns);
var toggleableColumnLisEntered = toggleableColumnLis.enter()
.append("li")
.classed("tsi-columnToggle", true)
.merge(toggleableColumnLis)
var self = this;
toggleableColumnLisEntered.each(function (d) {
d3.select(this).append("button").attr("class", "tsi-columnToggleButton")
.attr("aria-label", (d: any) => "toggle column " + d.key)
.on("click", (d: any) => {
d.visible = !d.visible;
self.setLegendColumnStates();
self.buildTable();
});
d3.select(this).append("div").attr("class", "tsi-columnToggleCheckbox");
if (d.isTsid) {
let typeIconCOntainer = d3.select(this).append("div").attr("class", "tsi-columnTypeIcons");
typeIconCOntainer.append("span").attr("class", "tsi-columnTypeIcon")
.classed("tsid", true).attr("title", self.getString("Time Series ID"));
typeIconCOntainer.append("span").attr("class", "tsi-columnTypeIcon")
.classed(d.type, true);
} else {
d3.select(this).append("div").attr("class", "tsi-columnTypeIcon")
.classed(d.type, true);
}
d3.select(this).select("button").append("div").attr("class", "tsi-onlyLabel").text(self.getString("only"))
.attr('tabindex', "0")
.attr('role', 'button')
.on("click", (d: any) => {
d3.event.stopPropagation();
columns.forEach((column: any) => {
if (column.key == d.key)
column.visible = true;
else
column.visible = false;
});
self.setLegendColumnStates();
self.buildTable();
})
d3.select(this).append("div").attr("class", "tsi-columnToggleName").classed('tsidPropertyName', (d: any) => d.isTsid).text((d : any) => columns.filter(c => c.name === d.name).length > 1 ? `${d.name} (${d.type})` : d.name);
});
this.setLegendColumnStates();
toggleableColumnLis.exit().remove();
}