import Component from '@glimmer/component'; import {action} from '@ember/object'; import {inject as service} from '@ember/service'; import {tracked} from '@glimmer/tracking'; const US = {flag: 'πŸ‡ΊπŸ‡Έ', name: 'US', baseUrl: 'https://api.mailgun.net/v3'}; const EU = {flag: 'πŸ‡ͺπŸ‡Ί', name: 'EU', baseUrl: 'https://api.eu.mailgun.net/v3'}; export default class MembersEmailLabs extends Component { @service config; @service settings; // set recipientsSelectValue as a static property because within this // component's lifecycle it's not always derived from the settings values. // e.g. can be set to "segment" when the filter is empty which is not derivable // from settings as it would equate to "none" @tracked recipientsSelectValue = this._getDerivedRecipientsSelectValue(); mailgunRegions = [US, EU]; get emailNewsletterEnabled() { return this.settings.get('editorDefaultEmailRecipients') !== 'disabled'; } get mailgunRegion() { if (!this.settings.get('mailgunBaseUrl')) { return US; } return [US, EU].find((region) => { return region.baseUrl === this.settings.get('mailgunBaseUrl'); }); } get mailgunSettings() { return { apiKey: this.settings.get('mailgunApiKey') || '', domain: this.settings.get('mailgunDomain') || '', baseUrl: this.settings.get('mailgunBaseUrl') || '' }; } @action setMailgunDomain(event) { this.settings.set('mailgunDomain', event.target.value); if (!this.settings.get('mailgunBaseUrl')) { this.settings.set('mailgunBaseUrl', this.mailgunRegion.baseUrl); } } @action setMailgunApiKey(event) { this.settings.set('mailgunApiKey', event.target.value); if (!this.settings.get('mailgunBaseUrl')) { this.settings.set('mailgunBaseUrl', this.mailgunRegion.baseUrl); } } @action setMailgunRegion(region) { this.settings.set('mailgunBaseUrl', region.baseUrl); } @action toggleEmailTrackOpens(event) { if (event) { event.preventDefault(); } this.settings.set('emailTrackOpens', !this.settings.get('emailTrackOpens')); } @action toggleEmailNewsletterEnabled(event) { if (event) { event.preventDefault(); } const newsletterEnabled = !this.emailNewsletterEnabled; if (newsletterEnabled) { this.settings.set('editorDefaultEmailRecipients', 'visibility'); } else { this.settings.set('editorDefaultEmailRecipients', 'disabled'); this.settings.set('editorDefaultEmailRecipientsFilter', null); } this.recipientsSelectValue = this._getDerivedRecipientsSelectValue(); } @action setDefaultEmailRecipients(value) { // Update the underlying setting properties to match the selected recipients option if (['visibility', 'disabled'].includes(value)) { this.settings.set('editorDefaultEmailRecipients', value); this.settings.set('editorDefaultEmailRecipientsFilter', null); } else { this.settings.set('editorDefaultEmailRecipients', 'filter'); } if (value === 'all-members') { this.settings.set('editorDefaultEmailRecipientsFilter', 'status:free,status:-free'); } if (value === 'paid-only') { this.settings.set('editorDefaultEmailRecipientsFilter', 'status:-free'); } if (value === 'none') { this.settings.set('editorDefaultEmailRecipientsFilter', null); } // Update the value used to display the selected recipients option explicitly // because it's local non-derived state this.recipientsSelectValue = value; } @action setDefaultEmailRecipientsFilter(filter) { this.settings.set('editorDefaultEmailRecipientsFilter', filter); } _getDerivedRecipientsSelectValue() { const defaultEmailRecipients = this.settings.get('editorDefaultEmailRecipients'); const defaultEmailRecipientsFilter = this.settings.get('editorDefaultEmailRecipientsFilter'); if (defaultEmailRecipients === 'filter') { if (defaultEmailRecipientsFilter === 'status:free,status:-free') { return 'all-members'; } else if (defaultEmailRecipientsFilter === 'status:-free') { return 'paid-only'; } else if (defaultEmailRecipientsFilter === null) { return 'none'; } else { return 'segment'; } } return defaultEmailRecipients; } }