(function () {
const BTN_SEL = ".pos-delete-cart";
const WRAPPER_SEL =
(window.GBC_POS_SAVED_CARTS && window.GBC_POS_SAVED_CARTS.wrapper) ||
"#gbc-saved-carts-wrapper";
function ajaxUrl() {
return (window.GBC_POS_SAVED_CARTS && window.GBC_POS_SAVED_CARTS.ajax_url)
? String(window.GBC_POS_SAVED_CARTS.ajax_url)
: (window.ajaxurl ? String(window.ajaxurl) : "/wp-admin/admin-ajax.php");
}
function nonce() {
return (window.GBC_POS_SAVED_CARTS && window.GBC_POS_SAVED_CARTS.nonce)
? String(window.GBC_POS_SAVED_CARTS.nonce)
: "";
}
function postForm(data) {
const body = new URLSearchParams();
Object.keys(data || {}).forEach((k) => body.set(k, String(data[k])));
return fetch(ajaxUrl(), {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
body: body.toString(),
credentials: "same-origin",
}).then((r) => r.json());
}
function killEvent(e) {
// ✅ verhindert Browser submit/navigation + Bricks interactions
try { e.preventDefault(); } catch(_) {}
try { e.stopPropagation(); } catch(_) {}
try { e.stopImmediatePropagation(); } catch(_) {}
}
async function refreshWrapper() {
const wrap = document.querySelector(WRAPPER_SEL);
if (!wrap) return;
const n = nonce();
if (!n) return;
const res = await postForm({
action: "gbc_pos_saved_carts_html",
nonce: n,
});
if (res && res.success && res.data && typeof res.data.html === "string") {
wrap.innerHTML = res.data.html;
} else {
console.warn("[POS] wrapper refresh failed:", res);
}
}
async function onClick(e) {
const btn = e.target.closest(BTN_SEL);
if (!btn) return;
killEvent(e);
const cartId = parseInt(btn.getAttribute("data-cart-id") || "0", 10) || 0;
if (!cartId) return;
const n = nonce();
if (!n) return;
if (btn.getAttribute("aria-busy") === "true") return;
btn.setAttribute("aria-busy", "true");
btn.classList.add("is-loading");
try {
const res = await postForm({
action: "gbc_pos_delete_saved_cart",
nonce: n,
cart_id: cartId,
});
if (!res || !res.success) {
console.warn("[POS] delete failed:", res);
return;
}
// ✅ UI aktualisieren
await refreshWrapper();
} catch (err) {
console.warn("[POS] network error:", err);
} finally {
btn.removeAttribute("aria-busy");
btn.classList.remove("is-loading");
}
}
// ✅ capture=true: wir sind VOR Bricks/Forms dran
document.addEventListener("click", onClick, true);
})();