import produce from 'immer'; import iterateItems from './iterateItems'; import { LayoutItem } from './types'; import validateLayout from './validateLayout'; interface ItemToRemove { parent: LayoutItem; index: number; } export default function(layout: LayoutItem): LayoutItem { const itemsToRemove: ItemToRemove[] = []; const output = produce(layout, (layoutDraft: LayoutItem) => { iterateItems(layoutDraft, (itemIndex: number, item: LayoutItem, parent: LayoutItem) => { if (!item.key) itemsToRemove.push({ parent, index: itemIndex }); return true; }); itemsToRemove.sort((a: ItemToRemove, b: ItemToRemove) => { return a.index > b.index ? -1 : +1; }); for (const item of itemsToRemove) { item.parent.children.splice(item.index, 1); } }); return output !== layout ? validateLayout(output) : layout; }