Add experimental labelchange event in JS API
It’s useful to know when a label is changed so that action can
be taken within the change view. For instance, actions added to
the interface by the plugin may need to be updated.
Feature: Issue 3915
Change-Id: I9f95d6fcb9a15970ef3ed74fad15588074d6847a
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
index 6af4493..f19d528 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -93,6 +93,10 @@
Gerrit.RESTClientBehavior,
],
+ observers: [
+ '_labelsChanged(_change.labels.*)',
+ ],
+
ready: function() {
this._headerEl = this.$$('.header');
},
@@ -485,6 +489,13 @@
}
},
+ _labelsChanged: function(changeRecord) {
+ if (!changeRecord) { return; }
+ this.$.jsAPI.handleEvent(this.$.jsAPI.EventType.LABEL_CHANGE, {
+ change: this._change,
+ });
+ },
+
_openReplyDialog: function() {
this.$.replyOverlay.open().then(function() {
this.$.replyOverlay.setFocusStops(this.$.replyDialog.getFocusStops());
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.js
index cf4edf3..3a7fe0b 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.js
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.js
@@ -16,6 +16,7 @@
var EventType = {
HISTORY: 'history',
+ LABEL_CHANGE: 'labelchange',
SHOW_CHANGE: 'showchange',
SUBMIT_CHANGE: 'submitchange',
COMMENT: 'comment',
@@ -53,6 +54,9 @@
case EventType.COMMENT:
this._handleComment(detail);
break;
+ case EventType.LABEL_CHANGE:
+ this._handleLabelChange(detail);
+ break;
default:
console.warn('handleEvent called with unsupported event type:', type);
break;
@@ -133,6 +137,16 @@
});
},
+ _handleLabelChange: function(detail) {
+ this._getEventCallbacks(EventType.LABEL_CHANGE).forEach(function(cb) {
+ try {
+ cb(detail.change);
+ } catch (err) {
+ console.error(err);
+ }
+ });
+ },
+
_getEventCallbacks: function(type) {
return this._eventCallbacks[type] || [];
},
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
index 76fa91b..959ba64 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
@@ -97,6 +97,17 @@
element.handleEvent(element.EventType.COMMENT, {node: testCommentNode});
});
+ test('labelchange event', function(done) {
+ var testChange = {_number: 42};
+ plugin.on(element.EventType.LABEL_CHANGE, throwErrFn);
+ plugin.on(element.EventType.LABEL_CHANGE, function(change) {
+ assert.deepEqual(change, testChange);
+ assert.isTrue(errorStub.calledOnce);
+ done();
+ });
+ element.handleEvent(element.EventType.LABEL_CHANGE, {change: testChange});
+ });
+
test('submitchange', function() {
plugin.on(element.EventType.SUBMIT_CHANGE, throwErrFn);
plugin.on(element.EventType.SUBMIT_CHANGE, function() { return true; });