// app/modules/loyalty/static/storefront/js/loyalty-enroll.js // Self-service loyalty enrollment function customerLoyaltyEnroll() { return { ...data(), // Program info program: null, // Form data form: { email: '', first_name: '', last_name: '', phone: '', birthday: '', terms_accepted: false, marketing_consent: false }, // State loading: false, enrolling: false, enrolled: false, enrolledCard: null, error: null, async init() { console.log('Customer loyalty enroll initializing...'); await this.loadProgram(); }, async loadProgram() { this.loading = true; try { const response = await apiClient.get('/storefront/loyalty/program'); if (response) { this.program = response; console.log('Program loaded:', this.program.display_name); } } catch (error) { if (error.status === 404) { console.log('No loyalty program available'); this.program = null; } else { console.error('Failed to load program:', error); this.error = 'Failed to load program information'; } } finally { this.loading = false; } }, async submitEnrollment() { if (!this.form.email || !this.form.first_name || !this.form.terms_accepted) { return; } this.enrolling = true; this.error = null; try { const response = await apiClient.post('/storefront/loyalty/enroll', { customer_email: this.form.email, customer_name: [this.form.first_name, this.form.last_name].filter(Boolean).join(' '), customer_phone: this.form.phone || null, customer_birthday: this.form.birthday || null, marketing_email_consent: this.form.marketing_consent, marketing_sms_consent: this.form.marketing_consent }); if (response) { console.log('Enrollment successful:', response.card_number); // Redirect to success page - extract base path from current URL // Current page is at /storefront/loyalty/join, redirect to /storefront/loyalty/join/success const currentPath = window.location.pathname; const successUrl = currentPath.replace(/\/join\/?$/, '/join/success') + '?card=' + encodeURIComponent(response.card_number); window.location.href = successUrl; } } catch (error) { console.error('Enrollment failed:', error); if (error.message?.includes('already')) { this.error = 'This email is already registered in our loyalty program.'; } else { this.error = error.message || 'Enrollment failed. Please try again.'; } } finally { this.enrolling = false; } } }; }