Prevent duplicate ranged comment chips on rerender
Previously, changing any diff preferences would leave
the old chip on and attach the thread element again,
creating a duplicate chip.
Change-Id: I0b2220320b163ae1341f9829ad45d9f58a35b7fb
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
index 661d5d9..f0a3703 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
@@ -968,6 +968,9 @@
while (this.$.diffTable.hasChildNodes()) {
this.$.diffTable.removeChild(this.$.diffTable.lastChild!);
}
+ this.querySelectorAll('gr-ranged-comment-chip').forEach(element =>
+ element.remove()
+ );
}
_computeDiffHeaderItems(
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
index 9137be6..2cc9c10 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
@@ -703,6 +703,42 @@
element.querySelector('gr-ranged-comment-chip').range, range);
});
+ test('no duplicate range chip for same thread', async () => {
+ const range = {
+ start_line: 1,
+ end_line: 7,
+ start_character: 0,
+ end_character: 0,
+ };
+ const threadEl = document.createElement('div');
+ threadEl.className = 'comment-thread';
+ threadEl.setAttribute('diff-side', 'right');
+ threadEl.setAttribute('line-num', 1);
+ threadEl.setAttribute('range', JSON.stringify(range));
+ threadEl.setAttribute('slot', 'right-1');
+ const firstChip = document.createElement('gr-ranged-comment-chip');
+ firstChip.range = range;
+ firstChip.setAttribute('threadElRootId', threadEl.rootId);
+ firstChip.setAttribute('slot', 'right-1');
+ const content = [{
+ a: [],
+ b: [],
+ }, {
+ ab: Array(8).fill('text'),
+ }];
+ setupSampleDiff({content});
+
+ element.appendChild(firstChip);
+ await flush();
+ element._diffChanged(element.diff);
+ await flush();
+ element.appendChild(threadEl);
+ await flush();
+
+ assert.equal(
+ element.querySelectorAll('gr-ranged-comment-chip').length, 1);
+ });
+
test('removes long range comment chip when comment is discarded',
async () => {
const range = {