Fix issue in gr-repo with hasConfigChanged being triggered on page load Change-Id: I572ce021261a99f54c0763f1e6c449ac53eff2c7
diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts index 89d798a..27ebf06 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts
@@ -50,6 +50,8 @@ import {deepClone} from '../../../utils/object-util'; import {LitElement, PropertyValues, css, html} from 'lit'; import {customElement, property, state} from 'lit/decorators'; +import {preferences$} from '../../../services/user/user-model'; +import {subscribe} from '../../lit/subscription-controller'; const STATES = { active: {value: ProjectState.ACTIVE, label: 'Active'}, @@ -98,13 +100,13 @@ @property({type: String}) repo?: RepoName; - /* private but used in test */ + // private but used in test @state() loading = true; - /* private but used in test */ + // private but used in test @state() repoConfig?: ConfigInfo; - /* private but used in test */ + // private but used in test @state() readOnly = true; @state() private states = Object.values(STATES); @@ -113,7 +115,7 @@ @state() private selectedScheme?: string; - /* private but used in test */ + // private but used in test @state() schemesObj?: SchemesInfoMap; @state() private weblinks: WebLinkInfo[] = []; @@ -122,9 +124,18 @@ private readonly restApiService = appContext.restApiService; + constructor() { + super(); + subscribe(this, preferences$, prefs => { + if (prefs?.download_scheme) { + // Note (issue 5180): normalize the download scheme with lower-case. + this.selectedScheme = prefs.download_scheme.toLowerCase(); + } + }); + } + override connectedCallback() { super.connectedCallback(); - this.loadRepo(); fireTitleChange(this, `${this.repo}`); } @@ -731,12 +742,15 @@ } override willUpdate(changedProperties: PropertyValues) { + if (changedProperties.has('repo')) { + this.loadRepo(); + } if (changedProperties.has('schemesObj')) { this.computeSchemesAndDefault(); } } - /* private but used in test */ + // private but used in test computePluginData() { if (!this.repoConfig || !this.repoConfig.plugin_config) return []; const pluginConfig = this.repoConfig.plugin_config; @@ -745,7 +759,7 @@ }); } - /* private but used in test */ + // private but used in test async loadRepo() { if (!this.repo) return Promise.resolve(); @@ -760,12 +774,6 @@ if (loggedIn) { const repo = this.repo; if (!repo) throw new Error('undefined repo'); - this.restApiService.getPreferences().then(prefs => { - if (prefs?.download_scheme) { - // Note (issue 5180): normalize the download scheme with lower-case. - this.selectedScheme = prefs.download_scheme.toLowerCase(); - } - }); this.restApiService.getRepo(repo).then(repo => { if (!repo?.web_links) return; this.weblinks = repo.web_links; @@ -827,7 +835,7 @@ await Promise.all(promises); } - /* private but used in test */ + // private but used in test formatBooleanSelect(item?: InheritedBooleanInfo) { if (!item) return []; let inheritLabel = 'Inherit'; @@ -879,7 +887,7 @@ ]; } - /* private but used in test */ + // private but used in test formatRepoConfigForSave(repoConfig?: ConfigInfo): ConfigInput { if (!repoConfig) return {}; const configInputObj: ConfigInput = {}; @@ -908,7 +916,7 @@ return configInputObj; } - /* private but used in test */ + // private but used in test async handleSaveRepoConfig() { if (!this.repoConfig || !this.repo) return Promise.reject(new Error('undefined repoConfig or repo')); @@ -1059,7 +1067,7 @@ } private computeSchemesAndDefault() { - this.schemes = !this.schemesObj ? [] : Object.keys(this.schemesObj); + this.schemes = !this.schemesObj ? [] : Object.keys(this.schemesObj).sort(); if (this.schemes.length > 0) { if (!this.selectedScheme || !this.schemes.includes(this.selectedScheme)) { this.selectedScheme = this.schemes.sort()[0]; @@ -1095,7 +1103,7 @@ return GerritNav.getUrlForProjectChanges(name as RepoName); } - /* private but used in test */ + // private but used in test handlePluginConfigChanged({ detail: {name, config}, }: {