Fix the report's transfer rows rendering as text

The report builds its excluded rows as a group per currency -- the
transfer legs and, when a tolerance admitted one, the fee -- so its tbody
children nest two arrays deep. h flattened only one level, so each group
was stringified and the page showed "[object HTMLTableRowElement]" wherever
a period held a matched transfer. Children now flatten all the way down.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 19:25:42 +02:00
co-authored by Claude Opus 5.5
parent 7ec9976b80
commit 17428a4f51
+4 -2
View File
@@ -41,7 +41,9 @@ function blankTransfer() {
// --- plumbing ------------------------------------------------------------- // --- plumbing -------------------------------------------------------------
// h builds an element. Text always goes in as a text node, never as HTML, // h builds an element. Text always goes in as a text node, never as HTML,
// since descriptions come straight off bank statements. // since descriptions come straight off bank statements. Children flatten all
// the way down: a map that yields a group of rows — the report's transfers
// and their fee — would otherwise be stringified into the page.
function h(tag, attrs, ...children) { function h(tag, attrs, ...children) {
const el = document.createElement(tag); const el = document.createElement(tag);
for (const [k, v] of Object.entries(attrs || {})) { for (const [k, v] of Object.entries(attrs || {})) {
@@ -51,7 +53,7 @@ function h(tag, attrs, ...children) {
else if (k === 'value') el.value = v; else if (k === 'value') el.value = v;
else el.setAttribute(k, v === true ? '' : v); else el.setAttribute(k, v === true ? '' : v);
} }
for (const c of children.flat()) { for (const c of children.flat(Infinity)) {
if (c === null || c === undefined || c === false) continue; if (c === null || c === undefined || c === false) continue;
el.append(c instanceof Node ? c : document.createTextNode(String(c))); el.append(c instanceof Node ? c : document.createTextNode(String(c)));
} }