/** * Checkout Labels Loading * Fetches translated labels for checkout table summary * IMPORTANT: This script waits for the cart to be loaded by website_sale.js * before rendering the checkout summary. */ (function () { "use strict"; console.log("[CHECKOUT] Script loaded"); // Get order ID from button var confirmBtn = document.getElementById("confirm-order-btn"); if (!confirmBtn) { console.log("[CHECKOUT] No confirm button found"); return; } var orderId = confirmBtn.getAttribute("data-order-id"); if (!orderId) { console.log("[CHECKOUT] No order ID found"); return; } console.log("[CHECKOUT] Order ID:", orderId); // Get summary div var summaryDiv = document.getElementById("checkout-summary"); if (!summaryDiv) { console.log("[CHECKOUT] No summary div found"); return; } // Function to fetch labels and render checkout var fetchLabelsAndRender = function () { console.log("[CHECKOUT] Fetching labels..."); // Wait for window.groupOrderShop.labels to be initialized (contains hardcoded labels) var waitForLabels = function (callback, maxWait = 3000, checkInterval = 50) { var startTime = Date.now(); var checkLabels = function () { if ( window.groupOrderShop && window.groupOrderShop.labels && Object.keys(window.groupOrderShop.labels).length > 0 ) { console.log("[CHECKOUT] ✅ Hardcoded labels found, proceeding"); callback(); } else if (Date.now() - startTime < maxWait) { setTimeout(checkLabels, checkInterval); } else { console.log("[CHECKOUT] ⚠️ Timeout waiting for labels, proceeding anyway"); callback(); } }; checkLabels(); }; waitForLabels(function () { // Now fetch additional labels from server // Detect current language from document or navigator var currentLang = document.documentElement.lang || document.documentElement.getAttribute("lang") || navigator.language || "es_ES"; console.log("[CHECKOUT] Detected language:", currentLang); fetch("/eskaera/labels", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ lang: currentLang, }), }) .then(function (response) { console.log("[CHECKOUT] Response status:", response.status); return response.json(); }) .then(function (data) { console.log("[CHECKOUT] Response data:", data); var serverLabels = data.result || data; console.log( "[CHECKOUT] Server labels count:", Object.keys(serverLabels).length ); console.log("[CHECKOUT] Sample server labels:", { draft_merged_success: serverLabels.draft_merged_success, home_delivery: serverLabels.home_delivery, }); // CRITICAL: Merge server labels with existing hardcoded labels // Hardcoded labels MUST take precedence over server labels if (window.groupOrderShop && window.groupOrderShop.labels) { var existingLabels = window.groupOrderShop.labels; console.log( "[CHECKOUT] Existing hardcoded labels count:", Object.keys(existingLabels).length ); console.log("[CHECKOUT] Sample existing labels:", { draft_merged_success: existingLabels.draft_merged_success, home_delivery: existingLabels.home_delivery, }); // Start with server labels, then overwrite with hardcoded ones var mergedLabels = Object.assign({}, serverLabels); Object.assign(mergedLabels, existingLabels); window.groupOrderShop.labels = mergedLabels; console.log( "[CHECKOUT] ✅ Merged labels - final count:", Object.keys(mergedLabels).length ); console.log("[CHECKOUT] Verification:", { draft_merged_success: mergedLabels.draft_merged_success, home_delivery: mergedLabels.home_delivery, }); } else { // If no existing labels, use server labels as fallback if (window.groupOrderShop) { window.groupOrderShop.labels = serverLabels; } console.log("[CHECKOUT] ⚠️ No existing labels, using server labels"); } window.renderCheckoutSummary(window.groupOrderShop.labels); }) .catch(function (error) { console.error("[CHECKOUT] Error:", error); // Fallback to translated labels window.renderCheckoutSummary(window.getCheckoutLabels()); }); }); }; // Listen for cart ready event instead of polling if (window.groupOrderShop && window.groupOrderShop.orderId) { // Cart already initialized, render immediately console.log("[CHECKOUT] Cart already ready"); fetchLabelsAndRender(); } else { // Wait for cart initialization event console.log("[CHECKOUT] Waiting for cart ready event..."); document.addEventListener( "groupOrderCartReady", function () { console.log("[CHECKOUT] Cart ready event received"); fetchLabelsAndRender(); }, { once: true } ); // Fallback timeout in case event never fires setTimeout(function () { if (window.groupOrderShop && window.groupOrderShop.orderId) { console.log("[CHECKOUT] Fallback timeout triggered"); fetchLabelsAndRender(); } }, 500); } /** * Render order summary table or empty message * Exposed globally so other scripts can call it */ window.renderCheckoutSummary = function (labels) { labels = labels || window.getCheckoutLabels(); var summaryDiv = document.getElementById("checkout-summary"); if (!summaryDiv) return; var cartKey = "eskaera_" + (document.getElementById("confirm-order-btn") ? document.getElementById("confirm-order-btn").getAttribute("data-order-id") : "1") + "_cart"; var cart = JSON.parse(localStorage.getItem(cartKey) || "{}"); var summaryTable = summaryDiv.querySelector(".checkout-summary-table"); var tbody = summaryDiv.querySelector("#checkout-summary-tbody"); var totalSection = summaryDiv.querySelector(".checkout-total-section"); // If no table found, create it with headers (shouldn't happen, but fallback) if (!summaryTable) { var html = '
| ' + escapeHtml(labels.product) + " | " + '' + escapeHtml(labels.quantity) + " | " + '' + escapeHtml(labels.price) + " | " + '' + escapeHtml(labels.subtotal) + " | " + '
|---|
" + escapeHtml(labels.empty) + "
" + "