diff --git a/package/share/ahriman/templates/build-status/table.jinja2 b/package/share/ahriman/templates/build-status/table.jinja2 index 5ef08215..32ec113f 100644 --- a/package/share/ahriman/templates/build-status/table.jinja2 +++ b/package/share/ahriman/templates/build-status/table.jinja2 @@ -87,7 +87,7 @@ }; }); - updateTable(table, payload); + updateTable(table, payload, row => row.timestamp); table.bootstrapTable("hideLoading"); }, onFailure, diff --git a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 index 4d8bf0c3..7fc57103 100644 --- a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 +++ b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 @@ -195,16 +195,19 @@ return intervalId; } - function updateTable(table, rows) { + function updateTable(table, rows, rowChangedKey) { // instead of using load method here, we just update rows manually to avoid table reinitialization const currentData = table.bootstrapTable("getData").reduce((accumulator, row) => { - accumulator[row.id] = row["0"]; + accumulator[row.id] = {state: row["0"], key: rowChangedKey(row)}; return accumulator; }, {}); - // insert or update rows + // insert or update rows, skipping ones whose status hasn't changed rows.forEach(row => { if (Object.hasOwn(currentData, row.id)) { - row["0"] = currentData[row.id]; // copy checkbox state + if (rowChangedKey(row) === currentData[row.id].key) { + return; + } + row["0"] = currentData[row.id].state; // copy checkbox state table.bootstrapTable("updateByUniqueId", { id: row.id, row: row,