travis-web/app/utils/repo-actions-item-component-mixin.js
2016-01-04 13:15:14 +01:00

73 lines
2.0 KiB
JavaScript

import Ember from 'ember';
export default Ember.Mixin.create({
restarting: false,
cancelling: false,
userHasPermissionForRepo: function() {
var repo, user;
repo = this.get('repo');
user = this.get('user');
if (user && repo) {
return user.hasAccessToRepo(repo);
}
}.property('user.permissions.[]', 'repo', 'user'),
canCancel: function() {
return this.get('item.canCancel') && this.get('userHasPermissionForRepo');
}.property('userHasPermissionForRepo', 'item.canCancel'),
canRestart: function() {
return this.get('item.canRestart') && this.get('userHasPermissionForRepo');
}.property('userHasPermissionForRepo', 'item.canRestart'),
actions: {
restart: function() {
var onFinished;
if (this.get('restarting')) {
return;
}
this.set('restarting', true);
onFinished = () => {
return function() {
return this.set('restarting', false);
};
};
return this.get('item').restart().then(onFinished, onFinished);
},
cancel: function() {
var type;
if (this.get('cancelling')) {
return;
}
this.set('cancelling', true);
type = this.get('type');
return this.get('item').cancel().then(() => {
return function() {
this.set('cancelling', false);
return Travis.flash({
success: (type.capitalize()) + " has been successfully canceled."
});
};
}, () => {
return function(xhr) {
this.set('cancelling', false);
if (xhr.status === 422) {
return Travis.flash({
error: "This " + type + " can't be canceled"
});
} else if (xhr.status === 403) {
return Travis.flash({
error: "You don't have sufficient access to cancel this " + type
});
} else {
return Travis.flash({
error: "An error occured when canceling the " + type
});
}
};
});
}
}
});