Add owner and (editable) reviewers to reply dialog
This change adds two sections to the top of the reply dialog: owner
and reviewers. The owner section is purely informative. The reviewers
section is editable. The user can queue up one or more new reviewers
in this section. They will not be added as reviewers to the change
until (and unless) the user posts the reply.
Change-Id: I025ece2650c31817b3f1817bc0b6f8c2c1ba2e3d
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
index a0a9305..9ddd66d9 100644
--- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
+++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
@@ -93,7 +93,7 @@
<span class="title">Reviewers</span>
<span class="value">
<gr-reviewer-list
- change="[[change]]"
+ change="{{change}}"
mutable="[[mutable]]"
suggest-from="[[serverConfig.suggest.from]]"></gr-reviewer-list>
</span>
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
index 8e5a44a..eeae3b1 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
@@ -248,7 +248,7 @@
<section class="changeInfo">
<div class="changeInfo-column changeMetadata">
<gr-change-metadata
- change="[[_change]]"
+ change="{{_change}}"
commit-info="[[_commitInfo]]"
server-config="[[serverConfig]]"
mutable="[[_loggedIn]]"></gr-change-metadata>
@@ -311,7 +311,7 @@
on-iron-overlay-opened="_handleReplyOverlayOpen"
with-backdrop>
<gr-reply-dialog id="replyDialog"
- change-num="[[_changeNum]]"
+ change="[[_change]]"
patch-num="[[_patchRange.patchNum]]"
revisions="[[_change.revisions]]"
labels="[[_change.labels]]"
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.html b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.html
index 556691a..89cb4a2 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.html
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.html
@@ -21,6 +21,7 @@
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
+<link rel="import" href="../gr-account-list/gr-account-list.html">
<dom-module id="gr-reply-dialog">
<template>
@@ -43,11 +44,26 @@
section {
border-top: 1px solid #ddd;
padding: .5em .75em;
+ width: 100%;
}
.labelsContainer,
.actionsContainer {
flex-shrink: 0;
}
+ .peopleContainer {
+ display: table;
+ }
+ .peopleList {
+ display: flex;
+ }
+ .peopleListLabel {
+ color: #666;
+ min-width: 7em;
+ padding-right: .5em;
+ }
+ gr-account-list {
+ flex: 1;
+ }
.textareaContainer {
position: relative;
display: flex;
@@ -105,6 +121,24 @@
}
</style>
<div class="container">
+ <section class="peopleContainer">
+ <div class="peopleList">
+ <div class="peopleListLabel">Owner</div>
+ <gr-account-list readonly accounts="[[_owners]]">
+ </gr-account-list>
+ </div>
+ </section>
+ <section class="peopleContainer">
+ <div class="peopleList">
+ <div class="peopleListLabel">Reviewers</div>
+ <gr-account-list
+ id="reviewers"
+ accounts="[[_reviewers]]"
+ change="[[change]]"
+ placeholder="Add reviewer...">
+ </gr-account-list>
+ </div>
+ </section>
<section class="textareaContainer">
<iron-autogrow-textarea
id="textarea"
@@ -136,7 +170,7 @@
<template is="dom-if" if="[[!_computeShowLabels(patchNum, revisions)]]">
<span class="labelsNotShown">
Labels are not shown because this is not the most recent patch set.
- <a href$="/c/[[changeNum]]">Go to the latest patch set.</a>
+ <a href$="/c/[[change._number]]">Go to the latest patch set.</a>
</span>
</template>
</section>
@@ -144,7 +178,7 @@
<h3>[[_computeDraftsTitle(diffDrafts)]]</h3>
<gr-comment-list
comments="[[diffDrafts]]"
- change-num="[[changeNum]]"
+ change-num="[[change._number]]"
patch-num="[[patchNum]]"></gr-comment-list>
</section>
<section class="actionsContainer">
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
index 0ee779e..3f64ad9 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js
@@ -30,7 +30,7 @@
*/
properties: {
- changeNum: String,
+ change: Object,
patchNum: String,
revisions: Object,
disabled: {
@@ -47,12 +47,18 @@
permittedLabels: Object,
_account: Object,
+ _owners: Array,
+ _reviewers: Array,
},
behaviors: [
Gerrit.RESTClientBehavior,
],
+ observers: [
+ '_changeUpdated(change.*)',
+ ],
+
attached: function() {
this._getAccount().then(function(account) {
this._account = account;
@@ -105,6 +111,21 @@
if (this.draft != null) {
obj.message = this.draft;
}
+
+ var newReviewers = this.$.reviewers.additions();
+ newReviewers.forEach(function(reviewer) {
+ var reviewerId;
+ if (reviewer.account) {
+ reviewerId = reviewer.account._account_id;
+ } else if (reviewer.group) {
+ reviewerId = reviewer.group.id;
+ }
+ if (!obj.reviewers) {
+ obj.reviewers = [];
+ }
+ obj.reviewers.push({reviewer: reviewerId});
+ });
+
this.disabled = true;
return this._saveReview(obj).then(function(response) {
this.disabled = false;
@@ -182,6 +203,32 @@
return permittedLabels[label];
},
+ _changeUpdated: function(changeRecord) {
+ if (!changeRecord.path || !changeRecord.base) {
+ return;
+ }
+
+ if (changeRecord.path !== 'change' &&
+ changeRecord.path !== 'change.reviewers.CC.splices' &&
+ changeRecord.path !== 'change.reviewers.REVIEWER.splices') {
+ return;
+ }
+
+ var owner = changeRecord.base.owner;
+ this._owners = [owner];
+
+ if (!changeRecord.base.reviewers) {
+ return;
+ }
+
+ var reviewers = changeRecord.base.reviewers.REVIEWER || [];
+ reviewers = reviewers.concat(changeRecord.base.reviewers.CC);
+ reviewers = reviewers.filter(function(account) {
+ return account && account._account_id !== owner._account_id;
+ }.bind(this));
+ this._reviewers = reviewers;
+ },
+
_getAccount: function() {
return this.$.restAPI.getAccount();
},
@@ -197,7 +244,7 @@
},
_saveReview: function(review) {
- return this.$.restAPI.saveChangeReview(this.changeNum, this.patchNum,
+ return this.$.restAPI.saveChangeReview(this.change._number, this.patchNum,
review);
},
});
diff --git a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.js b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.js
index f5d7ee7..45bf8fe 100644
--- a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.js
+++ b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.js
@@ -38,7 +38,7 @@
_handleRemoveTap: function(e) {
e.preventDefault();
- this.fire('remove', {account: this.account}, {bubbles: false});
+ this.fire('remove', {account: this.account});
},
_getHasAvatars: function() {