osb/spark/resources/assets/js/mixins/register.js
2017-11-03 16:26:07 +11:00

139 lines
3.4 KiB
JavaScript
Vendored

module.exports = {
/**
* The mixin's data.
*/
data() {
return {
plans: [],
selectedPlan: null,
invitation: null,
invalidInvitation: false
};
},
methods: {
/**
* Get the active plans for the application.
*/
getPlans() {
if ( ! Spark.cardUpFront) {
return;
}
axios.get('/spark/plans')
.then(response => {
var plans = response.data;
this.plans = _.where(plans, {type: "user"}).length > 0
? _.where(plans, {type: "user"})
: _.where(plans, {type: "team"});
this.selectAppropriateDefaultPlan();
});
},
/**
* Get the invitation specified in the query string.
*/
getInvitation() {
axios.get(`/invitations/${this.query.invitation}`)
.then(response => {
this.invitation = response.data;
})
.catch(response => {
this.invalidInvitation = true;
});
},
/**
* Select the appropriate default plan for registration.
*/
selectAppropriateDefaultPlan() {
if (this.query.plan) {
this.selectPlanById(this.query.plan) || this.selectPlanByName(this.query.plan);
} else if (this.query.invitation) {
this.selectFreePlan();
} else if (this.paidPlansForActiveInterval.length > 0) {
this.selectPlan(this.paidPlansForActiveInterval[0]);
} else {
this.selectFreePlan();
}
if (this.shouldShowYearlyPlans()) {
this.showYearlyPlans();
}
},
/**
* Select the free plan.
*/
selectFreePlan() {
const plan = _.find(this.plans, plan => plan.price === 0);
if (typeof plan !== 'undefined') {
this.selectPlan(plan);
}
},
/**
* Select the plan with the given id.
*/
selectPlanById(id) {
_.each(this.plans, plan => {
if (plan.id == id) {
this.selectPlan(plan);
}
});
return this.selectedPlan;
},
/**
* Select the plan with the given name.
*/
selectPlanByName(name) {
_.each(this.plans, plan => {
if (plan.name == name) {
this.selectPlan(plan);
}
});
return this.selectedPlan;
},
/**
* Determine if the given plan is selected.
*/
isSelected(plan) {
return this.selectedPlan && plan.id == this.selectedPlan.id;
},
/**
* Select the given plan.
*/
selectPlan(plan) {
this.selectedPlan = plan;
this.registerForm.plan = plan.id;
},
/**
* Determine if we should show the yearly plans.
*/
shouldShowYearlyPlans(){
return (this.monthlyPlans.length == 0 && this.yearlyPlans.length > 0) ||
this.selectedPlan.interval == 'yearly'
}
}
};