import Component from '@glimmer/component'; import {action} from '@ember/object'; import {inject as service} from '@ember/service'; import {tracked} from '@glimmer/tracking'; export default class SettingsMembersDefaultPostAccess extends Component { @service settings; @service feature; @tracked showSegmentError; get options() { const defaultOptions = [{ name: 'Public', description: 'All site visitors to your site, no login required', value: 'public', icon: 'globe', icon_color: 'green' }, { name: 'Members only', description: 'All logged-in members', value: 'members', icon: 'members-all', icon_color: 'blue' }, { name: 'Paid-members only', description: 'Only logged-in members with an active Stripe subscription', value: 'paid', icon: 'members-paid', icon_color: 'pink' }]; if (this.feature.get('multipleProducts')) { defaultOptions.push({ name: 'Specific tier(s)', description: 'Members with any of the selected tiers', value: 'tiers', icon: 'members-segment', icon_color: 'yellow' }); } return defaultOptions; } get hasVisibilityFilter() { return this.feature.get('multipleProducts') && !['public', 'members', 'paid'].includes(this.settings.get('defaultContentVisibility')); } get visibilityTiers() { const visibilityTiersData = this.settings.get('defaultContentVisibilityTiers'); return (visibilityTiersData || []).map((id) => { return {id}; }); } get selectedOption() { if (this.settings.get('membersSignupAccess') === 'none') { return this.options.find(o => o.value === 'public'); } return this.options.find(o => o.value === this.settings.get('defaultContentVisibility')); } @action setVisibility(segment) { if (segment) { const productIds = segment?.map((product) => { return product.id; }); this.settings.set('defaultContentVisibility', 'tiers'); this.settings.set('defaultContentVisibilityTiers', productIds); this.showSegmentError = false; } else { this.settings.set('defaultContentVisibility', ''); this.showSegmentError = true; } } @action setDefaultContentVisibility(option) { if (this.settings.get('membersSignupAccess') !== 'none') { this.settings.set('defaultContentVisibility', option.value); if (option.value === 'tiers') { this.settings.set('defaultContentVisibilityTiers', []); } } } }