[FIX] website_sale_aplicoop: wire home delivery preference through all save flows

Three bugs prevented home_delivery from reaching sale.order:

1. #home-delivery-btn (shop sidebar) had no JS handler — clicking it did
   nothing. Now it toggles active state and persists choice to sessionStorage.

2. _executeSaveCartAsDraft (Save Cart button) never included is_delivery in
   the request body. Now reads the toggle button state (or the page-level
   data-home-delivery-enabled fallback) and sends is_delivery correctly.

3. #home-delivery-checkbox on checkout page was unchecked by default and
   always shown. Now it is pre-checked when group_order.home_delivery is
   True, wrapped in t-if to hide it when delivery is not configured, and
   synced bidirectionally with sessionStorage so the shop-page toggle state
   carries over to checkout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
GitHub Copilot 2026-05-20 17:57:07 +02:00
parent a1899483c5
commit 27097004fb
2 changed files with 61 additions and 2 deletions

View file

@ -806,6 +806,30 @@
});
}
// On checkout page: apply sessionStorage delivery preference to checkbox.
// The shop-page toggle may have stored a "false" preference even though
// the checkbox is checked by default in the template.
var checkoutCheckbox = document.getElementById("home-delivery-checkbox");
if (checkoutCheckbox) {
var storedDeliveryPref = sessionStorage.getItem(
"eskaera_is_delivery_" + self.orderId
);
if (storedDeliveryPref !== null) {
checkoutCheckbox.checked = storedDeliveryPref === "true";
console.log(
"[CHECKOUT] Restored delivery checkbox from sessionStorage:",
checkoutCheckbox.checked
);
}
// Sync sessionStorage when user manually changes the checkbox
checkoutCheckbox.addEventListener("change", function () {
sessionStorage.setItem(
"eskaera_is_delivery_" + self.orderId,
this.checked ? "true" : "false"
);
});
}
// Button to reload from draft (in My Cart header - cart pages)
var reloadCartBtn = document.getElementById("reload-cart-btn");
console.log("[_attachEventListeners] reload-cart-btn found:", !!reloadCartBtn);
@ -830,6 +854,28 @@
});
}
// Home-delivery toggle button (shop sidebar)
var homeDeliveryBtn = document.getElementById("home-delivery-btn");
if (homeDeliveryBtn) {
// Restore persisted preference on page load
var storedDelivery = sessionStorage.getItem(
"eskaera_is_delivery_" + self.orderId
);
if (storedDelivery === "true") {
homeDeliveryBtn.classList.add("active");
}
homeDeliveryBtn.addEventListener("click", function (e) {
e.preventDefault();
var isNowActive = !homeDeliveryBtn.classList.contains("active");
homeDeliveryBtn.classList.toggle("active", isNowActive);
sessionStorage.setItem(
"eskaera_is_delivery_" + self.orderId,
isNowActive ? "true" : "false"
);
console.log("[HOME_DELIVERY_BTN] toggled to:", isNowActive);
});
}
// Buttons to clear cart (header + footer)
var clearCartBtns = [
document.getElementById("clear-cart-btn"),
@ -1553,6 +1599,17 @@
merge_action: "replace",
};
// Include delivery preference: read from toggle button state,
// falling back to the page-level home-delivery-enabled attribute.
var deliveryBtn = document.getElementById("home-delivery-btn");
if (deliveryBtn) {
orderData.is_delivery = deliveryBtn.classList.contains("active");
} else {
var wrap = document.getElementById("wrap");
var enabledAttr = wrap && wrap.getAttribute("data-home-delivery-enabled");
orderData.is_delivery = enabledAttr === "true";
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "/eskaera/save-order", true);
xhr.setRequestHeader("Content-Type", "application/json");