in src/UXClient/Components/EventsTable/EventsTable.ts [229:299]
private buildHeaders (filteredColumnKeys, focusedHeader = null) {
let longAndDoubleExist = (propertyKey) => {
let propertyName = this.eventsTableData.columns[propertyKey].name;
return this.eventsTableData.columns.hasOwnProperty(propertyName + "_Long") && this.eventsTableData.columns.hasOwnProperty(propertyName + "_Double")
}
this.eventsTable.select(".tsi-columnHeaders").html("");
var self = this;
var columnHeaders = this.eventsTable.select(".tsi-columnHeaders").selectAll(".tsi-columnHeader")
.data(filteredColumnKeys);
var isOffsetDateTimeColumn = (d: string) => d.includes('timestamp') && (d.includes('') || d.includes('-')) && !d.includes('$ts') ? true : null
var columnHeadersEntered = columnHeaders.enter()
.append("div")
.classed("tsi-columnHeader", true)
.classed("tsi-columnHeaderDisabled", isOffsetDateTimeColumn)
.each( function(d: string) {
d3.select(this).append("span")
.classed("tsi-columnHeaderName", true)
.classed("moreMarginRight", (d: any) => self.eventsTableData.columns[d].isTsid)
.text(longAndDoubleExist(d) ? `${self.eventsTableData.columns[d].name} (${self.eventsTableData.columns[d].type})` : self.eventsTableData.columns[d].name);
d3.select(this).append("span").attr("class", "tsi-columnSortIcon").classed("moreRight", self.eventsTableData.columns[d].isTsid)
.classed("up", (self.sortColumn == d && self.isAscending))
.classed("down", (self.sortColumn == d && !self.isAscending));
if (self.eventsTableData.columns[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(self.eventsTableData.columns[d].type, true);
} else {
d3.select(this).append("span").attr("class", "tsi-columnTypeIcon")
.classed(self.eventsTableData.columns[d].type, true);
}
var id = JSON.parse(JSON.stringify(d));
d3.select(this).append("button").attr("class", "tsi-sortColumnButton")
.attr("aria-label", title => "Sort by column " + title)
.on("click", function (f, i) {
//set sort column and direction
if (self.sortColumn == d) {
self.isAscending = !self.isAscending;
} else {
self.isAscending = false;
}
self.sortColumn = d;
self.eventsTableData.sortEvents(d, self.isAscending);
self.buildTable(f);
self.eventsTable.select('.tsi-columnHeaders').node().scrollLeft =
self.eventsTable.select('.tsi-eventRowsContainer').node().scrollLeft;
})
.attr("disabled", isOffsetDateTimeColumn);
});
var widthDictionary = {};
columnHeadersEntered.each(function (d) {
widthDictionary[d] = d3.select(this).node().getBoundingClientRect().width;
})
columnHeaders.exit().remove();
if (focusedHeader !== null) {
let columnHeader = d3.select(columnHeadersEntered.filter((d) => {
return d === focusedHeader;
}).nodes()[0]);
if (columnHeader) {
(<any>columnHeader.select("button").node()).focus();
}
}
return widthDictionary;
}