updaed javascript to update on row delete

This commit is contained in:
2026-03-07 21:59:33 -05:00
parent 151bbf2d7f
commit 5039e2fcc7

View File

@@ -1,8 +1,19 @@
function updateLineItemTotals() {
let grandTotal = 0;
document.querySelectorAll(".line-item").forEach(function(row){
// 1. Look for the Rails _destroy hidden field
let destroyInput = row.querySelector("input[name*='[_destroy]']");
let isDestroyed = destroyInput && (destroyInput.value === "1" || destroyInput.value === "true");
// 2. Safely check if the row is hidden via CSS, without relying on physical layout
let isHidden = row.style.display === "none" || window.getComputedStyle(row).display === "none";
// If it's deleted or explicitly hidden, skip calculating it
if (isDestroyed || isHidden) {
return;
}
let qty = parseFloat(row.querySelector(".qty-field")?.value || 0);
let price = parseFloat(row.querySelector(".price-field")?.value || 0);
@@ -24,17 +35,24 @@ function updateLineItemTotals() {
}
}
// Recalculate on input changes
document.addEventListener("input", function(e){
if(e.target.classList.contains("qty-field") ||
e.target.classList.contains("price-field")){
updateLineItemTotals();
}
});
// Recalculate when the remove button is clicked
document.addEventListener("click", function(e){
let removeBtn = e.target.closest("[data-nested-form-remove]");
if(removeBtn){
setTimeout(updateLineItemTotals, 10);
}
});
// Initial calculation on load
document.addEventListener("DOMContentLoaded", function(){
updateLineItemTotals();
});