// app/modules/loyalty/static/store/js/loyalty-enroll.js // noqa: js-006 - async init pattern is safe, loadData has try/catch const loyaltyEnrollLog = window.LogConfig.loggers.loyaltyEnroll || window.LogConfig.createLogger('loyaltyEnroll'); function storeLoyaltyEnroll() { return { ...data(), currentPage: 'terminal', program: null, form: { first_name: '', last_name: '', email: '', phone: '', birthday: '', marketing_email: false, marketing_sms: false }, enrolling: false, enrolledCard: null, loading: false, error: null, async init() { loyaltyEnrollLog.info('=== LOYALTY ENROLL PAGE INITIALIZING ==='); if (window._loyaltyEnrollInitialized) return; window._loyaltyEnrollInitialized = true; // IMPORTANT: Call parent init first to set storeCode from URL const parentInit = data().init; if (parentInit) { await parentInit.call(this); } await this.loadProgram(); loyaltyEnrollLog.info('=== LOYALTY ENROLL PAGE INITIALIZATION COMPLETE ==='); }, async loadProgram() { this.loading = true; try { const response = await apiClient.get('/store/loyalty/program'); if (response) { this.program = response; loyaltyEnrollLog.info('Program loaded:', this.program.display_name); } } catch (error) { if (error.status === 404) { loyaltyEnrollLog.warn('No program configured'); } else { this.error = error.message; } } finally { this.loading = false; } }, async enrollCustomer() { if (!this.form.first_name || !this.form.email) return; this.enrolling = true; try { loyaltyEnrollLog.info('Enrolling customer:', this.form.email); const response = await apiClient.post('/store/loyalty/cards/enroll', { email: this.form.email, customer_phone: this.form.phone || null, customer_name: [this.form.first_name, this.form.last_name].filter(Boolean).join(' '), customer_birthday: this.form.birthday || null, marketing_email_consent: this.form.marketing_email, marketing_sms_consent: this.form.marketing_sms }); if (response) { this.enrolledCard = response; loyaltyEnrollLog.info('Customer enrolled successfully:', response.card_number); } } catch (error) { Utils.showToast(I18n.t('loyalty.store.enroll.enrollment_failed', {message: error.message}), 'error'); loyaltyEnrollLog.error('Enrollment failed:', error); } finally { this.enrolling = false; } }, resetForm() { this.form = { first_name: '', last_name: '', email: '', phone: '', birthday: '', marketing_email: false, marketing_sms: false }; } }; } if (!window.LogConfig.loggers.loyaltyEnroll) { window.LogConfig.loggers.loyaltyEnroll = window.LogConfig.createLogger('loyaltyEnroll'); } loyaltyEnrollLog.info('Loyalty enroll module loaded');