Add a popup for configuring checks as a top-level action
Bug: Issue 14336
Change-Id: I09ac406277f1f78c76b6263c9f4f86bb68445c4f
diff --git a/gr-checks/gr-checkers-list.js b/gr-checks/gr-checkers-list.js
index da61b22..1cceb61 100644
--- a/gr-checks/gr-checkers-list.js
+++ b/gr-checks/gr-checkers-list.js
@@ -26,7 +26,7 @@
class GrCheckersList extends Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element)) {
-/** @returns {?} template for this component */
+ /** @returns {?} template for this component */
static get template() { return htmlTemplate; }
/** @returns {string} name of the component */
@@ -39,12 +39,12 @@
*/
static get properties() {
return {
- /**
- * Add observer on pluginRestApi to call getCheckers when it's defined
- * as initially getCheckers was being called before pluginRestApi was
- * initialised by gr-checks-view
- */
+ // This is set by the PopupPluginApi.
+ plugin: {
+ type: Object,
+ },
pluginRestApi: {
+ computed: '_computePluginRestApi(plugin)',
type: Object,
},
// Checker that will be passed to the editOverlay modal
@@ -89,47 +89,18 @@
static get observers() {
return [
'_showCheckers(_checkers, _filter)',
+ '_getCheckers(plugin)',
];
}
- attached() {
- super.attached();
- /**
- * Adding an observer to listBody element as gr-overlay does not
- * automatically resize itself once the getCheckers response comes.
- * Polymer 2 will deprecate use of obserNodes so replacing it
- * with FlattenedNodesObserver
- */
- if (Polymer.FlattenedNodesObserver) {
- this._checkersListObserver = new Polymer.FlattenedNodesObserver(
- this.$.listBody, () => {
- this.$.listOverlay.refit();
- });
- } else {
- this._checkersListObserver = Polymer.dom(this.$.listBody).observeNodes(
- () => {
- this.$.listOverlay.refit();
- });
- }
- }
-
- detached() {
- super.detached();
- Polymer.dom(this.$.listBody).unobserveNodes(this._checkersListObserver);
+ _computePluginRestApi(plugin) {
+ return plugin ? plugin.restApi() : undefined;
}
_contains(target, keyword) {
return target.toLowerCase().includes(keyword.toLowerCase().trim());
}
- _showConfigureOverlay() {
- this.$.listOverlay.open().then(
- () => {
- this._getCheckers();
- }
- );
- }
-
_showCheckers(_checkers, _filter) {
if (!_checkers) return;
if (!_filter) _filter = '';
@@ -179,9 +150,9 @@
}
}
- _getCheckers() {
- if (!this.pluginRestApi) return;
- this.pluginRestApi.get(GET_CHECKERS_URL).then(checkers => {
+ _getCheckers(plugin) {
+ if (!plugin) return;
+ plugin.restApi().get(GET_CHECKERS_URL).then(checkers => {
if (!checkers) { return; }
this._checkers = checkers;
this._startingIndex = 0;
@@ -231,4 +202,4 @@
}
}
-customElements.define(GrCheckersList.is, GrCheckersList);
\ No newline at end of file
+customElements.define(GrCheckersList.is, GrCheckersList);
diff --git a/gr-checks/gr-checkers-list_html.js b/gr-checks/gr-checkers-list_html.js
index 19f224f..1e12723 100644
--- a/gr-checks/gr-checkers-list_html.js
+++ b/gr-checks/gr-checkers-list_html.js
@@ -19,6 +19,11 @@
<style include="shared-styles"></style>
<style include="gr-table-styles"></style>
<style>
+ #container {
+ width: 80vw;
+ height: 80vh;
+ overflow: auto;
+ }
iron-icon {
cursor: pointer;
}
@@ -63,14 +68,9 @@
text-decoration: underline;
cursor: pointer;
}
- #listOverlay {
- max-width: 90%;
- max-height: 90%;
- overflow: auto;
- }
</style>
- <gr-overlay on-fullscreen-overlay-closed="_handleOverlayClosed" id="listOverlay" with-backdrop>
+ <div id="container">
<div id="topContainer">
<div>
<label>Filter:</label>
@@ -133,43 +133,41 @@
</a>
</template>
</nav>
-
- <gr-overlay id="createOverlay">
- <gr-dialog
- id="createDialog"
- confirm-label="Create"
- on-confirm="_handleCreateConfirm"
- on-cancel="_handleCreateCancel">
- <div class="header" slot="header">
- Create Checkers
- </div>
- <div slot="main">
- <gr-create-checkers-dialog
- id="createNewModal"
- plugin-rest-api="[[pluginRestApi]]">
- </gr-create-checkers-dialog>
- </div>
- </gr-dialog>
- </gr-overlay>
- <gr-overlay id="editOverlay">
- <gr-dialog
- id="editDialog"
- confirm-label="Save"
- on-confirm="_handleEditConfirm"
- on-cancel="_handleEditCancel">
- <div class="header" slot="header">
- Edit Checker
- </div>
- <div slot="main">
- <gr-create-checkers-dialog
- checker="[[checker]]"
- plugin-rest-api="[[pluginRestApi]]"
- on-cancel="_handleEditCancel"
- id="editModal">
- </gr-create-checkers-dialog>
- </div>
- </gr-dialog>
- </gr-overlay>
+ </div>
+ <gr-overlay id="createOverlay">
+ <gr-dialog
+ id="createDialog"
+ confirm-label="Create"
+ on-confirm="_handleCreateConfirm"
+ on-cancel="_handleCreateCancel">
+ <div class="header" slot="header">
+ Create Checkers
+ </div>
+ <div slot="main">
+ <gr-create-checkers-dialog
+ id="createNewModal"
+ plugin-rest-api="[[pluginRestApi]]">
+ </gr-create-checkers-dialog>
+ </div>
+ </gr-dialog>
</gr-overlay>
- <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
-`;
\ No newline at end of file
+ <gr-overlay id="editOverlay">
+ <gr-dialog
+ id="editDialog"
+ confirm-label="Save"
+ on-confirm="_handleEditConfirm"
+ on-cancel="_handleEditCancel">
+ <div class="header" slot="header">
+ Edit Checker
+ </div>
+ <div slot="main">
+ <gr-create-checkers-dialog
+ checker="[[checker]]"
+ plugin-rest-api="[[pluginRestApi]]"
+ on-cancel="_handleEditCancel"
+ id="editModal">
+ </gr-create-checkers-dialog>
+ </div>
+ </gr-dialog>
+ </gr-overlay>
+`;
diff --git a/gr-checks/gr-create-checkers-dialog_html.js b/gr-checks/gr-create-checkers-dialog_html.js
index ac75927..dcfd86f 100644
--- a/gr-checks/gr-create-checkers-dialog_html.js
+++ b/gr-checks/gr-create-checkers-dialog_html.js
@@ -170,5 +170,4 @@
</div>
</div>
- <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
-`;
\ No newline at end of file
+`;
diff --git a/gr-checks/plugin.js b/gr-checks/plugin.js
index f8a0a35..dbf3d5a 100644
--- a/gr-checks/plugin.js
+++ b/gr-checks/plugin.js
@@ -14,11 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import './gr-checkers-list.js';
import {computeDuration} from './util.js';
class ChecksFetcher {
- constructor(restApi) {
- this.restApi = restApi;
+ constructor(plugin) {
+ this.plugin = plugin;
+ this.restApi = plugin.restApi();
}
async fetchCurrent() {
@@ -32,6 +34,10 @@
const checks = await this.apiGet('?o=CHECKER');
return {
responseCode: 'OK',
+ actions: [{
+ name: 'Configure Checkers',
+ callback: () => this.plugin.popup('gr-checkers-list'),
+ }],
runs: checks.map(check => this.convert(check)),
};
}
@@ -110,7 +116,7 @@
Gerrit.install(plugin => {
const checksApi = plugin.checks();
- const fetcher = new ChecksFetcher(plugin.restApi());
+ const fetcher = new ChecksFetcher(plugin);
checksApi.register({
fetch: data => fetcher.fetch(data),
});