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});