osb/spark/resources/assets/js/settings/teams/team-members.js
2017-11-03 16:26:07 +11:00

145 lines
3.4 KiB
JavaScript
Vendored

module.exports = {
props: ['user', 'team'],
/**
* The component's data.
*/
data() {
return {
roles: [],
updatingTeamMember: null,
deletingTeamMember: null,
updateTeamMemberForm: $.extend(true, new SparkForm({
role: ''
}), Spark.forms.updateTeamMember),
deleteTeamMemberForm: new SparkForm({})
}
},
/**
* The component has been created by Vue.
*/
created() {
this.getRoles();
},
methods: {
/**
* Get the available team member roles.
*/
getRoles() {
axios.get(`/settings/${Spark.pluralTeamString}/roles`)
.then(response => {
this.roles = response.data;
});
},
/**
* Edit the given team member.
*/
editTeamMember(member) {
this.updatingTeamMember = member;
this.updateTeamMemberForm.role = member.pivot.role;
$('#modal-update-team-member').modal('show');
},
/**
* Update the team member.
*/
update() {
Spark.put(this.urlForUpdating, this.updateTeamMemberForm)
.then(() => {
Bus.$emit('updateTeam');
$('#modal-update-team-member').modal('hide');
});
},
/**
* Display the approval modal for the deletion of a team member.
*/
approveTeamMemberDelete(member) {
this.deletingTeamMember = member;
$('#modal-delete-member').modal('show');
},
/**
* Delete the given team member.
*/
deleteMember() {
Spark.delete(this.urlForDeleting, this.deleteTeamMemberForm)
.then(() => {
Bus.$emit('updateTeam');
$('#modal-delete-member').modal('hide');
});
},
/**
* Determine if the current user can edit a team member.
*/
canEditTeamMember(member) {
return this.user.id === this.team.owner_id && this.user.id !== member.id
},
/**
* Determine if the current user can delete a team member.
*/
canDeleteTeamMember(member) {
return this.user.id === this.team.owner_id && this.user.id !== member.id
},
/**
* Get the displayable role for the given team member.
*/
teamMemberRole(member) {
if (this.roles.length == 0) {
return '';
}
if (member.pivot.role == 'owner') {
return 'Owner';
}
const role = _.find(this.roles, role => role.value == member.pivot.role);
if (typeof role !== 'undefined') {
return role.text;
}
}
},
computed: {
/**
* Get the URL for updating a team member.
*/
urlForUpdating: function () {
return `/settings/${Spark.pluralTeamString}/${this.team.id}/members/${this.updatingTeamMember.id}`;
},
/**
* Get the URL for deleting a team member.
*/
urlForDeleting() {
return `/settings/${Spark.pluralTeamString}/${this.team.id}/members/${this.deletingTeamMember.id}`;
}
}
};