// app/modules/loyalty/static/store/js/loyalty-settings.js // noqa: js-006 - async init pattern is safe, loadData has try/catch const loyaltySettingsLog = window.LogConfig.loggers.loyaltySettings || window.LogConfig.createLogger('loyaltySettings'); function storeLoyaltySettings() { return { ...data(), currentPage: 'loyalty-settings', settings: { loyalty_type: 'points', points_per_euro: 1, welcome_bonus_points: 0, minimum_redemption_points: 100, points_expiration_days: null, points_rewards: [], card_name: '', card_color: '#4F46E5', is_active: true }, loading: false, saving: false, error: null, isNewProgram: false, async init() { loyaltySettingsLog.info('=== LOYALTY SETTINGS PAGE INITIALIZING ==='); if (window._loyaltySettingsInitialized) return; window._loyaltySettingsInitialized = true; // IMPORTANT: Call parent init first to set storeCode from URL const parentInit = data().init; if (parentInit) { await parentInit.call(this); } await this.loadSettings(); loyaltySettingsLog.info('=== LOYALTY SETTINGS PAGE INITIALIZATION COMPLETE ==='); }, async loadSettings() { this.loading = true; this.error = null; try { const response = await apiClient.get('/store/loyalty/program'); if (response) { this.settings = { loyalty_type: response.loyalty_type || 'points', points_per_euro: response.points_per_euro || 1, welcome_bonus_points: response.welcome_bonus_points || 0, minimum_redemption_points: response.minimum_redemption_points || 100, points_expiration_days: response.points_expiration_days || null, points_rewards: response.points_rewards || [], card_name: response.card_name || '', card_color: response.card_color || '#4F46E5', is_active: response.is_active !== false }; this.isNewProgram = false; loyaltySettingsLog.info('Settings loaded'); } } catch (error) { if (error.status === 404) { loyaltySettingsLog.info('No program found, creating new'); this.isNewProgram = true; } else { throw error; } } finally { this.loading = false; } }, async saveSettings() { this.saving = true; try { // Ensure rewards have IDs this.settings.points_rewards = this.settings.points_rewards.map((r, i) => ({ ...r, id: r.id || `reward_${i + 1}`, is_active: r.is_active !== false })); let response; if (this.isNewProgram) { response = await apiClient.post('/store/loyalty/program', this.settings); this.isNewProgram = false; } else { response = await apiClient.patch('/store/loyalty/program', this.settings); } Utils.showToast('Settings saved successfully', 'success'); loyaltySettingsLog.info('Settings saved'); } catch (error) { Utils.showToast(`Failed to save: ${error.message}`, 'error'); loyaltySettingsLog.error('Save failed:', error); } finally { this.saving = false; } }, addReward() { this.settings.points_rewards.push({ id: `reward_${Date.now()}`, name: '', points_required: 100, description: '', is_active: true }); }, removeReward(index) { this.settings.points_rewards.splice(index, 1); } }; } if (!window.LogConfig.loggers.loyaltySettings) { window.LogConfig.loggers.loyaltySettings = window.LogConfig.createLogger('loyaltySettings'); } loyaltySettingsLog.info('Loyalty settings module loaded');