Show the correct comments for a given message
Now that reviewer updates are interleaved with the messages displayed
by gr-messages-list, we can no longer count on the dom-repeat index to
look up each message when we find its associated contents. As a quick
fix, resolve the message by its id instead.
Bug: Issue 4357
Change-Id: I311e8e4498d7827d9d005ee4406b66a88d9ca5f0
diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.html b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.html
index b6b6d6d..3ae6b44 100644
--- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.html
+++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.html
@@ -54,7 +54,7 @@
<gr-message
change-num="[[changeNum]]"
message="[[message]]"
- comments="[[_computeCommentsForMessage(comments, message, index)]]"
+ comments="[[_computeCommentsForMessage(comments, message)]]"
project-config="[[projectConfig]]"
show-reply-button="[[showReplyButtons]]"
on-scroll-to="_handleScrollTo"
diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js
index 4462fdf..e7a0573 100644
--- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js
+++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.js
@@ -59,26 +59,31 @@
_computeItems: function(messages, reviewerUpdates) {
messages = messages || [];
reviewerUpdates = reviewerUpdates || [];
+ var mi = 0;
+ var ri = 0;
var result = [];
var mDate;
var rDate;
- while (reviewerUpdates.length || messages.length) {
- if (!reviewerUpdates.length) {
- result = result.concat(messages);
+ for (var i = 0; i < messages.length; i++) {
+ messages[i]._index = i;
+ }
+ while (mi < messages.length || ri < reviewerUpdates.length) {
+ if (mi >= messages.length) {
+ result = result.concat(reviewerUpdates.slice(ri));
break;
- } else if (!messages.length) {
- result = result.concat(reviewerUpdates);
+ }
+ if (ri >= reviewerUpdates.length) {
+ result = result.concat(messages.slice(mi));
break;
+ }
+ mDate = mDate || util.parseDate(messages[mi].date);
+ rDate = rDate || util.parseDate(reviewerUpdates[ri].updated);
+ if (rDate < mDate) {
+ result.push(reviewerUpdates[ri++]);
+ rDate = null;
} else {
- mDate = mDate || util.parseDate(messages[0].date);
- rDate = rDate || util.parseDate(reviewerUpdates[0].updated);
- if (rDate < mDate) {
- result.push(reviewerUpdates.shift());
- rDate = null;
- } else {
- result.push(messages.shift());
- mDate = null;
- }
+ result.push(messages[mi++]);
+ mDate = null;
}
}
return result;
@@ -115,11 +120,11 @@
return expanded ? 'Collapse all' : 'Expand all';
},
- _computeCommentsForMessage: function(comments, message, index) {
- if (!message.message) {
+ _computeCommentsForMessage: function(comments, message) {
+ if (message._index === undefined || !comments || !this.messages) {
return [];
}
- comments = comments || {};
+ var index = message._index;
var messages = this.messages || [];
var msgComments = {};
var mDate = util.parseDate(message.date);