// app/modules/loyalty/static/store/js/loyalty-stats.js // noqa: js-006 - async init pattern is safe, loadData has try/catch const loyaltyStatsLog = window.LogConfig.loggers.loyaltyStats || window.LogConfig.createLogger('loyaltyStats'); function storeLoyaltyStats() { return { ...data(), currentPage: 'loyalty-stats', stats: { total_cards: 0, active_cards: 0, new_this_month: 0, total_points_issued: 0, total_points_redeemed: 0, total_points_balance: 0, points_issued_30d: 0, points_redeemed_30d: 0, transactions_30d: 0, avg_points_per_member: 0 }, loading: false, error: null, async init() { loyaltyStatsLog.info('=== LOYALTY STATS PAGE INITIALIZING ==='); if (window._loyaltyStatsInitialized) return; window._loyaltyStatsInitialized = true; // IMPORTANT: Call parent init first to set storeCode from URL const parentInit = data().init; if (parentInit) { await parentInit.call(this); } await this.loadStats(); loyaltyStatsLog.info('=== LOYALTY STATS PAGE INITIALIZATION COMPLETE ==='); }, async loadStats() { this.loading = true; this.error = null; try { const response = await apiClient.get('/store/loyalty/stats'); if (response) { this.stats = { total_cards: response.total_cards || 0, active_cards: response.active_cards || 0, new_this_month: response.new_this_month || 0, total_points_issued: response.total_points_issued || 0, total_points_redeemed: response.total_points_redeemed || 0, total_points_balance: response.total_points_balance || 0, points_issued_30d: response.points_issued_30d || 0, points_redeemed_30d: response.points_redeemed_30d || 0, transactions_30d: response.transactions_30d || 0, avg_points_per_member: response.avg_points_per_member || 0 }; loyaltyStatsLog.info('Stats loaded'); } } catch (error) { loyaltyStatsLog.error('Failed to load stats:', error); this.error = error.message; } finally { this.loading = false; } }, formatNumber(num) { return num == null ? '0' : new Intl.NumberFormat('en-US').format(num); } }; } if (!window.LogConfig.loggers.loyaltyStats) { window.LogConfig.loggers.loyaltyStats = window.LogConfig.createLogger('loyaltyStats'); } loyaltyStatsLog.info('Loyalty stats module loaded');