generalise adding of columns to table

This commit is contained in:
Wolfgang 2024-05-26 20:49:21 +02:00
parent d43ffbaefb
commit 11ad090132

View file

@ -120,21 +120,28 @@ div>label {
return Number(number) >= Number(min) && Number(number) <= Number(max);
}
function add_power(ext, row) {
for (const [key, value] of Object.entries(ext.power)) {
row["power_" + key] = value;
}
function add_column(row, cols, header) {
header.columns.forEach((col) => {
if (header.columns.includes(col)) {
if (typeof cols[col] === 'object') {
for (const [key, value] of Object.entries(cols[col])) {
row[col + '_' + key] = value;
}
} else {
row[col] = cols[col];
}
}
});
}
function update_table(bases, extensions) {
let tdata = [];
let base_header = {};
let ext_header = {};
let header = {};
// first, fill base_header
bases.forEach((base) => {
if ((typeof base.header !== "undefined") && base.header) {
base_header = structuredClone(base);
header["base"] = structuredClone(base);
}
});
@ -146,7 +153,7 @@ div>label {
// first, fill ext_header
extensions.forEach((ext) => {
if ((typeof ext.header !== "undefined") && ext.header) {
ext_header = structuredClone(ext);
header["extension"] = structuredClone(ext);
}
});
@ -154,17 +161,13 @@ div>label {
let already_added = false;
extensions.forEach((ext) => {
if ((typeof ext.header === "undefined") || (ext.header == false)) {
base_header.columns.forEach((col) => {
if (base_header.columns.includes(col)) {
row[col] = base[col];
}
});
add_column(row, base, header["base"]);
let [ext_start, ext_end] = ext.frequency.split('-');
if (typeof base.frequency === "number") {
// at single frequency
if (isInRange(base.frequency, ext_start, ext_end)) {
add_power(ext, row);
add_column(row, ext, header["extension"]);
} else {
return;
}
@ -173,7 +176,7 @@ div>label {
let [base_start, base_end] = base.frequency.split('-');
if (isInRange(base_start, ext_start, ext_end) && isInRange(base_end, ext_start, ext_end)) {
// base range is inside of ext range or the same
add_power(ext, row);
add_column(row, ext, header["extension"]);
} else {
// base range is split by ext range
if (isInRange(ext_start, base_start, base_end)) {
@ -182,7 +185,7 @@ div>label {
let start = ext_start;
let end = base_end < ext_end ? base_end : ext_end;
r["frequency"] = start + '-' + end;
add_power(ext, r);
add_column(r, ext, header["extension"]);
tdata.push(r);
already_added = true;
} else if (isInRange(ext_end, base_start, base_end)) {
@ -191,7 +194,7 @@ div>label {
let start = base_start;
let end = ext_end;
r["frequency"] = start + '-' + end;
add_power(ext, r);
add_column(r, ext, header["extension"]);
tdata.push(r);
already_added = true;
}
@ -232,11 +235,11 @@ div>label {
column.headerFilter = "input";
column.headerFilterFunc = filter_with_not;
if (typeof base_header.titles[column.field] !== "undefined") {
column.title = base_header.titles[column.field];
if (typeof header["base"].titles[column.field] !== "undefined") {
column.title = header["base"].titles[column.field];
}
if (typeof ext_header.titles[column.field] !== "undefined") {
column.title = ext_header.titles[column.field];
if (typeof header["extension"].titles[column.field] !== "undefined") {
column.title = header["extension"].titles[column.field];
}
});