debian-mirror-gitlab/app/assets/javascripts/boards/components/sidebar/remove_issue.js

75 lines
1.6 KiB
JavaScript
Raw Normal View History

2017-08-17 22:00:37 +05:30
/* eslint-disable no-new */
import Vue from 'vue';
2018-03-17 18:26:18 +05:30
import Flash from '../../../flash';
2017-08-17 22:00:37 +05:30
const Store = gl.issueBoards.BoardsStore;
window.gl = window.gl || {};
window.gl.issueBoards = window.gl.issueBoards || {};
gl.issueBoards.RemoveIssueBtn = Vue.extend({
props: {
issue: {
type: Object,
required: true,
},
list: {
type: Object,
required: true,
},
2018-03-17 18:26:18 +05:30
issueUpdate: {
type: String,
required: true,
},
},
computed: {
updateUrl() {
return this.issueUpdate;
},
2017-08-17 22:00:37 +05:30
},
methods: {
removeIssue() {
const issue = this.issue;
const lists = issue.getLists();
2018-03-17 18:26:18 +05:30
const listLabelIds = lists.map(list => list.label.id);
let labelIds = this.issue.labels
.map(label => label.id)
.filter(id => !listLabelIds.includes(id));
if (labelIds.length === 0) {
labelIds = [''];
}
const data = {
issue: {
label_ids: labelIds,
},
};
Vue.http.patch(this.updateUrl, data).catch(() => {
2017-08-17 22:00:37 +05:30
new Flash('Failed to remove issue from board, please try again.', 'alert');
lists.forEach((list) => {
list.addIssue(issue);
});
});
// Remove from the frontend store
lists.forEach((list) => {
list.removeIssue(issue);
});
Store.detail.issue = {};
},
},
template: `
<div
2017-09-10 17:25:29 +05:30
class="block list">
2017-08-17 22:00:37 +05:30
<button
class="btn btn-default btn-block"
type="button"
@click="removeIssue">
Remove from board
</button>
</div>
`,
});