diff options
author | Ben Rohlfs <brohlfs@google.com> | 2023-07-27 15:05:49 +0200 |
---|---|---|
committer | Ben Rohlfs <brohlfs@google.com> | 2023-07-27 13:20:13 +0000 |
commit | 44e004b46641b4e092a3a6ed99c6a38619c39780 (patch) | |
tree | 0c26128da0ec4fe76cd4c11576d216cec18714e4 | |
parent | 1c3548dea28a12debcd1e921331556fcc3e267fb (diff) |
Fix nav links in <gr-list-view> with regards to base path
The `path` property already includes the base path, so don't add it
twice to navigation URLs.
Release-Notes: skip
Bug: Issue 293432626
Change-Id: I2661bc7f35c023be3063c8a03b5f08902ac13a59
(cherry picked from commit cf5690641715a3425872d7e37feafa3c8dfcbbbf)
5 files changed, 32 insertions, 14 deletions
diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts index cb17de717a..852f907bc6 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts @@ -13,7 +13,11 @@ import {tableStyles} from '../../../styles/gr-table-styles'; import {sharedStyles} from '../../../styles/shared-styles'; import {LitElement, PropertyValues, css, html} from 'lit'; import {customElement, property, state} from 'lit/decorators.js'; -import {AdminViewState} from '../../../models/views/admin'; +import { + AdminChildView, + AdminViewState, + createAdminUrl, +} from '../../../models/views/admin'; // Exported for tests export interface PluginInfoWithName extends PluginInfo { @@ -22,8 +26,6 @@ export interface PluginInfoWithName extends PluginInfo { @customElement('gr-plugin-list') export class GrPluginList extends LitElement { - readonly path = '/admin/plugins'; - /** * URL params passed from the router. */ @@ -70,7 +72,7 @@ export class GrPluginList extends LitElement { .items=${this.plugins} .loading=${this.loading} .offset=${this.offset} - .path=${this.path} + .path=${createAdminUrl({adminView: AdminChildView.PLUGINS})} > <table id="list" class="genericList"> <tbody> diff --git a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts index a8bc84c1e1..87fe27f372 100644 --- a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts +++ b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts @@ -14,7 +14,10 @@ import {LitElement, html} from 'lit'; import {customElement, state} from 'lit/decorators.js'; import {resolve} from '../../../models/dependency'; import {subscribe} from '../../lit/subscription-controller'; -import {documentationViewModelToken} from '../../../models/views/documentation'; +import { + createDocumentationUrl, + documentationViewModelToken, +} from '../../../models/views/documentation'; @customElement('gr-documentation-search') export class GrDocumentationSearch extends LitElement { @@ -57,7 +60,7 @@ export class GrDocumentationSearch extends LitElement { .filter=${this.filter} .offset=${0} .loading=${this.loading} - .path=${'/Documentation'} + .path=${createDocumentationUrl()} > <table id="list" class="genericList"> <tbody> diff --git a/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view.ts b/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view.ts index ea45142ee4..14b5d14b89 100644 --- a/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view.ts +++ b/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view.ts @@ -47,6 +47,7 @@ export class GrListView extends LitElement { @property({type: Boolean}) loading?: boolean; + /** Must include the base path. */ @property({type: String}) path?: string; @@ -191,7 +192,8 @@ export class GrListView extends LitElement { // Offset could be a string when passed from the router. const offset = +(this.offset || 0); const newOffset = Math.max(0, offset + this.itemsPerPage * direction); - let href = getBaseUrl() + (this.path ?? ''); + // Note that `this.path` already includes the base URL, if set and non-empty; + let href = this.path || getBaseUrl(); if (this.filter) { href += '/q/filter:' + encodeURL(this.filter); } diff --git a/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view_test.ts b/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view_test.ts index 38f4f17565..5b1e162cce 100644 --- a/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-list-view/gr-list-view_test.ts @@ -61,23 +61,29 @@ suite('gr-list-view tests', () => { element.offset = 25; element.itemsPerPage = 25; element.filter = 'test'; - element.path = '/admin/projects'; + element.path = '/base/admin/projects'; - stubBaseUrl(''); + stubBaseUrl('/base'); - assert.equal(element.computeNavLink(1), '/admin/projects/q/filter:test,50'); + assert.equal( + element.computeNavLink(1), + '/base/admin/projects/q/filter:test,50' + ); - assert.equal(element.computeNavLink(-1), '/admin/projects/q/filter:test'); + assert.equal( + element.computeNavLink(-1), + '/base/admin/projects/q/filter:test' + ); element.filter = undefined; - assert.equal(element.computeNavLink(1), '/admin/projects,50'); + assert.equal(element.computeNavLink(1), '/base/admin/projects,50'); - assert.equal(element.computeNavLink(-1), '/admin/projects'); + assert.equal(element.computeNavLink(-1), '/base/admin/projects'); element.filter = 'plugins/'; assert.equal( element.computeNavLink(1), - '/admin/projects/q/filter:plugins/,50' + '/base/admin/projects/q/filter:plugins/,50' ); }); diff --git a/polygerrit-ui/app/models/views/documentation.ts b/polygerrit-ui/app/models/views/documentation.ts index 67896958eb..abb0f03069 100644 --- a/polygerrit-ui/app/models/views/documentation.ts +++ b/polygerrit-ui/app/models/views/documentation.ts @@ -4,6 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ import {GerritView} from '../../services/router/router-model'; +import {getBaseUrl} from '../../utils/url-util'; import {define} from '../dependency'; import {Model} from '../model'; import {ViewState} from './base'; @@ -13,6 +14,10 @@ export interface DocumentationViewState extends ViewState { filter: string; } +export function createDocumentationUrl() { + return `${getBaseUrl()}/Documentation`; +} + export const documentationViewModelToken = define<DocumentationViewModel>( 'documentation-view-model' ); |