From c26ce1fc80e6a09bd1a02f469f3b1cf08303a2cf Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 22 Oct 2019 15:45:51 +1100 Subject: [PATCH] plans are child of product --- ...se-patrons-products-show-plans-show.js.es6 | 18 +++++++++ .../discourse-patrons-route-map.js.es6 | 1 - ...se-patrons-products-show-plans-show.js.es6 | 37 +++++++++--------- ...ins-discourse-patrons-products-show.js.es6 | 2 +- ...ugins-discourse-patrons-products-index.hbs | 2 +- ...ourse-patrons-products-show-plans-show.hbs | 38 +++++++++++++++---- ...lugins-discourse-patrons-products-show.hbs | 25 ++++++++---- .../stylesheets/common/discourse-patrons.scss | 7 ++++ .../stylesheets/mobile/discourse-patrons.scss | 8 ---- config/locales/client.en.yml | 22 ++++++----- 10 files changed, 107 insertions(+), 53 deletions(-) create mode 100644 assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 new file mode 100644 index 0000000..754a85a --- /dev/null +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 @@ -0,0 +1,18 @@ +import DiscourseURL from "discourse/lib/url"; + +export default Ember.Controller.extend({ + redirect(product_id) { + DiscourseURL.redirectTo(`/admin/plugins/discourse-patrons/products/${product_id}`); + }, + + actions: { + cancelPlan(product_id) { + this.redirect(product_id); + }, + + createPlan() { + const product_id = this.get('model.plan.product_id'); + this.get('model.plan').save().then(result => this.redirect(product_id)); + } + } +}); diff --git a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 index 0fa8290..921bfb5 100644 --- a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 +++ b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 @@ -15,7 +15,6 @@ export default { this.route("products", function() { this.route("show", { path: "/:product-id" }, function() { - // this.route("plans"); this.route("plans", function() { this.route("show", { path: "/:plan-id" }); }); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 index d462526..7cd6fce 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 @@ -2,23 +2,26 @@ import AdminPlan from "discourse/plugins/discourse-patrons/discourse/models/admi import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/admin-product"; export default Discourse.Route.extend({ - templateName: 'admin-plugins-discourse-patrons-plans-show', - model(params) { - console.log('product plans', params); + const id = params['plan-id']; + const product = this.modelFor('adminPlugins.discourse-patrons.products.show').product; + let plan; - // const id = params['plan-id']; - // let plan; - // - // if(id === 'new') { - // plan = AdminPlan.create(); - // } - // else { - // plan = AdminPlan.find(id); - // } - // - // const products = AdminProduct.findAll(); - // - // return Ember.RSVP.hash({ plan, products }); - } + if(id === 'new') { + plan = AdminPlan.create({ product_id: product.get('id') }); + } + else { + plan = AdminPlan.find(id); + } + + return Ember.RSVP.hash({ plan, product }); + }, + + renderTemplate(controller, model) { + this.render('adminPlugins.discourse-patrons.products.show.plans.show', { + into: 'adminPlugins.discourse-patrons.products', + outlet: 'main', + controller: 'adminPlugins.discourse-patrons.products.show.plans.show', + }); + }, }); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 index 55b13c1..1dc88c1 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 @@ -21,5 +21,5 @@ export default Discourse.Route.extend({ const groups = Group.findAll({ ignore_automatic: true }); return Ember.RSVP.hash({ plans, product, groups }); - } + }, }); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs index 4a7abbc..4393746 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs @@ -3,7 +3,7 @@ {{i18n 'discourse_patrons.admin.products.product.product_id'}} {{i18n 'discourse_patrons.admin.products.product.name'}} - {{i18n 'discourse_patrons.admin.products.product.group.title'}} + {{i18n 'discourse_patrons.admin.products.product.group'}} {{i18n 'discourse_patrons.admin.products.product.active'}} diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs index cb14999..42eb525 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs @@ -3,10 +3,14 @@

- + + {{input type="text" name="product_name" value=model.product.name disabled=true}} +

+

+ {{input type="text" name="name" value=model.plan.nickname}}

- {{i18n 'discourse_patrons.admin.plans.plan.nickname.description'}} + {{i18n 'discourse_patrons.admin.plans.plan.nickname_help'}}

@@ -14,15 +18,33 @@ {{input type="text" name="name" value=model.plan.amount}}

- - {{combo-box valueAttribute="id" content=model.products value=model.plan.product_id}} + + {{input type="text" name="trial" value=model.plan.trial}} +

+ {{i18n 'discourse_patrons.admin.plans.plan.trial_help'}} +

- + {{combo-box valueAttribute="value" content=model.plan.intervals value=model.plan.interval}}

-
- {{d-button label="discourse_patrons.admin.plans.operations.create" action="createPlan" icon="plus"}} -
+
+
+ +
+ {{i18n 'discourse_patrons.admin.plans.operations.create_help'}} +
+ +
+ {{d-button label="cancel" action=(action "cancelPlan" model.plan.product_id) icon="times"}} + {{d-button label="discourse_patrons.admin.plans.operations.create" action="createPlan" icon="plus" class="btn btn-primary"}} +
+ +
diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs index f968f26..198c353 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs @@ -1,4 +1,3 @@ -

{{i18n 'discourse_patrons.admin.products.title'}}

@@ -8,18 +7,18 @@

{{input type="text" name="statement_descriptor" value=model.product.statement_descriptor}}

- {{i18n 'discourse_patrons.admin.products.product.statement_descriptor.description'}} + {{i18n 'discourse_patrons.admin.products.product.statement_descriptor_help'}}

- + {{combo-box valueAttribute="name" content=model.groups value=model.product.metadata.group_name}}

- {{i18n 'discourse_patrons.admin.products.product.group.description'}} + {{i18n 'discourse_patrons.admin.products.product.group_help'}}

@@ -34,8 +33,9 @@ - + + + {{/each}}
{{i18n 'discourse_patrons.admin.plans.plan.plan_id'}}{{i18n 'discourse_patrons.admin.plans.plan.nickname.title'}}{{i18n 'discourse_patrons.admin.plans.plan.nickname'}} {{i18n 'discourse_patrons.admin.plans.plan.interval'}}{{i18n 'discourse_patrons.admin.plans.plan.amount'}} {{#link-to "adminPlugins.discourse-patrons.products.show.plans.show" model.product.id "new" class="btn"}} {{i18n 'discourse_patrons.admin.plans.operations.add'}} @@ -48,12 +48,21 @@ {{plan.nickname}} {{plan.interval}} {{plan.amount}} + {{#link-to "adminPlugins.discourse-patrons.products.show.plans.show" model.product.id plan.id class="btn no-text btn-icon"}} + {{d-icon "far-edit"}} + {{/link-to}} + {{!-- {{d-button + action=(route-action "destroyPlan") + actionParam=plan + icon="trash-alt" + class="btn-danger btn no-text btn-icon"}} --}} +

-

@@ -66,3 +75,5 @@
+ +{{outlet}} diff --git a/assets/stylesheets/common/discourse-patrons.scss b/assets/stylesheets/common/discourse-patrons.scss index 8448dfb..e8f72c7 100644 --- a/assets/stylesheets/common/discourse-patrons.scss +++ b/assets/stylesheets/common/discourse-patrons.scss @@ -1,3 +1,10 @@ +// TODO: This gets overridden somewhere. It is defined in common/base/discourse.scss +input[disabled], input[readonly], select[disabled], select[readonly], textarea[disabled], textarea[readonly] { + cursor: not-allowed; + background-color: #e9e9e9; + border-color: #e9e9e9; +} + .discourse-patrons-section-columns { display: flex; justify-content: space-between; diff --git a/assets/stylesheets/mobile/discourse-patrons.scss b/assets/stylesheets/mobile/discourse-patrons.scss index b99f3da..e69de29 100644 --- a/assets/stylesheets/mobile/discourse-patrons.scss +++ b/assets/stylesheets/mobile/discourse-patrons.scss @@ -1,8 +0,0 @@ -.donations-category-header .donations-category-metadata { - flex-flow: wrap; - padding: 0 10px; - - div { - padding-bottom: 10px; - } -} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 5b22547..90d6bf6 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -16,6 +16,7 @@ en: js: discourse_patrons: title: Discourse Patrons + optional: Optional navigation: subscribe: Subscribe subscribe: @@ -70,28 +71,29 @@ en: product: product_id: Product ID name: Product Name - statement_descriptor: - title: Statement Descriptor - description: Extra information about a product which will appear on your customer’s credit card statement. - group: - title: User Group - description: This is the discourse user group the customer gets added to when the subscription is created. + statement_descriptor: Statement Descriptor + statement_descriptor_help: Extra information about a product which will appear on your customer’s credit card statement. + group: User Group + group_help: This is the discourse user group the customer gets added to when the subscription is created. active: Active plans: title: Pricing Plans operations: add: Add New Plan + create: Create Plan + create_help: Once a pricing plan is created, only its nickname and trial period can be updated. new: New Plan destroy: confirm: Are you sure you want to destroy this plan? plan: - nickname: - title: Plan Nickname - description: This won't be visible to customers, but will help you find this plan later. + nickname: Plan Nickname + nickname_help: This won't be visible to customers, but will help you find this plan later. plan_id: Plan ID product: Product - interval: Interval + interval: Billing Interval amount: Amount + trial: Trial Period Days + trial_help: Subscriptions to this plan will automatically start with a free trial of this length subscriptions: title: Subscriptions subscription: