twenty / packages /twenty-shared /src /utils /array /upsertIntoArrayOfObjectsComparingId.ts
Jules
Initial clean CRM deployment with prebuilt assets
d9494a5
Raw
History Blame Contribute Delete
577 Bytes
import { findById } from '@/utils/array/findById';
export const upsertIntoArrayOfObjectsComparingId = <T extends { id: string }>(
arrayToUpsertInto: T[],
itemToUpsert: T,
): T[] => {
const alreadyExistingItemIndex = arrayToUpsertInto.findIndex(
findById(itemToUpsert.id),
);
const shouldReplaceItem = alreadyExistingItemIndex > -1;
if (shouldReplaceItem) {
const newArray = [...arrayToUpsertInto];
newArray.splice(alreadyExistingItemIndex, 1, itemToUpsert);
return newArray;
} else {
return arrayToUpsertInto.concat(itemToUpsert);
}
};