From 5039e2fcc756a5974da191b1668020cfb8d30445 Mon Sep 17 00:00:00 2001 From: Rick Barrette Date: Sat, 7 Mar 2026 21:59:33 -0500 Subject: [PATCH] updaed javascript to update on row delete --- assets/javascripts/line_items.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/assets/javascripts/line_items.js b/assets/javascripts/line_items.js index e5a015b..02f168a 100644 --- a/assets/javascripts/line_items.js +++ b/assets/javascripts/line_items.js @@ -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(); }); \ No newline at end of file