diff --git a/ghost/admin/app/components/gh-member-settings-form-cp.hbs b/ghost/admin/app/components/gh-member-settings-form-cp.hbs index 38e7aca033..15f89c3473 100644 --- a/ghost/admin/app/components/gh-member-settings-form-cp.hbs +++ b/ghost/admin/app/components/gh-member-settings-form-cp.hbs @@ -109,9 +109,11 @@
This member doesn't have subscriptions.
{{#unless this.member.isNew}} - + {{#if this.isAddComplimentaryAllowed}} + + {{/if}} {{/unless}}
@@ -121,7 +123,7 @@

- {{product.name}} + {{product.name}} {{#unless (eq product.subscriptions.length 1)}} {{product.subscriptions.length}} subscriptions {{/unless}} @@ -177,12 +179,13 @@

{{/each}} - - + {{#if this.isAddComplimentaryAllowed}} + + {{/if}}
{{/each}} diff --git a/ghost/admin/app/components/gh-member-settings-form-cp.js b/ghost/admin/app/components/gh-member-settings-form-cp.js index c518e3fd37..50280dae14 100644 --- a/ghost/admin/app/components/gh-member-settings-form-cp.js +++ b/ghost/admin/app/components/gh-member-settings-form-cp.js @@ -29,6 +29,14 @@ export default class extends Component { return !this.member.get('isNew') && this.membersUtils.isStripeEnabled; } + get isAddComplimentaryAllowed() { + let subscriptions = this.member.get('subscriptions') || []; + const hasZeroPriceSub = subscriptions.find((sub) => { + return !sub?.price?.amount; + }); + return !hasZeroPriceSub; + } + get products() { let products = this.member.get('products') || []; let subscriptions = this.member.get('subscriptions') || []; @@ -95,6 +103,11 @@ export default class extends Component { continueSubscription(subscriptionId) { this.continueSubscriptionTask.perform(subscriptionId); } + @action + addCompedSubscription() { + this.args.setProperty('comped', true); + this.args.saveMember(); + } @task({drop: true}) *cancelSubscriptionTask(subscriptionId) { diff --git a/ghost/admin/app/controllers/member.js b/ghost/admin/app/controllers/member.js index 4f9b40dcef..e7813f53b0 100644 --- a/ghost/admin/app/controllers/member.js +++ b/ghost/admin/app/controllers/member.js @@ -159,7 +159,7 @@ export default class MemberController extends Controller { _saveMemberProperty(propKey, newValue) { let currentValue = this.member.get(propKey); - if (newValue) { + if (newValue && typeof newValue === 'string') { newValue = newValue.trim(); } diff --git a/ghost/admin/app/templates/member.hbs b/ghost/admin/app/templates/member.hbs index 1d4ed3d0b7..fdfe6793ae 100644 --- a/ghost/admin/app/templates/member.hbs +++ b/ghost/admin/app/templates/member.hbs @@ -31,6 +31,7 @@ @member={{this.member}} @scratchMember={{this.scratchMember}} @setProperty={{this.setProperty}} + @saveMember={{this.save}} @isLoading={{this.isLoading}} />