diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb index 2390b83..cbe50e2 100644 --- a/app/controllers/subscriptions_controller.rb +++ b/app/controllers/subscriptions_controller.rb @@ -13,7 +13,6 @@ module DiscoursePatrons expand: ['data.subscriptions'] ) - subscriptions = customers[:data].map do |customer| customer[:subscriptions][:data] end.flatten(1) diff --git a/assets/javascripts/discourse/models/subscription.js.es6 b/assets/javascripts/discourse/models/subscription.js.es6 index b6fc9dd..aa0fc49 100644 --- a/assets/javascripts/discourse/models/subscription.js.es6 +++ b/assets/javascripts/discourse/models/subscription.js.es6 @@ -7,6 +7,11 @@ const Subscription = Discourse.Model.extend({ return moment.unix(created).format(); }, + @computed("status") + canceled(status) { + return status === 'canceled'; + }, + save() { const data = { customer: this.customer, @@ -17,7 +22,9 @@ const Subscription = Discourse.Model.extend({ }, destroy() { - return ajax(`/patrons/subscriptions/${this.id}`, { method: "delete" }); + return ajax(`/patrons/subscriptions/${this.id}`, { method: "delete" }).then(result => + Subscription.create(result) + ); }, }); diff --git a/assets/javascripts/discourse/routes/user-subscriptions.js.es6 b/assets/javascripts/discourse/routes/user-subscriptions.js.es6 index 54fc11d..cbec2e1 100644 --- a/assets/javascripts/discourse/routes/user-subscriptions.js.es6 +++ b/assets/javascripts/discourse/routes/user-subscriptions.js.es6 @@ -11,5 +11,25 @@ export default Discourse.Route.extend({ } else { controller.setProperties({ model }); } + }, + + actions: { + cancelSubscription(subscription) { + bootbox.confirm( + I18n.t("discourse_patrons.user.subscriptions.operations.destroy.confirm"), + I18n.t("no_value"), + I18n.t("yes_value"), + confirmed => { + if (confirmed) { + subscription + .destroy() + .then(result => subscription.set('status', result.status)) + .catch(data => + bootbox.alert(data.jqXHR.responseJSON.errors.join("\n")) + ); + } + } + ); + } } }); diff --git a/assets/javascripts/discourse/templates/user/subscriptions.hbs b/assets/javascripts/discourse/templates/user/subscriptions.hbs index 1e36462..830026d 100644 --- a/assets/javascripts/discourse/templates/user/subscriptions.hbs +++ b/assets/javascripts/discourse/templates/user/subscriptions.hbs @@ -1,21 +1,23 @@ -{{#d-section class="user-secondary-navigation" pageClass="user-subscriptions"}} -

{{i18n 'discourse_patrons.user.subscriptions.title'}}

+{{i18n 'discourse_patrons.user.subscriptions.title'}} - {{#if model}} - - - - - - {{#each model as |subscription|}} - - - - {{/each}} -
{{i18n 'discourse_patrons.user.subscriptions.created_at'}}
{{format-date subscription.createdFormatted}}
- {{else}} -

{{i18n 'discourse_patrons.user.subscriptions_help'}}

- {{/if}} - -{{/d-section}} +{{#if model}} + + + + + + + + {{#each model as |subscription|}} + + + + + + + {{/each}} +
{{i18n 'discourse_patrons.user.subscriptions.id'}}{{i18n 'discourse_patrons.user.subscriptions.status'}}{{i18n 'discourse_patrons.user.subscriptions.created_at'}}
{{subscription.id}}{{subscription.status}}{{format-date subscription.createdFormatted}}{{d-button disabled=subscription.canceled label="cancel" action=(route-action "cancelSubscription" subscription) icon="times"}}
+{{else}} +

{{i18n 'discourse_patrons.user.subscriptions_help'}}

+{{/if}} diff --git a/assets/stylesheets/common/discourse-patrons.scss b/assets/stylesheets/common/discourse-patrons.scss index 504d76e..bd1e339 100644 --- a/assets/stylesheets/common/discourse-patrons.scss +++ b/assets/stylesheets/common/discourse-patrons.scss @@ -16,9 +16,14 @@ textarea[readonly] { } } -table.discourse-patrons-table { - .td-right { - text-align: right; +.td-right { + text-align: right; +} + +table.discourse-patrons-user-table { + width: 100%; + th, td { + padding: 10px; } } diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 2250eb9..ead6d05 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -28,14 +28,12 @@ en: subscriptions_help: You have no subscriptions. subscriptions: title: Subscriptions + id: Subscription ID + status: Status created_at: Created - billing_help: We couldn't find a customer identifier in our system. - billing: - title: Billing - invoices: - amount: Amount - number: Invoice Number - created_at: Created + operations: + destroy: + confirm: Are you sure you want to cancel this subscription? title: Subscribe card: title: Payment diff --git a/spec/requests/subscriptions_controller_spec.rb b/spec/requests/subscriptions_controller_spec.rb index 6e243ba..2e39e94 100644 --- a/spec/requests/subscriptions_controller_spec.rb +++ b/spec/requests/subscriptions_controller_spec.rb @@ -49,7 +49,7 @@ module DiscoursePatrons get "/patrons/subscriptions.json" - expect(JSON.parse(response.body)).to eq([{"id"=>"sub_1234"}, {"id"=>"sub_4567"}]) + expect(JSON.parse(response.body)).to eq([{ "id" => "sub_1234" }, { "id" => "sub_4567" }]) end end