Read user-prefs before initializing layers
This was racing with the promise made in the constructor.
Change-Id: I27b8dadeca618695ca23b8c888d089c779e2c153
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
index 463163c..90d6218 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
@@ -223,9 +223,6 @@
@property({type: Boolean})
_loggedIn = false;
- @property({type: Boolean})
- disableTokenHighlighting = false;
-
@property({type: String})
_errorMessage: string | null = null;
@@ -303,11 +300,6 @@
this.addEventListener('diff-context-expanded', event =>
this._handleDiffContextExpanded(event)
);
- appContext.restApiService.getPreferences().then(prefs => {
- if (prefs?.disable_token_highlighting) {
- this.disableTokenHighlighting = prefs.disable_token_highlighting;
- }
- });
}
override ready() {
@@ -335,18 +327,21 @@
super.disconnectedCallback();
}
- initLayers() {
- return getPluginLoader()
- .awaitPluginsLoaded()
- .then(() => {
- assertIsDefined(this.path, 'path');
- this._layers = this._getLayers(this.path);
- this._coverageRanges = [];
- // We kick off fetching the data here, but we don't return the promise,
- // so awaiting initLayers() will not wait for coverage data to be
- // completely loaded.
- this._getCoverageData();
- });
+ async initLayers() {
+ const preferencesPromise = appContext.restApiService.getPreferences();
+ await getPluginLoader().awaitPluginsLoaded();
+ const prefs = await preferencesPromise;
+ const enableTokenHighlight =
+ appContext.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
+ !prefs?.disable_token_highlighting;
+
+ assertIsDefined(this.path, 'path');
+ this._layers = this.getLayers(this.path, enableTokenHighlight);
+ this._coverageRanges = [];
+ // We kick off fetching the data here, but we don't return the promise,
+ // so awaiting initLayers() will not wait for coverage data to be
+ // completely loaded.
+ this._getCoverageData();
}
diffChanged(diff?: DiffInfo) {
@@ -418,12 +413,9 @@
}
}
- private _getLayers(path: string): DiffLayer[] {
+ private getLayers(path: string, enableTokenHighlight: boolean): DiffLayer[] {
const layers = [];
- if (
- appContext.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
- !this.disableTokenHighlighting
- ) {
+ if (enableTokenHighlight) {
layers.push(new TokenHighlightLayer(this));
}
layers.push(this.syntaxLayer);
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
index b37613a..fe4a66a 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -57,7 +57,7 @@
import {GrButton} from '../gr-button/gr-button';
import {KnownExperimentId} from '../../../services/flags/flags';
import {DiffInfo, DiffPreferencesInfo} from '../../../types/diff';
-import {RenderPreferences} from '../../../api/diff';
+import {DiffLayer, RenderPreferences} from '../../../api/diff';
import {
check,
assertIsDefined,
@@ -205,8 +205,8 @@
@property({type: Object})
_selfAccount?: AccountDetailInfo;
- @property({type: Boolean})
- disableTokenHighlighting = false;
+ @property({type: Array})
+ layers: DiffLayer[] = [];
get keyBindings() {
return {
@@ -232,9 +232,7 @@
this._handleCommentUpdate(e as CustomEvent)
);
appContext.restApiService.getPreferences().then(prefs => {
- if (prefs?.disable_token_highlighting) {
- this.disableTokenHighlighting = prefs.disable_token_highlighting;
- }
+ this._initLayers(!!prefs?.disable_token_highlighting);
});
}
@@ -366,17 +364,14 @@
return undefined;
}
- _getLayers(diff?: DiffInfo) {
- if (!diff) return [];
- const layers = [];
+ _initLayers(disableTokenHighlighting: boolean) {
if (
this.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
- !this.disableTokenHighlighting
+ !disableTokenHighlighting
) {
- layers.push(new TokenHighlightLayer(this));
+ this.layers.push(new TokenHighlightLayer(this));
}
- layers.push(this.syntaxLayer);
- return layers;
+ this.layers.push(this.syntaxLayer);
}
_getUrlForViewDiff(
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
index 0752a82..245f71c 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
@@ -232,7 +232,7 @@
id="diff"
change-num="[[changeNum]]"
diff="[[_diff]]"
- layers="[[_getLayers(_diff)]]"
+ layers="[[layers]]"
path="[[path]]"
prefs="[[_prefs]]"
render-prefs="[[_renderPrefs]]"