(subtreeRoot, root, committedLanes)
| 24664 | } |
| 24665 | |
| 24666 | function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { |
| 24667 | // Suspense layout effects semantics don't change for legacy roots. |
| 24668 | var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode; |
| 24669 | |
| 24670 | while (nextEffect !== null) { |
| 24671 | var fiber = nextEffect; |
| 24672 | var firstChild = fiber.child; |
| 24673 | |
| 24674 | if ( fiber.tag === OffscreenComponent && isModernRoot) { |
| 24675 | // Keep track of the current Offscreen stack's state. |
| 24676 | var isHidden = fiber.memoizedState !== null; |
| 24677 | var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden; |
| 24678 | |
| 24679 | if (newOffscreenSubtreeIsHidden) { |
| 24680 | // The Offscreen tree is hidden. Skip over its layout effects. |
| 24681 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
| 24682 | continue; |
| 24683 | } else { |
| 24684 | // TODO (Offscreen) Also check: subtreeFlags & LayoutMask |
| 24685 | var current = fiber.alternate; |
| 24686 | var wasHidden = current !== null && current.memoizedState !== null; |
| 24687 | var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden; |
| 24688 | var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden; |
| 24689 | var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root. |
| 24690 | |
| 24691 | offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; |
| 24692 | offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden; |
| 24693 | |
| 24694 | if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) { |
| 24695 | // This is the root of a reappearing boundary. Turn its layout effects |
| 24696 | // back on. |
| 24697 | nextEffect = fiber; |
| 24698 | reappearLayoutEffects_begin(fiber); |
| 24699 | } |
| 24700 | |
| 24701 | var child = firstChild; |
| 24702 | |
| 24703 | while (child !== null) { |
| 24704 | nextEffect = child; |
| 24705 | commitLayoutEffects_begin(child, // New root; bubble back up to here and stop. |
| 24706 | root, committedLanes); |
| 24707 | child = child.sibling; |
| 24708 | } // Restore Offscreen state and resume in our-progress traversal. |
| 24709 | |
| 24710 | |
| 24711 | nextEffect = fiber; |
| 24712 | offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden; |
| 24713 | offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; |
| 24714 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
| 24715 | continue; |
| 24716 | } |
| 24717 | } |
| 24718 | |
| 24719 | if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) { |
| 24720 | firstChild.return = fiber; |
| 24721 | nextEffect = firstChild; |
| 24722 | } else { |
| 24723 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
no test coverage detected
searching dependent graphs…