summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhruv Srivastava <dhruvsri@google.com>2022-09-28 08:11:46 +0200
committerDhruv Srivastava <dhruvsri@google.com>2022-09-28 08:31:14 +0200
commit41b914dfe81d5c3adb71e554755de05983903ef6 (patch)
tree58e2c49f4192a71ebab553ab52673c79a754d7ef
parent9a150383b1969a4340e582d30f4b618016a6a8c4 (diff)
Add selectableChangeNums to bulk model state
selectableChangeNums are changes the user can select before sync is finished. Setting this in state instead of allChanges allows us to avoid setting allChanges in Loading state. Google-bug-id: b/246912339 Release-Notes: skip Change-Id: Ib1d19d8b081a4d98de64abf5b4c49d7005549460
-rw-r--r--polygerrit-ui/app/models/bulk-actions/bulk-actions-model.ts12
-rw-r--r--polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts1
2 files changed, 9 insertions, 4 deletions
diff --git a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model.ts b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model.ts
index 8e0ed61f54..b58fc3fe25 100644
--- a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model.ts
+++ b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model.ts
@@ -35,6 +35,7 @@ export enum LoadingState {
}
export interface BulkActionsState {
loadingState: LoadingState;
+ selectableChangeNums: NumericChangeId[];
selectedChangeNums: NumericChangeId[];
allChanges: Map<NumericChangeId, ChangeInfo>;
}
@@ -42,6 +43,7 @@ export interface BulkActionsState {
const initialState: BulkActionsState = {
loadingState: LoadingState.NOT_SYNCED,
selectedChangeNums: [],
+ selectableChangeNums: [],
allChanges: new Map(),
};
@@ -85,7 +87,7 @@ export class BulkActionsModel
addSelectedChangeNum(changeNum: NumericChangeId) {
const current = this.getState();
- if (!current.allChanges.has(changeNum)) {
+ if (!current.selectableChangeNums.includes(changeNum)) {
throw new Error(
`Trying to add change ${changeNum} that is not part of bulk-actions model`
);
@@ -97,7 +99,7 @@ export class BulkActionsModel
removeSelectedChangeNum(changeNum: NumericChangeId) {
const current = this.getState();
- if (!current.allChanges.has(changeNum)) {
+ if (!current.selectableChangeNums.includes(changeNum)) {
throw new Error(
`Trying to remove change ${changeNum} that is not part of bulk-actions model`
);
@@ -237,10 +239,12 @@ export class BulkActionsModel
const selectedChangeNums = currentState.selectedChangeNums.filter(
changeNum => basicChanges.has(changeNum)
);
+ const selectableChangeNums = changes.map(c => c._number);
this.updateState({
loadingState: LoadingState.LOADING,
selectedChangeNums,
- allChanges: basicChanges,
+ selectableChangeNums,
+ allChanges: new Map(),
});
if (changes.length === 0) {
@@ -252,7 +256,7 @@ export class BulkActionsModel
);
currentState = this.getState();
// Return early if sync has been called again since starting the load.
- if (basicChanges !== currentState.allChanges) return;
+ if (selectableChangeNums !== currentState.selectableChangeNums) return;
const allDetailedChanges: Map<NumericChangeId, ChangeInfo> = new Map();
for (const detailedChange of changeDetails ?? []) {
const basicChange = basicChanges.get(detailedChange._number)!;
diff --git a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts
index 686f9d9109..7bc37d65cd 100644
--- a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts
+++ b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts
@@ -79,6 +79,7 @@ suite('bulk actions model test', () => {
bulkActionsModel.sync([c1, c2]);
assert.isEmpty(bulkActionsModel.getState().selectedChangeNums);
+ assert.deepEqual(bulkActionsModel.getState().selectableChangeNums, [1, 2]);
bulkActionsModel.addSelectedChangeNum(c1._number);
assert.sameMembers(bulkActionsModel.getState().selectedChangeNums, [