Prevent save while disabled
The [Save] button cannot be clicked when the comment is disabled (via
`pointer-events: disabled;` in the CSS), and clicking the [Save] button
results in setting disabled to true. However, it is possible to click
save again before the style is applied. It's also possible to trigger
the button using a non-pointer-event (such as a key). With this change,
an extra check is added to the [Save] button's click handler to prevent
clicks when the component is disabled.
Bug: Issue 6972
Change-Id: I16117af31c5e7b5d7d49a025eebb690d8802b64b
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
index c02aec5..23cf5cf 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
@@ -390,6 +390,10 @@
_handleSave(e) {
e.preventDefault();
+
+ // Ignore saves started while already saving.
+ if (this.disabled) { return; }
+
this.set('comment.__editing', false);
this.save();
},
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
index 5793b05..824a175 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
@@ -606,6 +606,23 @@
});
});
+ test('draft prevent save when disabled', () => {
+ const saveStub = sandbox.stub(element, 'save');
+ element.draft = true;
+ MockInteractions.tap(element.$$('.edit'));
+ element._messageText = 'good news, everyone!';
+ element.flushDebouncer('fire-update');
+ element.flushDebouncer('store');
+
+ element.disabled = true;
+ MockInteractions.tap(element.$$('.save'));
+ assert.isFalse(saveStub.called);
+
+ element.disabled = false;
+ MockInteractions.tap(element.$$('.save'));
+ assert.isTrue(saveStub.calledOnce);
+ });
+
test('clicking on date link does not trigger nav', () => {
const showStub = sinon.stub(page, 'show');
const dateEl = element.$$('.date');