diff --git a/modules/data/spec/reducers/entity-change-tracker-base.spec.ts b/modules/data/spec/reducers/entity-change-tracker-base.spec.ts index 4a7a15293e..cbafb4d3eb 100644 --- a/modules/data/spec/reducers/entity-change-tracker-base.spec.ts +++ b/modules/data/spec/reducers/entity-change-tracker-base.spec.ts @@ -649,6 +649,22 @@ describe('EntityChangeTrackerBase', () => { }); describe('#undoOne', () => { + it('should clear one tracked change', () => { + let { collection, deletedEntity } = createTestTrackedEntities(); + + expect(Object.keys(collection.changeState).length).toBe( + 3, + 'tracking 3 entities' + ); + + collection = tracker.undoOne(deletedEntity as Hero, collection); + + expect(Object.keys(collection.changeState).length).toBe( + 2, + 'tracking 2 entities' + ); + }); + it('should restore the collection to the pre-change state for the given entity', () => { // tslint:disable-next-line:prefer-const let { @@ -698,6 +714,32 @@ describe('EntityChangeTrackerBase', () => { }); describe('#undoMany', () => { + it('should clear many tracked changes', () => { + // tslint:disable-next-line:prefer-const + let { + collection, + addedEntity, + deletedEntity, + preUpdatedEntity, + updatedEntity, + } = createTestTrackedEntities(); + + expect(Object.keys(collection.changeState).length).toBe( + 3, + 'tracking 3 entities' + ); + + collection = tracker.undoMany( + [addedEntity, deletedEntity, updatedEntity], + collection + ); + + expect(Object.keys(collection.changeState).length).toBe( + 0, + 'tracking 2 entities' + ); + }); + it('should restore the collection to the pre-change state for the given entities', () => { // tslint:disable-next-line:prefer-const let { diff --git a/modules/data/src/reducers/entity-change-tracker-base.ts b/modules/data/src/reducers/entity-change-tracker-base.ts index 46f36bd1b7..ec3e0ca5a1 100644 --- a/modules/data/src/reducers/entity-change-tracker-base.ts +++ b/modules/data/src/reducers/entity-change-tracker-base.ts @@ -687,6 +687,7 @@ export class EntityChangeTrackerBase implements EntityChangeTracker { didMutate = true; } delete chgState[id]; // clear tracking of this entity + acc.changeState = chgState; switch (change.changeType) { case ChangeType.Added: acc.remove.push(id); @@ -714,7 +715,7 @@ export class EntityChangeTrackerBase implements EntityChangeTracker { collection = this.adapter.removeMany(remove as string[], collection); collection = this.adapter.upsertMany(upsert, collection); - return didMutate ? collection : { ...collection, changeState }; + return didMutate ? { ...collection, changeState } : collection; } /**