class TableVisualiser {
constructor(element, options) {
this.element = element;
this.options = options;
}
show() {
const data = this.options.data;
const columns = this.options.columns;
const wrapper = document.createElement("div");
wrapper.className = "table-wrapper";
wrapper.style.cssText = "overflow-x: scroll; padding: 10px 0 10px 10px";
const style = document.createElement("style");
style.appendChild(document.createTextNode(tableStyle));
wrapper.appendChild(style);
const tableWrapper = document.createElement("div");
tableWrapper.style.cssText = "display: flex";
const table = document.createElement("table");
table.style.cssText = "flex: 1 1 auto";
const tableRightPadding = document.createElement("div");
tableRightPadding.style.cssText = "flex: 0 0 10px";
const header = document.createElement("tr");
for (const column of columns) {
const th = document.createElement("th");
th.style.cssText = buildCellStyle(column);
const text = document.createTextNode(column.label);
th.append(text);
header.appendChild(th);
}
table.appendChild(header);
for (const record of data) {
const row = document.createElement("tr");
for (const column of columns) {
const td = document.createElement("td");
td.style.cssText = buildCellStyle(column);
let text;
if (typeof column.source === "function") {
text = document.createTextNode(
formatCellValue(column, column.source(record, column))
);
} else {
text = document.createTextNode(
formatCellValue(column, record[column.source])
);
}
td.appendChild(text);
row.appendChild(td);
}
table.appendChild(row);
}
tableWrapper.appendChild(table);
tableWrapper.appendChild(tableRightPadding);
wrapper.appendChild(tableWrapper);
this.element.replaceChildren(wrapper);
return this;
}
resize(items) {
return this;
}
}