summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Rohlfs <brohlfs@google.com>2022-10-14 11:13:10 +0200
committerLuca Milanesio <luca.milanesio@gmail.com>2022-10-14 17:35:06 +0100
commita178531be78b904bd646e6312f475c69d0affdeb (patch)
treeade37162c59f1fa410a9135ce62979b11577a6dd
parent73862225ec1d38be28429c511be14746a339ee71 (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.ts11
-rw-r--r--polygerrit-ui/app/elements/checks/gr-checks-runs.ts12
-rw-r--r--polygerrit-ui/app/elements/core/gr-router/gr-router.ts2
-rw-r--r--polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts2
-rw-r--r--polygerrit-ui/app/models/views/change.ts14
-rw-r--r--polygerrit-ui/app/models/views/change_test.ts2
-rw-r--r--polygerrit-ui/app/utils/common-util.ts10
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