2022-02-26 21:58:51 +00:00
|
|
|
"use strict";
|
|
|
|
|
2022-02-27 02:05:45 +00:00
|
|
|
import Emel from 'emel';
|
|
|
|
import fa_emel from './forkawesome_emel.mjs';
|
|
|
|
|
2022-03-10 23:09:22 +00:00
|
|
|
import ui_item_index from './ui_item_index.mjs';
|
2022-03-06 02:39:52 +00:00
|
|
|
|
2022-02-26 21:58:51 +00:00
|
|
|
class TableView {
|
|
|
|
constructor(el) {
|
2022-03-06 02:39:52 +00:00
|
|
|
if(el === null || typeof el === "undefined") throw new Error(`Expected HTML element as the first argument, but got null or undefined.`);
|
2022-02-26 21:58:51 +00:00
|
|
|
this.el = el;
|
|
|
|
this.el_parts = new Map();
|
2022-02-27 02:05:45 +00:00
|
|
|
this.emel = new Emel().emel;
|
2022-02-26 21:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
clear() {
|
|
|
|
this.el_parts.clear();
|
2022-03-06 02:39:52 +00:00
|
|
|
// No need to call this here, as evereything gets replaced instantly at the end of init()
|
|
|
|
// this.el.replaceChildren();
|
2022-02-26 21:58:51 +00:00
|
|
|
}
|
|
|
|
|
2022-02-27 02:05:45 +00:00
|
|
|
init(tabledef) {
|
|
|
|
this.clear();
|
2022-03-06 02:39:52 +00:00
|
|
|
const parts = this.emel(`h2>(${fa_emel(tabledef.icon)}+{?})^div.data-display`, {
|
2022-02-27 02:05:45 +00:00
|
|
|
placeholders: [
|
|
|
|
tabledef.name
|
|
|
|
]
|
|
|
|
});
|
2022-03-06 02:39:52 +00:00
|
|
|
const el_dataitems = parts.querySelector(".data-display");
|
2022-02-27 02:05:45 +00:00
|
|
|
for(let def of tabledef.items) {
|
2022-03-06 02:39:52 +00:00
|
|
|
let el = document.createElement("div");
|
|
|
|
el.classList.add("data-item");
|
|
|
|
el_dataitems.appendChild(el);
|
|
|
|
|
2022-03-10 23:09:22 +00:00
|
|
|
if(typeof ui_item_index[def.type] !== "undefined") {
|
|
|
|
let item_manager = new ui_item_index[def.type](el, def);
|
|
|
|
this.el_parts.set(def.name, item_manager);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
console.warn(`Unknown item definition type '${def.type}', ignoring. This is probably a bug.`);
|
2022-03-10 02:53:30 +00:00
|
|
|
}
|
2022-02-27 02:05:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
this.el.replaceChildren(parts);
|
|
|
|
}
|
|
|
|
|
2022-02-26 21:58:51 +00:00
|
|
|
async switch_table(table_name) {
|
2022-02-27 02:05:45 +00:00
|
|
|
table_name = table_name.replace(/[^a-z0-9-_]/g, "");
|
2022-02-26 21:58:51 +00:00
|
|
|
this.clear();
|
|
|
|
for await (let tabledef of await globalThis.sysquery.table(table_name)) {
|
|
|
|
this.append_table(tabledef.peer, tabledef.table);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
append_table(peer, table) {
|
2022-03-10 03:04:50 +00:00
|
|
|
for(let [ def_name, item_manager ] of this.el_parts) {
|
|
|
|
if(item_manager === null) continue;
|
|
|
|
|
|
|
|
item_manager.append(peer, table);
|
|
|
|
}
|
2022-02-26 21:58:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default TableView;
|