diff --git a/packages/utils/index.ts b/packages/utils/index.ts index 46f1b6c96..452044089 100644 --- a/packages/utils/index.ts +++ b/packages/utils/index.ts @@ -61,7 +61,7 @@ export { customFieldLabelToKey, customKeyFromLabel } from './src/customField-uti export { deepmerge } from './src/externals/deepmerge.js'; // array utils -export { deleteAtIndex, insertAtIndex, reorderArray } from './src/common/arrayUtils.js'; +export { deleteAtIndex, insertAtIndex, mergeAtIndex, reorderArray } from './src/common/arrayUtils.js'; // object utils export { getPropertyFromPath, isObjectEmpty } from './src/common/objectUtils.js'; diff --git a/packages/utils/src/common/arrayUtils.ts b/packages/utils/src/common/arrayUtils.ts index 13b2701e4..713781eea 100644 --- a/packages/utils/src/common/arrayUtils.ts +++ b/packages/utils/src/common/arrayUtils.ts @@ -25,6 +25,24 @@ export function insertAtIndex(index: number, item: T, array: T[]): T[] { return modifiedArray; } +/** + * Inserts an array into another one of the same type at a given index + */ +export function mergeAtIndex(index: number, newArray: T[], currentArray: T[]): T[] { + // Insert at beginning + if (index === 0) { + return [...newArray, ...currentArray]; + } + + // insert at end + else if (index >= currentArray.length) { + return [...currentArray, ...newArray]; + } + + // insert in the middle + return currentArray.toSpliced(index, 0, ...newArray); +} + /** * Deletes array element at a given index * @param index