(subtreeRoot, root, committedLanes)
| 24625 | } |
| 24626 | |
| 24627 | function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { |
| 24628 | // Suspense layout effects semantics don't change for legacy roots. |
| 24629 | var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode; |
| 24630 | |
| 24631 | while (nextEffect !== null) { |
| 24632 | var fiber = nextEffect; |
| 24633 | var firstChild = fiber.child; |
| 24634 | |
| 24635 | if ( fiber.tag === OffscreenComponent && isModernRoot) { |
| 24636 | // Keep track of the current Offscreen stack's state. |
| 24637 | var isHidden = fiber.memoizedState !== null; |
| 24638 | var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden; |
| 24639 | |
| 24640 | if (newOffscreenSubtreeIsHidden) { |
| 24641 | // The Offscreen tree is hidden. Skip over its layout effects. |
| 24642 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
| 24643 | continue; |
| 24644 | } else { |
| 24645 | // TODO (Offscreen) Also check: subtreeFlags & LayoutMask |
| 24646 | var current = fiber.alternate; |
| 24647 | var wasHidden = current !== null && current.memoizedState !== null; |
| 24648 | var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden; |
| 24649 | var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden; |
| 24650 | var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root. |
| 24651 | |
| 24652 | offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; |
| 24653 | offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden; |
| 24654 | |
| 24655 | if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) { |
| 24656 | // This is the root of a reappearing boundary. Turn its layout effects |
| 24657 | // back on. |
| 24658 | nextEffect = fiber; |
| 24659 | reappearLayoutEffects_begin(fiber); |
| 24660 | } |
| 24661 | |
| 24662 | var child = firstChild; |
| 24663 | |
| 24664 | while (child !== null) { |
| 24665 | nextEffect = child; |
| 24666 | commitLayoutEffects_begin(child, // New root; bubble back up to here and stop. |
| 24667 | root, committedLanes); |
| 24668 | child = child.sibling; |
| 24669 | } // Restore Offscreen state and resume in our-progress traversal. |
| 24670 | |
| 24671 | |
| 24672 | nextEffect = fiber; |
| 24673 | offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden; |
| 24674 | offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; |
| 24675 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
| 24676 | continue; |
| 24677 | } |
| 24678 | } |
| 24679 | |
| 24680 | if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) { |
| 24681 | firstChild.return = fiber; |
| 24682 | nextEffect = firstChild; |
| 24683 | } else { |
| 24684 | commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); |
no test coverage detected
searching dependent graphs…