100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
import { ajax } from "discourse/lib/ajax";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
import { formatAnchor, formatAmount } from "../lib/donation-utilities";
|
|
import { default as computed } from "ember-addons/ember-computed-decorators";
|
|
import showModal from "discourse/lib/show-modal";
|
|
|
|
export default Ember.Component.extend({
|
|
classNameBindings: [":donation-row", "canceled", "updating"],
|
|
includePrefix: Ember.computed.or("invoice", "charge"),
|
|
canceled: Ember.computed.equal("subscription.status", "canceled"),
|
|
|
|
@computed("subscription", "invoice", "charge", "customer")
|
|
data(subscription, invoice, charge, customer) {
|
|
if (subscription) {
|
|
return $.extend({}, subscription.plan, {
|
|
anchor: subscription.billing_cycle_anchor
|
|
});
|
|
} else if (invoice) {
|
|
let receiptSent = false;
|
|
|
|
if (invoice.receipt_number && customer.email) {
|
|
receiptSent = true;
|
|
}
|
|
|
|
return $.extend({}, invoice.lines.data[0], {
|
|
anchor: invoice.date,
|
|
invoiceLink: invoice.invoice_pdf,
|
|
receiptSent
|
|
});
|
|
} else if (charge) {
|
|
let receiptSent = false;
|
|
|
|
if (charge.receipt_number && charge.receipt_email) {
|
|
receiptSent = true;
|
|
}
|
|
|
|
return $.extend({}, charge, {
|
|
anchor: charge.created,
|
|
receiptSent
|
|
});
|
|
}
|
|
},
|
|
|
|
@computed("data.currency")
|
|
currency(currency) {
|
|
return currency ? currency.toUpperCase() : null;
|
|
},
|
|
|
|
@computed("data.amount", "currency")
|
|
amount(amount, currency) {
|
|
return formatAmount(amount, currency);
|
|
},
|
|
|
|
@computed("data.interval")
|
|
interval(interval) {
|
|
return interval || "once";
|
|
},
|
|
|
|
@computed("data.anchor", "interval")
|
|
period(anchor, interval) {
|
|
return I18n.t(`discourse_donations.period.${interval}`, {
|
|
anchor: formatAnchor(interval, moment.unix(anchor))
|
|
});
|
|
},
|
|
|
|
cancelSubscription() {
|
|
const subscriptionId = this.get("subscription.id");
|
|
this.set("updating", true);
|
|
|
|
ajax("/donate/charges/cancel-subscription", {
|
|
data: {
|
|
subscription_id: subscriptionId
|
|
},
|
|
method: "put"
|
|
})
|
|
.then(result => {
|
|
if (result.success) {
|
|
this.set("subscription", result.subscription);
|
|
}
|
|
})
|
|
.catch(popupAjaxError)
|
|
.finally(() => {
|
|
this.set("updating", false);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
cancelSubscription() {
|
|
showModal("cancel-subscription", {
|
|
model: {
|
|
currency: this.get("currency"),
|
|
amount: this.get("amount"),
|
|
period: this.get("period"),
|
|
confirm: () => this.cancelSubscription()
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|