diff options
Diffstat (limited to 'app/assets/javascripts/boards/models/issue.js')
-rw-r--r-- | app/assets/javascripts/boards/models/issue.js | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/app/assets/javascripts/boards/models/issue.js b/app/assets/javascripts/boards/models/issue.js index dd92d3c8552..f858b162c6b 100644 --- a/app/assets/javascripts/boards/models/issue.js +++ b/app/assets/javascripts/boards/models/issue.js @@ -4,7 +4,8 @@ /* global ListAssignee */ import Vue from 'vue'; -import '~/vue_shared/models/label'; +import './label'; +import { isEE, convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import IssueProject from './project'; import boardsStore from '../stores/boards_store'; @@ -28,7 +29,6 @@ class ListIssue { this.referencePath = obj.reference_path; this.path = obj.real_path; this.toggleSubscriptionEndpoint = obj.toggle_subscription_endpoint; - this.milestone_id = obj.milestone_id; this.project_id = obj.project_id; this.timeEstimate = obj.time_estimate; this.assignableLabelsEndpoint = obj.assignable_labels_endpoint; @@ -39,6 +39,7 @@ class ListIssue { if (obj.milestone) { this.milestone = new ListMilestone(obj.milestone); + this.milestone_id = obj.milestone.id; } obj.labels.forEach(label => { @@ -88,6 +89,19 @@ class ListIssue { this.assignees = []; } + addMilestone(milestone) { + const miletoneId = this.milestone ? this.milestone.id : null; + if (isEE && milestone.id !== miletoneId) { + this.milestone = new ListMilestone(milestone); + } + } + + removeMilestone(removeMilestone) { + if (isEE && removeMilestone && removeMilestone.id === this.milestone.id) { + this.milestone = {}; + } + } + getLists() { return boardsStore.state.lists.filter(list => list.findIssue(this.id)); } @@ -119,7 +133,17 @@ class ListIssue { } const projectPath = this.project ? this.project.path : ''; - return Vue.http.patch(`${this.path}.json`, data); + return Vue.http.patch(`${this.path}.json`, data).then(({ body = {} } = {}) => { + /** + * Since post implementation of Scoped labels, server can reject + * same key-ed labels. To keep the UI and server Model consistent, + * we're just assigning labels that server echo's back to us when we + * PATCH the said object. + */ + if (body) { + this.labels = convertObjectPropsToCamelCase(body.labels, { deep: true }); + } + }); } } |