diff --git a/ghost/admin/app/components/settings/members-default-post-access.hbs b/ghost/admin/app/components/settings/members-default-post-access.hbs index d4a335aa9f..2bca322faa 100644 --- a/ghost/admin/app/components/settings/members-default-post-access.hbs +++ b/ghost/admin/app/components/settings/members-default-post-access.hbs @@ -23,4 +23,16 @@ - \ No newline at end of file + {{#if this.hasVisibilityFilter}} +
+ +
+ {{/if}} + diff --git a/ghost/admin/app/components/settings/members-default-post-access.js b/ghost/admin/app/components/settings/members-default-post-access.js index b2513911cd..16c6cb30b0 100644 --- a/ghost/admin/app/components/settings/members-default-post-access.js +++ b/ghost/admin/app/components/settings/members-default-post-access.js @@ -4,9 +4,10 @@ import {inject as service} from '@ember/service'; export default class SettingsMembersDefaultPostAccess extends Component { @service settings; + @service feature; get options() { - return [{ + const defaultOptions = [{ name: 'Public', description: 'All site visitors to your site, no login required', value: 'public', @@ -25,20 +26,47 @@ export default class SettingsMembersDefaultPostAccess extends Component { icon: 'members-paid', icon_color: 'pink' }]; + if (this.feature.get('multipleProducts')) { + defaultOptions.push({ + name: 'A segment', + description: 'Members with any of the selected products', + value: 'filter', + icon: 'members-paid', + icon_color: 'yellow' + }); + } + return defaultOptions; + } + + get hasVisibilityFilter() { + return this.feature.get('multipleProducts') && !['public', 'members', 'paid'].includes(this.settings.get('defaultContentVisibility')); } get selectedOption() { if (this.settings.get('membersSignupAccess') === 'none') { return this.options.find(o => o.value === 'public'); } - + if (!['public', 'members', 'paid'].includes(this.settings.get('defaultContentVisibility'))) { + return this.options.find(o => o.value === 'filter'); + } return this.options.find(o => o.value === this.settings.get('defaultContentVisibility')); } + @action + setVisibility(segment) { + if (segment) { + this.settings.set('defaultContentVisibility', segment); + } + } + @action setDefaultContentVisibility(option) { if (this.settings.get('membersSignupAccess') !== 'none') { - this.settings.set('defaultContentVisibility', option.value); + if (option.value === 'filter') { + this.settings.set('defaultContentVisibility', ''); + } else { + this.settings.set('defaultContentVisibility', option.value); + } } } } diff --git a/ghost/admin/app/controllers/settings/membership.js b/ghost/admin/app/controllers/settings/membership.js index 158c65424b..158bfe6d07 100644 --- a/ghost/admin/app/controllers/settings/membership.js +++ b/ghost/admin/app/controllers/settings/membership.js @@ -316,6 +316,13 @@ export default class MembersAccessController extends Controller { @task({drop: true}) *saveSettingsTask(options) { + if (!this.settings.get('defaultContentVisibility')) { + const oldValue = this.settings.changedAttributes().defaultContentVisibility?.[0]; + if (oldValue) { + this.settings.set('defaultContentVisibility', oldValue); + } + } + if (!this.feature.get('multipleProducts')) { yield this.validateStripePlans({updatePortalPreview: false});