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; } } };