diff --git a/packages/entities/src/lib/update.mutation.spec.ts b/packages/entities/src/lib/update.mutation.spec.ts index acb5a643..c8b43bb7 100644 --- a/packages/entities/src/lib/update.mutation.spec.ts +++ b/packages/entities/src/lib/update.mutation.spec.ts @@ -259,6 +259,19 @@ describe('update', () => { expect(ids).toBe(sameIds); }); + + it('should be able to handle duplicate ids', () => { + const store = createEntitiesStore(); + store.update( + upsertEntities([ + { id: 1, completed: true }, + { id: 1, completed: false }, + ]), + ); + const { ids, entities } = store.getValue(); + expect(ids).toEqual([1]); + expect(entities).toEqual({ 1: { id: 1, completed: false } }); + }); }); describe('UpdateEntitiesIds', () => { diff --git a/packages/entities/src/lib/update.mutation.ts b/packages/entities/src/lib/update.mutation.ts index ab54e7bc..8fec0275 100644 --- a/packages/entities/src/lib/update.mutation.ts +++ b/packages/entities/src/lib/update.mutation.ts @@ -228,8 +228,9 @@ export function upsertEntities< for (const entity of entitiesArray) { const id: getIdType = entity[idKey]; - // if entity exists, merge update, else add - if (hasEntity(id, options)(state)) { + if (asObject[id]) { + asObject[id] = { ...asObject[id], ...entity }; + } else if (hasEntity(id, options)(state)) { asObject[id] = { ...state[entitiesKey][id], ...entity }; updatedEntitiesId.push(id); } else {