From b727347b6c6b084c36c26b442ed248218c9e51c0 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 15 Oct 2019 09:40:49 +1100 Subject: [PATCH] basic plans form --- ...ugins-discourse-patrons-plans-index.js.es6 | 2 +- ...ns-discourse-patrons-products-index.js.es6 | 19 +++++++++++++++++ ...ins-discourse-patrons-products-show.js.es6 | 14 +++++++++++++ .../discourse-patrons-route-map.js.es6 | 4 +++- .../discourse/models/admin-plan.js.es6 | 17 ++++++++++++++- .../discourse/models/admin-product.js.es6 | 21 +++++++++++++++++++ ...lugins-discourse-patrons-plans-show.js.es6 | 19 ++--------------- ...ins-discourse-patrons-products-show.js.es6 | 8 ++++++- .../plugins-discourse-patrons-plans-index.hbs | 3 ++- ...ugins-discourse-patrons-products-index.hbs | 12 +++++++++++ ...lugins-discourse-patrons-products-show.hbs | 15 +++++++++++++ .../plugins-discourse-patrons-products.hbs | 9 ++++++++ .../stylesheets/common/discourse-patrons.scss | 4 ++-- 13 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-index.js.es6 create mode 100644 assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 create mode 100644 assets/javascripts/discourse/models/admin-product.js.es6 create mode 100644 assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products.hbs diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 index 825ed23..b5f6a81 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 @@ -4,7 +4,7 @@ export default Ember.Controller.extend({ actions: { destroyPlan(plan) { plan.destroy().then(() => - this.controllerFor("adminBackupsIndex") + this.controllerFor("adminPluginsDiscoursePatronsPlansIndex") .get("model") .removeObject(plan) ); diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-index.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-index.js.es6 new file mode 100644 index 0000000..e240694 --- /dev/null +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-index.js.es6 @@ -0,0 +1,19 @@ +import DiscourseURL from "discourse/lib/url"; + +export default Ember.Controller.extend({ + actions: { + destroyProduct(product) { + product.destroy().then(() => + this.controllerFor("adminPluginsDiscoursePatronsProductsIndex") + .get("model") + .removeObject(product) + ); + }, + + editProduct(id) { + return DiscourseURL.redirectTo( + `/admin/plugins/discourse-patrons/products/${id}` + ); + } + } +}); diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 new file mode 100644 index 0000000..d6a5293 --- /dev/null +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-products-show.js.es6 @@ -0,0 +1,14 @@ +import { popupAjaxError } from "discourse/lib/ajax-error"; + +export default Ember.Controller.extend({ + actions: { + createPlan() { + this.get("model") + .save() + .then(() => { + this.transitionToRoute("adminPlugins.discourse-patrons.products"); + }) + .catch(popupAjaxError); + } + } +}); diff --git a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 index ce2da39..78ba315 100644 --- a/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 +++ b/assets/javascripts/discourse/discourse-patrons-route-map.js.es6 @@ -4,7 +4,9 @@ export default { map() { this.route("discourse-patrons", function() { this.route("dashboard"); - this.route("products"); + this.route("products", function() { + this.route("show", { path: "/:plan-id" }); + }); this.route("plans", function() { this.route("show", { path: "/:plan-id" }); }); diff --git a/assets/javascripts/discourse/models/admin-plan.js.es6 b/assets/javascripts/discourse/models/admin-plan.js.es6 index 889afe5..9417e63 100644 --- a/assets/javascripts/discourse/models/admin-plan.js.es6 +++ b/assets/javascripts/discourse/models/admin-plan.js.es6 @@ -1,7 +1,22 @@ import { ajax } from "discourse/lib/ajax"; const AdminPlan = Discourse.Model.extend({ - destroy() {} + name: "", + interval: "month", + amount: 0, + intervals: ["day", "week", "month", "year"], + + destroy() {}, + + save() { + const data = { + interval: this.interval, + amount: this.amount, + name: this.name + }; + + return ajax("/patrons/admin/plans", { method: "post", data }); + } }); AdminPlan.reopenClass({ diff --git a/assets/javascripts/discourse/models/admin-product.js.es6 b/assets/javascripts/discourse/models/admin-product.js.es6 new file mode 100644 index 0000000..5861ef5 --- /dev/null +++ b/assets/javascripts/discourse/models/admin-product.js.es6 @@ -0,0 +1,21 @@ +import { ajax } from "discourse/lib/ajax"; + +const AdminProduct = Discourse.Model.extend({ + destroy() {}, + + save() { + const data = {}; + + return ajax("/patrons/admin/products", { method: "post", data }); + } +}); + +AdminProduct.reopenClass({ + find() { + return ajax("/patrons/admin/products", { method: "get" }).then(result => + result.map(product => AdminProduct.create(product)) + ); + } +}); + +export default AdminProduct; diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 index 08d7523..1818889 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-plans-show.js.es6 @@ -1,22 +1,7 @@ -import { ajax } from "discourse/lib/ajax"; +import AdminPlan from "discourse/plugins/discourse-patrons/discourse/models/admin-plan"; export default Discourse.Route.extend({ model() { - return Ember.Object.create({ - name: "", - interval: "month", - amount: 0, - intervals: ["day", "week", "month", "year"], - - save() { - const data = { - interval: this.interval, - amount: this.amount, - name: this.name - }; - - return ajax("/patrons/admin/plans", { method: "post", data }); - } - }); + return AdminPlan.create(); } }); 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 55af882..5e61d7b 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 @@ -1 +1,7 @@ -export default Discourse.Route.extend({}); +import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/admin-plan"; + +export default Discourse.Route.extend({ + model() { + return AdminProduct.create(); + } +}); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-index.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-index.hbs index eb9e05a..58a6dce 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-index.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-plans-index.hbs @@ -5,6 +5,7 @@ {{i18n 'discourse_patrons.admin.plans.plan.nickname'}} {{i18n 'discourse_patrons.admin.plans.plan.interval'}} {{i18n 'discourse_patrons.admin.plans.plan.amount'}} + {{#each model as |plan|}} @@ -12,7 +13,7 @@ {{plan.nickname}} {{plan.interval}} {{plan.amount}} - + {{d-button action=(action "editPlan" plan.id) icon="far-edit" 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 8edf5ea..3faec80 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 @@ -2,10 +2,22 @@ + {{#each model as |product|}} + {{/each}}
{{product.id}} + {{d-button + action=(action "editProduct" product.id) + icon="far-edit" + class="btn no-text btn-icon"}} + {{d-button + action=(route-action "destroyProduct") + actionParam=product + icon="trash-alt" + class="btn-danger btn no-text btn-icon"}} +
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 09b14c9..c658fc4 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,2 +1,17 @@

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

+ +
+
+ + {{input type="text" name="name" value=model.name}} +
+
+ + {{combo-box valueAttribute="value" content=model.intervals value=model.interval}} +
+
+ +
+ {{d-button label="discourse_patrons.admin.products.show.create" action="createProduct" icon="plus"}} +
diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products.hbs new file mode 100644 index 0000000..025420a --- /dev/null +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products.hbs @@ -0,0 +1,9 @@ + +

+ {{#link-to 'adminPlugins.discourse-patrons.products.show' 'new' class="btn btn-primary"}} + {{d-icon "plus"}} + {{i18n 'discourse_patrons.admin.products.new'}} + {{/link-to}} +

+ +{{outlet}} diff --git a/assets/stylesheets/common/discourse-patrons.scss b/assets/stylesheets/common/discourse-patrons.scss index 2f0e01a..8448dfb 100644 --- a/assets/stylesheets/common/discourse-patrons.scss +++ b/assets/stylesheets/common/discourse-patrons.scss @@ -38,8 +38,8 @@ } } -.discourse-patrons-admin { - .amount { +table.discourse-patrons-admin { + .td-right { text-align: right; } }