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 b61062a4e9..66667ba0cb 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 @@ -303,6 +303,7 @@ '_labelsChanged(_change.labels.*)', '_paramsAndChangeChanged(params, _change)', '_patchNumChanged(_patchRange.patchNum)', + '_loadDynamicTabHeaderAndContent(_change, _selectedRevision)', ], keyboardShortcuts() { @@ -337,17 +338,6 @@ this._setDiffViewMode(); }); - Gerrit.awaitPluginsLoaded().then(() => { - this._dynamicTabHeaderEndpoints = - Gerrit._endpoints.getDynamicEndpoints('change-view-tab-header'); - this._dynamicTabContentEndpoints = - Gerrit._endpoints.getDynamicEndpoints('change-view-tab-content'); - if (this._dynamicTabContentEndpoints.length - !== this._dynamicTabHeaderEndpoints.length) { - console.warn('Different number of tab headers and tab content.'); - } - }); - this.addEventListener('comment-save', this._handleCommentSave.bind(this)); this.addEventListener('comment-refresh', this._reloadDrafts.bind(this)); this.addEventListener('comment-discard', @@ -770,6 +760,41 @@ }); }, + /** + * We use an observer to observe 'change' and 'selectedRevision' + * variables. This fixes an issue under Polymer 2 so that the dynamic + * plugins loads when these variables load. + */ + _loadDynamicTabHeaderAndContent(change, selectedRevision) { + // These vars are unused, but because primaryTabs extension point + // uses it, we makes sure we doin't load the plugin until these vars + // exist. + if (!change || !selectedRevision) return; + + // We cache the _dynamicTabHeaderEndpoints and _dynamicTabContentEndpoints + // var so that we doin't keep loading the same dynamic plugin + // over and over when 'change' or 'selectedRevision' change. + if (this._dynamicTabHeaderEndpoints || this._dynamicTabContentEndpoints) { + return; + } + + Gerrit.awaitPluginsLoaded().then(() => { + this._dynamicTabHeaderEndpoints = + Gerrit._endpoints.getDynamicEndpoints('change-view-tab-header'); + this._dynamicTabContentEndpoints = + Gerrit._endpoints.getDynamicEndpoints('change-view-tab-content'); + if (this._dynamicTabContentEndpoints.length + !== this._dynamicTabHeaderEndpoints.length) { + console.warn('Different number of tab headers and tab content.'); + } + }).then(() => { + // We need a second then(..) to ensure that the dynamic endpoints + // are created before we call _performPostLoadTasks(). This ensures it has + // enough time before the primary tab gets selected. + this._performPostLoadTasks(); + }); + }, + _paramsAndChangeChanged(value) { // If the change number or patch range is different, then reset the // selected file index.