diff --git a/js/fiber.ts b/js/fiber.ts index fbd003f..5d929f7 100644 --- a/js/fiber.ts +++ b/js/fiber.ts @@ -275,68 +275,6 @@ function buildLookupForRemaining(parentFiber, firstNewChild, prevChild, fromOldF return firstNewChild; } -function _reconcileArray(parentFiber, elements) { - assert(parentFiber.effect !== Delete); - const oldFiberLookup = buildLookup(parentFiber.child); - - let firstNewChild = null; - let prevChild; - let lastKeptIndex = 0; - for (let i = 0; i < elements.length; i++) { - const el = elements[i]; - const key = el.key ?? i; - const oldFiber = oldFiberLookup.get(key) ?? null; - const newFiber = updateFiber(oldFiber, el); - // TODO: handle newFiber === null (if element was false/null) - - newFiber.parent = parentFiber; - newFiber.index = i; - newFiber.key = el.key; - - if (newFiber.alternate) { - // We are continuing with an existing fiber, remove oldFiber - // from lookup so it doesn't get unmounted - oldFiberLookup.delete(key); - - const oldIndex = oldFiber.index; - if (oldIndex < lastKeptIndex) { - newFiber.effect = Placement; - } - else { - lastKeptIndex = i; - } - } - else { - newFiber.effect = Placement; - } - - if (prevChild) prevChild.sibling = newFiber; - else firstNewChild = newFiber; - prevChild = newFiber; - } - // Remove any existing sibling pointer from the last child - // TODO: maybe this should be done by cloneFiber, - // it doesn't seem right to have to worry about it here - // (and it has already caused a bug) - if (prevChild) prevChild.sibling = null; - - // Should be guaranteed by `cloneFiber` and `makeFiber` - assert(parentFiber.deletedChildren === null); - // Only allocate deletedChildren array if we actually have some - if (oldFiberLookup.size > 0) { - parentFiber.deletedChildren = []; - - // Any fibers remaining in `oldFiberLookup` did not have a - // matching element, so they need to be deleted - oldFiberLookup.forEach(deadFiber => { - deadFiber.effect = Delete; - parentFiber.deletedChildren.push(deadFiber); - }); - } - - return firstNewChild; -} - function updateFiber(oldFiber, element) { // If `element` is false/null, we ignore it and render nothing, e.g.: //