Move reviewer to CC in reply dialog UI

If user set to CC user who is already in reviewer,
we delete user from reviewer list and put him to CC list.

Change-Id: I6ff786519770f356df3f09a958f5ffac5b9fc9e0
This commit is contained in:
Milutin Kristofic
2019-09-16 14:29:27 +02:00
parent 462095d039
commit f6ccd41fb9
2 changed files with 49 additions and 9 deletions

View File

@@ -315,31 +315,37 @@
},
_ccsChanged(splices) {
if (splices && splices.indexSplices) {
this._reviewersMutated = true;
this._processReviewerChange(splices.indexSplices, ReviewerTypes.CC);
}
this._reviewerTypeChanged(splices, ReviewerTypes.CC);
},
_reviewersChanged(splices) {
this._reviewerTypeChanged(splices, ReviewerTypes.REVIEWER);
},
_reviewerTypeChanged(splices, reviewerType) {
if (splices && splices.indexSplices) {
this._reviewersMutated = true;
this._processReviewerChange(splices.indexSplices,
ReviewerTypes.REVIEWER);
reviewerType);
let key;
let index;
let account;
// Remove any accounts that already exist as a CC.
// Remove any accounts that already exist as a CC for reviewer
// or vice versa.
const isReviewer = ReviewerTypes.REVIEWER === reviewerType;
for (const splice of splices.indexSplices) {
for (let i = 0; i < splice.addedCount; i++) {
account = splice.object[splice.index + i];
key = this._accountOrGroupKey(account);
index = this._ccs.findIndex(
const array = isReviewer ? this._ccs : this._reviewers;
index = array.findIndex(
account => this._accountOrGroupKey(account) === key);
if (index >= 0) {
this.splice('_ccs', index, 1);
this.splice(isReviewer ? '_ccs' : '_reviewers', index, 1);
const moveFrom = isReviewer ? 'CC' : 'reviewer';
const moveTo = isReviewer ? 'reviewer' : 'CC';
const message = (account.name || account.email || key) +
' moved from CC to reviewer.';
` moved from ${moveFrom} to ${moveTo}.`;
this.fire('show-alert', {message});
}
}

View File

@@ -733,6 +733,40 @@ limitations under the License.
assert.deepEqual(element._reviewersPendingRemove.CC, [cc1, cc4, cc3]);
});
test('moving from reviewer to cc', () => {
element._reviewersPendingRemove = {
CC: [],
REVIEWER: [],
};
flushAsynchronousOperations();
const reviewer1 = makeAccount();
const reviewer2 = makeAccount();
const reviewer3 = makeAccount();
const cc1 = makeAccount();
const cc2 = makeAccount();
const cc3 = makeAccount();
const cc4 = makeAccount();
element._reviewers = [reviewer1, reviewer2, reviewer3];
element._ccs = [cc1, cc2, cc3, cc4];
element.push('_ccs', reviewer1);
flushAsynchronousOperations();
assert.deepEqual(element._reviewers,
[reviewer2, reviewer3]);
assert.deepEqual(element._ccs, [cc1, cc2, cc3, cc4, reviewer1]);
assert.deepEqual(element._reviewersPendingRemove.REVIEWER, [reviewer1]);
element.push('_ccs', reviewer3, reviewer2);
flushAsynchronousOperations();
assert.deepEqual(element._reviewers, []);
assert.deepEqual(element._ccs,
[cc1, cc2, cc3, cc4, reviewer1, reviewer3, reviewer2]);
assert.deepEqual(element._reviewersPendingRemove.REVIEWER,
[reviewer1, reviewer3, reviewer2]);
});
test('migrate reviewers between states', done => {
element._reviewersPendingRemove = {
CC: [],