diff options
author | Douwe Maan <douwe@selenight.nl> | 2016-08-12 15:10:05 -0500 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2016-08-12 15:10:05 -0500 |
commit | 33edde50ab9a1f218ee4a5c9d2493a3d49d9b359 (patch) | |
tree | 4a6a086000e376f54b1d2ce0ae8065bba1ce4079 | |
parent | c80f5e0a1c4906bf01ff02542d3c6b2afc79c5ff (diff) | |
download | gitlab-ce-33edde50ab9a1f218ee4a5c9d2493a3d49d9b359.tar.gz |
Don’t show “Resolve discussion” for non-author/members
5 files changed, 35 insertions, 14 deletions
diff --git a/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es6 b/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es6 index 42fde1b1011..8dc9423c78f 100644 --- a/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es6 +++ b/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es6 @@ -9,10 +9,8 @@ return CommentsStore.state[this.discussionId]; }, showButton: function () { - if (!this.discussion) { - return false; - } else { - return this.discussion.canResolve(); + if (this.discussion) { + return this.discussion.isResolvable(); } }, isDiscussionResolved: function () { diff --git a/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es6 b/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es6 index 78af33bb430..7e427cba53e 100644 --- a/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es6 +++ b/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es6 @@ -8,6 +8,7 @@ mergeRequestId: Number, namespacePath: String, projectPath: String, + canResolve: Boolean, }, data: function() { return { @@ -18,6 +19,11 @@ discussion: function () { return this.discussions[this.discussionId]; }, + showButton: function () { + if (this.discussion) { + return this.discussion.isResolvable(); + } + }, allResolved: function () { if (this.discussion) { return this.discussion.isResolved(); @@ -40,6 +46,9 @@ resolve: function () { ResolveService.toggleResolveForDiscussion(this.namespace, this.mergeRequestId, this.discussionId); } + }, + created: function () { + CommentsStore.createDiscussion(this.discussionId, this.canResolve); } }); })(window); diff --git a/app/assets/javascripts/diff_notes/models/discussion.js.es6 b/app/assets/javascripts/diff_notes/models/discussion.js.es6 index 08b5f7062ca..488714e4870 100644 --- a/app/assets/javascripts/diff_notes/models/discussion.js.es6 +++ b/app/assets/javascripts/diff_notes/models/discussion.js.es6 @@ -3,6 +3,7 @@ class DiscussionModel { this.id = discussionId; this.notes = {}; this.loading = false; + this.canResolve = false; } createNote (noteId, canResolve, resolved, resolved_by) { @@ -68,7 +69,11 @@ class DiscussionModel { } } - canResolve () { + isResolvable () { + if (!this.canResolve) { + return false; + } + for (const noteId in this.notes) { const note = this.notes[noteId]; diff --git a/app/assets/javascripts/diff_notes/stores/comments.js.es6 b/app/assets/javascripts/diff_notes/stores/comments.js.es6 index b1458c63683..69522e1dac5 100644 --- a/app/assets/javascripts/diff_notes/stores/comments.js.es6 +++ b/app/assets/javascripts/diff_notes/stores/comments.js.es6 @@ -4,13 +4,22 @@ get: function (discussionId, noteId) { return this.state[discussionId].getNote(noteId); }, - create: function (discussionId, noteId, canResolve, resolved, resolved_by) { + createDiscussion: function (discussionId, canResolve) { let discussion = this.state[discussionId]; if (!this.state[discussionId]) { discussion = new DiscussionModel(discussionId); Vue.set(this.state, discussionId, discussion); } + if (canResolve !== undefined) { + discussion.canResolve = canResolve; + } + + return discussion; + }, + create: function (discussionId, noteId, canResolve, resolved, resolved_by) { + const discussion = this.createDiscussion(discussionId); + discussion.createNote(noteId, canResolve, resolved, resolved_by); }, update: function (discussionId, noteId, resolved, resolved_by) { diff --git a/app/views/discussions/_resolve_all.html.haml b/app/views/discussions/_resolve_all.html.haml index 5d751c60d2a..7a8767ddba0 100644 --- a/app/views/discussions/_resolve_all.html.haml +++ b/app/views/discussions/_resolve_all.html.haml @@ -1,11 +1,11 @@ -- if discussion.can_resolve?(current_user) - .btn-group{ role: "group" } - %resolve-discussion-btn{ ":namespace-path" => "'#{discussion.project.namespace.path}'", - ":project-path" => "'#{discussion.project.path}'", - ":discussion-id" => "'#{discussion.id}'", - ":merge-request-id" => "#{discussion.noteable.iid}", - "inline-template" => true, - "v-cloak" => true } +- if discussion.for_merge_request? + %resolve-discussion-btn{ ":namespace-path" => "'#{discussion.project.namespace.path}'", + ":project-path" => "'#{discussion.project.path}'", + ":discussion-id" => "'#{discussion.id}'", + ":merge-request-id" => discussion.noteable.iid, + ":can-resolve" => discussion.can_resolve?(current_user), + "inline-template" => true } + .btn-group{ role: "group", "v-if" => "showButton" } %button.btn.btn-default{ type: "button", "@click" => "resolve", ":disabled" => "loading" } = icon("spinner spin", "v-show" => "loading") {{ buttonText }} |