diff options
author | Dhruv Srivastava <dhruvsri@google.com> | 2022-09-28 08:11:46 +0200 |
---|---|---|
committer | Dhruv Srivastava <dhruvsri@google.com> | 2022-09-28 08:31:14 +0200 |
commit | 41b914dfe81d5c3adb71e554755de05983903ef6 (patch) | |
tree | 58e2c49f4192a71ebab553ab52673c79a754d7ef | |
parent | 9a150383b1969a4340e582d30f4b618016a6a8c4 (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.ts | 12 | ||||
-rw-r--r-- | polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts | 1 |
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, [ |