149 lines
3.4 KiB
JavaScript
149 lines
3.4 KiB
JavaScript
|
module.exports = {
|
||
|
props: ['user', 'plans'],
|
||
|
|
||
|
|
||
|
/**
|
||
|
* The component's data.
|
||
|
*/
|
||
|
data() {
|
||
|
return {
|
||
|
loading: false,
|
||
|
profile: null,
|
||
|
revenue: 0
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The component has been created by Vue.
|
||
|
*/
|
||
|
created() {
|
||
|
var self = this;
|
||
|
|
||
|
this.$parent.$on('showUserProfile', function(id) {
|
||
|
self.getUserProfile(id);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Prepare the component.
|
||
|
*/
|
||
|
mounted() {
|
||
|
Mousetrap.bind('esc', e => this.showSearch());
|
||
|
},
|
||
|
|
||
|
|
||
|
methods: {
|
||
|
/**
|
||
|
* Get the profile user.
|
||
|
*/
|
||
|
getUserProfile(id) {
|
||
|
this.loading = true;
|
||
|
|
||
|
axios.get('/spark/kiosk/users/' + id + '/profile')
|
||
|
.then(response => {
|
||
|
this.profile = response.data.user;
|
||
|
this.revenue = response.data.revenue;
|
||
|
|
||
|
this.loading = false;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Impersonate the given user.
|
||
|
*/
|
||
|
impersonate(user) {
|
||
|
window.location = '/spark/kiosk/users/impersonate/' + user.id;
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Show the discount modal for the given user.
|
||
|
*/
|
||
|
addDiscount(user) {
|
||
|
Bus.$emit('addDiscount', user);
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the plan the user is actively subscribed to.
|
||
|
*/
|
||
|
activePlan(billable) {
|
||
|
if (this.activeSubscription(billable)) {
|
||
|
var activeSubscription = this.activeSubscription(billable);
|
||
|
|
||
|
return _.find(this.plans, (plan) => {
|
||
|
return plan.id == activeSubscription.provider_plan;
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the active, valid subscription for the user.
|
||
|
*/
|
||
|
activeSubscription(billable) {
|
||
|
var subscription = this.subscription(billable);
|
||
|
|
||
|
if ( ! subscription ||
|
||
|
(subscription.ends_at &&
|
||
|
moment.utc().isAfter(moment.utc(subscription.ends_at)))) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return subscription;
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the active subscription instance.
|
||
|
*/
|
||
|
subscription(billable) {
|
||
|
if ( ! billable) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const subscription = _.find(
|
||
|
billable.subscriptions,
|
||
|
subscription => subscription.name == 'default'
|
||
|
);
|
||
|
|
||
|
if (typeof subscription !== 'undefined') {
|
||
|
return subscription;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the customer URL on the billing provider's website.
|
||
|
*/
|
||
|
customerUrlOnBillingProvider(billable) {
|
||
|
if (! billable) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (this.spark.usesStripe) {
|
||
|
return 'https://dashboard.stripe.com/customers/' + billable.stripe_id;
|
||
|
} else {
|
||
|
var domain = Spark.env == 'production' ? '' : 'sandbox.';
|
||
|
|
||
|
return 'https://' + domain + 'braintreegateway.com/merchants/' +
|
||
|
Spark.braintreeMerchantId +
|
||
|
'/customers/' +
|
||
|
billable.braintree_id;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Show the search results and hide the user profile.
|
||
|
*/
|
||
|
showSearch() {
|
||
|
this.$parent.$emit('showSearch');
|
||
|
|
||
|
this.profile = null;
|
||
|
}
|
||
|
}
|
||
|
};
|