summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2016-08-12 15:10:05 -0500
committerDouwe Maan <douwe@selenight.nl>2016-08-12 15:10:05 -0500
commit33edde50ab9a1f218ee4a5c9d2493a3d49d9b359 (patch)
tree4a6a086000e376f54b1d2ce0ae8065bba1ce4079
parentc80f5e0a1c4906bf01ff02542d3c6b2afc79c5ff (diff)
downloadgitlab-ce-33edde50ab9a1f218ee4a5c9d2493a3d49d9b359.tar.gz
Don’t show “Resolve discussion” for non-author/members
-rw-r--r--app/assets/javascripts/diff_notes/components/comment_resolve_btn.js.es66
-rw-r--r--app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js.es69
-rw-r--r--app/assets/javascripts/diff_notes/models/discussion.js.es67
-rw-r--r--app/assets/javascripts/diff_notes/stores/comments.js.es611
-rw-r--r--app/views/discussions/_resolve_all.html.haml16
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 }}