(function () { function esc(value) { return String(value ?? '') .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } function formatDate(value) { if (!value) return '—'; const d = new Date(value); if (Number.isNaN(d.getTime())) return '—'; return d.toLocaleDateString('en-IN', { year: 'numeric', month: 'short', day: 'numeric' }); } function formatMoney(value) { return '₹' + Number(value || 0).toLocaleString('en-IN', { maximumFractionDigits: 0 }); } function orderId(order) { return order.orderId || order.order_id || 'Order'; } function orderTotal(order) { return order.total ?? order.amount ?? 0; } function orderPayment(order) { return order.paymentMethod || order.payment_method || order.payment_method_name || ''; } function orderEmail(order, fallback) { return order.email || fallback || ''; } function orderItemsSummary(order) { const items = Array.isArray(order.items) ? order.items : []; if (!items.length) return ''; const names = items.slice(0, 3).map((item) => item.title || item['Product Title'] || 'Item'); const extra = items.length > 3 ? ` +${items.length - 3} more` : ''; return names.join(', ') + extra; } function statusTone(status) { const s = String(status || 'placed').toLowerCase(); if (s.includes('deliver') || s.includes('complete')) return 'delivered'; if (s.includes('ship') || s.includes('transit') || s.includes('dispatch')) return 'shipped'; if (s.includes('cancel')) return 'cancelled'; if (s.includes('paid') || s.includes('confirm') || s.includes('pack') || s.includes('process')) return 'packed'; return 'placed'; } function statusLabel(status) { const tone = statusTone(status); const map = { placed: 'Order placed', packed: 'Packed', shipped: 'En route', delivered: 'Delivered', cancelled: 'Cancelled', }; if (map[tone]) return map[tone]; return String(status || 'Placed'); } function slipRotate(index) { const angles = [-1.5, 0.8, -0.6, 1.2, -1.1, 0.5]; return angles[index % angles.length]; } function renderOrderRow(order, userEmail, index) { const id = orderId(order); const email = orderEmail(order, userEmail); const trackPage = window.ECOM_ORDERS_TRACK_PAGE || 'order-status.php'; const trackUrl = trackPage + '?order_id=' + encodeURIComponent(id) + '&email=' + encodeURIComponent(email); const items = orderItemsSummary(order); const btnClass = window.ECOM_ORDERS_BTN_CLASS || 'btn btn-soft'; const status = order.status || 'Placed'; const tone = statusTone(status); const i = typeof index === 'number' ? index : 0; if (window.ECOM_ORDERS_CARD_LAYOUT === 'harvest-slip') { return `
${esc(statusLabel(status))}

${esc(id)}

Total
${esc(formatMoney(orderTotal(order)))}
Payment
${esc(orderPayment(order) || '—')}
${items ? `

${esc(items)}

` : ''} Track crate →
`; } return `
${esc(id)}
${esc(status)} • ${formatMoney(orderTotal(order))} • ${esc(orderPayment(order))}
${formatDate(order.createdAt || order.created_at)}
${items ? `
${esc(items)}
` : ''}
View
`; } function setVisible(id, show) { const el = document.getElementById(id); if (el) el.style.display = show ? '' : 'none'; } function renderOrders(orders, userEmail) { const list = Array.isArray(orders) ? orders : []; setVisible('ordersLoading', false); setVisible('ordersLoggedIn', true); setVisible('ordersLoggedOut', false); const listEl = document.getElementById('ordersList'); const emptyEl = document.getElementById('ordersEmpty'); if (!list.length) { if (listEl) listEl.innerHTML = ''; setVisible('ordersEmpty', true); return; } setVisible('ordersEmpty', false); if (listEl) { listEl.innerHTML = list.map((order, index) => renderOrderRow(order, userEmail, index)).join(''); } } function showLoggedOut() { setVisible('ordersLoading', false); setVisible('ordersLoggedIn', false); setVisible('ordersLoggedOut', true); } document.addEventListener('DOMContentLoaded', async () => { const loading = document.getElementById('ordersLoading'); if (loading) loading.style.display = ''; const serverOrders = Array.isArray(window.ECOM_SERVER_ORDERS) ? window.ECOM_SERVER_ORDERS : []; if (!window.EcomAPI) { if (serverOrders.length) renderOrders(serverOrders, ''); else showLoggedOut(); return; } if (!EcomAPI.token()) { if (serverOrders.length) renderOrders(serverOrders, ''); else showLoggedOut(); return; } await EcomAPI.syncPhpSession(); const [me, ordersRes] = await Promise.all([ EcomAPI.me().catch(() => ({ success: false })), EcomAPI.myOrders().catch(() => ({ success: false, orders: [] })), ]); if (!me.success || !me.user) { EcomAPI.setToken(''); if (serverOrders.length) renderOrders(serverOrders, ''); else showLoggedOut(); return; } const orders = ordersRes.success && Array.isArray(ordersRes.orders) ? ordersRes.orders : serverOrders; renderOrders(orders, me.user.email || ''); }); })();