diff options
author | Ben Rohlfs <brohlfs@google.com> | 2022-10-14 11:13:10 +0200 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-10-14 17:35:06 +0100 |
commit | a178531be78b904bd646e6312f475c69d0affdeb (patch) | |
tree | ade37162c59f1fa410a9135ce62979b11577a6dd | |
parent | 73862225ec1d38be28429c511be14746a339ee71 (diff) |
Convert `checksRunsSelected` state from array to set
Release-Notes: skip
Change-Id: Icaf33559fe3b4e924a2514ed8debcabbc95a8204
-rw-r--r-- | polygerrit-ui/app/elements/checks/gr-checks-results.ts | 11 | ||||
-rw-r--r-- | polygerrit-ui/app/elements/checks/gr-checks-runs.ts | 12 | ||||
-rw-r--r-- | polygerrit-ui/app/elements/core/gr-router/gr-router.ts | 2 | ||||
-rw-r--r-- | polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts | 2 | ||||
-rw-r--r-- | polygerrit-ui/app/models/views/change.ts | 14 | ||||
-rw-r--r-- | polygerrit-ui/app/models/views/change_test.ts | 2 | ||||
-rw-r--r-- | polygerrit-ui/app/utils/common-util.ts | 10 |
7 files changed, 26 insertions, 27 deletions
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-results.ts b/polygerrit-ui/app/elements/checks/gr-checks-results.ts index 4530631d43..848948f05d 100644 --- a/polygerrit-ui/app/elements/checks/gr-checks-results.ts +++ b/polygerrit-ui/app/elements/checks/gr-checks-results.ts @@ -768,7 +768,7 @@ export class GrChecksResults extends LitElement { * is empty, then no run is selected and all runs should be shown. */ @state() - selectedRuns: string[] = []; + selectedRuns: Set<string> = new Set(); @state() actions: Action[] = []; @@ -1304,10 +1304,7 @@ export class GrChecksResults extends LitElement { } isRunSelected(run: {checkName: string}) { - return ( - this.selectedRuns.length === 0 || - this.selectedRuns.includes(run.checkName) - ); + return this.selectedRuns.size === 0 || this.selectedRuns.has(run.checkName); } renderFilter() { @@ -1316,7 +1313,7 @@ export class GrChecksResults extends LitElement { this.isRunSelected(run) && isAttemptSelected(this.selectedAttempt, run) ); if ( - this.selectedRuns.length === 0 && + this.selectedRuns.size === 0 && allResults(runs).length <= 3 && this.filterRegExp === '' ) { @@ -1360,7 +1357,7 @@ export class GrChecksResults extends LitElement { ], [] ); - const isSelectionActive = this.selectedRuns.length > 0; + const isSelectionActive = this.selectedRuns.size > 0; const selected = all.filter(result => this.isRunSelected(result)); const re = new RegExp(this.filterRegExp, 'i'); const filtered = selected.filter(result => matches(result, re)); diff --git a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts index b06842650f..128a9b0a0e 100644 --- a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts +++ b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts @@ -405,7 +405,7 @@ export class GrChecksRuns extends LitElement { collapsed = false; @state() - selectedRuns: string[] = []; + selectedRuns: Set<string> = new Set(); @state() selectedAttempt: AttemptChoice = LATEST_ATTEMPT; @@ -668,8 +668,8 @@ export class GrChecksRuns extends LitElement { private renderTitleButtons() { if (this.collapsed) return; - if (this.selectedRuns.length < 2) return; - const actions = this.selectedRuns.map(selected => { + if (this.selectedRuns.size < 2) return; + const actions = [...this.selectedRuns].map(selected => { const run = this.runs.find( run => run.isLatestAttempt && run.checkName === selected ); @@ -685,7 +685,7 @@ export class GrChecksRuns extends LitElement { class="font-normal" link @click=${() => - this.getViewModel().updateState({checksRunsSelected: []})} + this.getViewModel().updateState({checksRunsSelected: undefined})} >Unselect All</gr-button > <gr-tooltip-content @@ -829,8 +829,8 @@ export class GrChecksRuns extends LitElement { } renderRun(run: CheckRun) { - const selectedRun = this.selectedRuns.includes(run.checkName); - const deselected = !selectedRun && this.selectedRuns.length > 0; + const selectedRun = this.selectedRuns.has(run.checkName); + const deselected = !selectedRun && this.selectedRuns.size > 0; return html`<gr-checks-run .run=${run} ?condensed=${this.collapsed} diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts index 0c9b6302c7..f829313699 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts @@ -1411,7 +1411,7 @@ export class GrRouter implements Finalizable, NavigationService { const attempt = stringToAttemptChoice(queryMap.get('attempt')); if (attempt && attempt !== LATEST_ATTEMPT) state.attempt = attempt; const selected = queryMap.get('checksRunsSelected'); - if (selected) state.checksRunsSelected = selected.split(','); + if (selected) state.checksRunsSelected = new Set(selected.split(',')); assertIsDefined(state.project, 'project'); this.reporting.setRepoName(state.project); diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts index 5c5e67d2ba..119ba48080 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts @@ -1161,7 +1161,7 @@ suite('gr-router tests', () => { attempt: 1, filter: 'fff', tab: 'checks', - checksRunsSelected: ['asdf', 'qwer'], + checksRunsSelected: new Set(['asdf', 'qwer']), checksResultsFilter: 'asdf.*qwer', }); }); diff --git a/polygerrit-ui/app/models/views/change.ts b/polygerrit-ui/app/models/views/change.ts index 6b80f23aed..3790bb0521 100644 --- a/polygerrit-ui/app/models/views/change.ts +++ b/polygerrit-ui/app/models/views/change.ts @@ -14,7 +14,7 @@ import { import {Tab} from '../../constants/constants'; import {GerritView} from '../../services/router/router-model'; import {UrlEncodedCommentId} from '../../types/common'; -import {toggle} from '../../utils/common-util'; +import {toggleSet} from '../../utils/common-util'; import {select} from '../../utils/observable-util'; import { encodeURL, @@ -47,7 +47,7 @@ export interface ChangeViewState extends ViewState { /** selected attempt for check runs (undefined=latest) */ attempt?: AttemptChoice; /** selected check runs identified by `checkName` */ - checksRunsSelected?: string[]; + checksRunsSelected?: Set<string>; /** regular expression for filtering check results */ checksResultsFilter?: string; @@ -117,7 +117,7 @@ export function createChangeUrl( if (state.checksResultsFilter) { queries.push(`checksResultsFilter=${state.checksResultsFilter}`); } - if (state.checksRunsSelected && state.checksRunsSelected.length > 0) { + if (state.checksRunsSelected && state.checksRunsSelected.size > 0) { queries.push(`checksRunsSelected=${[...state.checksRunsSelected].sort()}`); } if (state.tab && state.tab !== Tab.FILES) { @@ -174,7 +174,7 @@ export class ChangeViewModel extends Model<ChangeViewState | undefined> { public readonly checksRunsSelected$ = select( this.state$, - state => state?.checksRunsSelected ?? [] + state => state?.checksRunsSelected ?? new Set<string>() ); constructor() { @@ -191,7 +191,9 @@ export class ChangeViewModel extends Model<ChangeViewState | undefined> { } toggleSelectedCheckRun(checkName: string) { - const selected = this.getState()?.checksRunsSelected ?? []; - this.updateState({checksRunsSelected: toggle(selected, checkName)}); + const current = this.getState()?.checksRunsSelected ?? new Set(); + const next = new Set(current); + toggleSet(next, checkName); + this.updateState({checksRunsSelected: next}); } } diff --git a/polygerrit-ui/app/models/views/change_test.ts b/polygerrit-ui/app/models/views/change_test.ts index f756d4b735..2cea325332 100644 --- a/polygerrit-ui/app/models/views/change_test.ts +++ b/polygerrit-ui/app/models/views/change_test.ts @@ -39,7 +39,7 @@ suite('change view state tests', () => { test('createChangeUrl() checksRunsSelected', () => { const state: ChangeViewState = { ...STATE, - checksRunsSelected: ['asdf'], + checksRunsSelected: new Set(['asdf']), }; assert.equal( diff --git a/polygerrit-ui/app/utils/common-util.ts b/polygerrit-ui/app/utils/common-util.ts index 03306f5dee..183d16733a 100644 --- a/polygerrit-ui/app/utils/common-util.ts +++ b/polygerrit-ui/app/utils/common-util.ts @@ -117,7 +117,7 @@ export function containsAll<T>(set: Set<T>, subSet: Set<T>): boolean { /** * Add value, if the set does not contain it. Otherwise remove it. */ -export function toggleSetMembership<T>(set: Set<T>, value: T): void { +export function toggleSet<T>(set: Set<T>, value: T): void { if (set.has(value)) { set.delete(value); } else { @@ -125,10 +125,6 @@ export function toggleSetMembership<T>(set: Set<T>, value: T): void { } } -export function unique<T>(item: T, index: number, array: T[]) { - return array.indexOf(item) === index; -} - export function toggle<T>(array: T[], item: T): T[] { if (array.includes(item)) { return array.filter(r => r !== item); @@ -137,6 +133,10 @@ export function toggle<T>(array: T[], item: T): T[] { } } +export function unique<T>(item: T, index: number, array: T[]) { + return array.indexOf(item) === index; +} + /** * Returns the elements that are present in every sub-array. If a compareBy * predicate is passed in, it will be used instead of strict equality. A new |