function completeWork()

in Libraries/Renderer/implementations/ReactFabric-profiling.js [5301:5621]


function completeWork(current, workInProgress, renderLanes) {
  var newProps = workInProgress.pendingProps;
  switch (workInProgress.tag) {
    case 2:
    case 16:
    case 15:
    case 0:
    case 11:
    case 7:
    case 8:
    case 12:
    case 9:
    case 14:
      return bubbleProperties(workInProgress), null;
    case 1:
      return (
        isContextProvider(workInProgress.type) && popContext(),
        bubbleProperties(workInProgress),
        null
      );
    case 3:
      return (
        (newProps = workInProgress.stateNode),
        popHostContainer(),
        pop(didPerformWorkStackCursor),
        pop(contextStackCursor),
        resetWorkInProgressVersions(),
        newProps.pendingContext &&
          ((newProps.context = newProps.pendingContext),
          (newProps.pendingContext = null)),
        (null !== current && null !== current.child) ||
          newProps.hydrate ||
          (workInProgress.flags |= 512),
        updateHostContainer(current, workInProgress),
        bubbleProperties(workInProgress),
        null
      );
    case 5:
      popHostContext(workInProgress);
      renderLanes = requiredContext(rootInstanceStackCursor.current);
      var type = workInProgress.type;
      if (null !== current && null != workInProgress.stateNode)
        updateHostComponent$1(
          current,
          workInProgress,
          type,
          newProps,
          renderLanes
        ),
          current.ref !== workInProgress.ref && (workInProgress.flags |= 256);
      else {
        if (!newProps) {
          if (null === workInProgress.stateNode)
            throw Error(
              "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
            );
          bubbleProperties(workInProgress);
          return null;
        }
        requiredContext(contextStackCursor$1.current);
        current = nextReactTag;
        nextReactTag += 2;
        type = getViewConfigForType(type);
        var updatePayload = diffProperties(
          null,
          emptyObject,
          newProps,
          type.validAttributes
        );
        renderLanes = createNode(
          current,
          type.uiViewClassName,
          renderLanes,
          updatePayload,
          workInProgress
        );
        current = new ReactFabricHostComponent(
          current,
          type,
          newProps,
          workInProgress
        );
        current = { node: renderLanes, canonical: current };
        appendAllChildren(current, workInProgress, !1, !1);
        workInProgress.stateNode = current;
        null !== workInProgress.ref && (workInProgress.flags |= 256);
      }
      bubbleProperties(workInProgress);
      return null;
    case 6:
      if (current && null != workInProgress.stateNode)
        updateHostText$1(
          current,
          workInProgress,
          current.memoizedProps,
          newProps
        );
      else {
        if ("string" !== typeof newProps && null === workInProgress.stateNode)
          throw Error(
            "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
          );
        current = requiredContext(rootInstanceStackCursor.current);
        renderLanes = requiredContext(contextStackCursor$1.current);
        workInProgress.stateNode = createTextInstance(
          newProps,
          current,
          renderLanes,
          workInProgress
        );
      }
      bubbleProperties(workInProgress);
      return null;
    case 13:
      pop(suspenseStackCursor);
      newProps = workInProgress.memoizedState;
      if (0 !== (workInProgress.flags & 128))
        return (
          (workInProgress.lanes = renderLanes),
          0 !== (workInProgress.mode & 2) &&
            transferActualDuration(workInProgress),
          workInProgress
        );
      newProps = null !== newProps;
      renderLanes = !1;
      null !== current && (renderLanes = null !== current.memoizedState);
      if (newProps && !renderLanes && 0 !== (workInProgress.mode & 1))
        if (
          (null === current &&
            !0 !== workInProgress.memoizedProps.unstable_avoidThisFallback) ||
          0 !== (suspenseStackCursor.current & 1)
        )
          0 === workInProgressRootExitStatus &&
            (workInProgressRootExitStatus = 3);
        else {
          if (
            0 === workInProgressRootExitStatus ||
            3 === workInProgressRootExitStatus
          )
            workInProgressRootExitStatus = 4;
          null === workInProgressRoot ||
            (0 === (workInProgressRootSkippedLanes & 268435455) &&
              0 === (workInProgressRootUpdatedLanes & 268435455)) ||
            markRootSuspended$1(
              workInProgressRoot,
              workInProgressRootRenderLanes
            );
        }
      newProps && (workInProgress.flags |= 4);
      bubbleProperties(workInProgress);
      0 !== (workInProgress.mode & 2) &&
        newProps &&
        ((current = workInProgress.child),
        null !== current &&
          (workInProgress.treeBaseDuration -= current.treeBaseDuration));
      return null;
    case 4:
      return (
        popHostContainer(),
        updateHostContainer(current, workInProgress),
        bubbleProperties(workInProgress),
        null
      );
    case 10:
      return (
        popProvider(workInProgress.type._context),
        bubbleProperties(workInProgress),
        null
      );
    case 17:
      return (
        isContextProvider(workInProgress.type) && popContext(),
        bubbleProperties(workInProgress),
        null
      );
    case 19:
      pop(suspenseStackCursor);
      type = workInProgress.memoizedState;
      if (null === type) return bubbleProperties(workInProgress), null;
      newProps = 0 !== (workInProgress.flags & 128);
      updatePayload = type.rendering;
      if (null === updatePayload)
        if (newProps) cutOffTailIfNeeded(type, !1);
        else {
          if (
            0 !== workInProgressRootExitStatus ||
            (null !== current && 0 !== (current.flags & 128))
          )
            for (current = workInProgress.child; null !== current; ) {
              updatePayload = findFirstSuspended(current);
              if (null !== updatePayload) {
                workInProgress.flags |= 128;
                cutOffTailIfNeeded(type, !1);
                current = updatePayload.updateQueue;
                null !== current &&
                  ((workInProgress.updateQueue = current),
                  (workInProgress.flags |= 4));
                workInProgress.subtreeFlags = 0;
                current = renderLanes;
                for (newProps = workInProgress.child; null !== newProps; )
                  (renderLanes = newProps),
                    (updatePayload = current),
                    (renderLanes.flags &= 1835010),
                    (type = renderLanes.alternate),
                    null === type
                      ? ((renderLanes.childLanes = 0),
                        (renderLanes.lanes = updatePayload),
                        (renderLanes.child = null),
                        (renderLanes.subtreeFlags = 0),
                        (renderLanes.memoizedProps = null),
                        (renderLanes.memoizedState = null),
                        (renderLanes.updateQueue = null),
                        (renderLanes.dependencies = null),
                        (renderLanes.stateNode = null),
                        (renderLanes.selfBaseDuration = 0),
                        (renderLanes.treeBaseDuration = 0))
                      : ((renderLanes.childLanes = type.childLanes),
                        (renderLanes.lanes = type.lanes),
                        (renderLanes.child = type.child),
                        (renderLanes.subtreeFlags = 0),
                        (renderLanes.deletions = null),
                        (renderLanes.memoizedProps = type.memoizedProps),
                        (renderLanes.memoizedState = type.memoizedState),
                        (renderLanes.updateQueue = type.updateQueue),
                        (renderLanes.type = type.type),
                        (updatePayload = type.dependencies),
                        (renderLanes.dependencies =
                          null === updatePayload
                            ? null
                            : {
                                lanes: updatePayload.lanes,
                                firstContext: updatePayload.firstContext
                              }),
                        (renderLanes.selfBaseDuration = type.selfBaseDuration),
                        (renderLanes.treeBaseDuration = type.treeBaseDuration)),
                    (newProps = newProps.sibling);
                push(
                  suspenseStackCursor,
                  (suspenseStackCursor.current & 1) | 2
                );
                return workInProgress.child;
              }
              current = current.sibling;
            }
          null !== type.tail &&
            now() > workInProgressRootRenderTargetTime &&
            ((workInProgress.flags |= 128),
            (newProps = !0),
            cutOffTailIfNeeded(type, !1),
            (workInProgress.lanes = 4194304));
        }
      else {
        if (!newProps)
          if (
            ((current = findFirstSuspended(updatePayload)), null !== current)
          ) {
            if (
              ((workInProgress.flags |= 128),
              (newProps = !0),
              (current = current.updateQueue),
              null !== current &&
                ((workInProgress.updateQueue = current),
                (workInProgress.flags |= 4)),
              cutOffTailIfNeeded(type, !0),
              null === type.tail &&
                "hidden" === type.tailMode &&
                !updatePayload.alternate)
            )
              return bubbleProperties(workInProgress), null;
          } else
            2 * now() - type.renderingStartTime >
              workInProgressRootRenderTargetTime &&
              1073741824 !== renderLanes &&
              ((workInProgress.flags |= 128),
              (newProps = !0),
              cutOffTailIfNeeded(type, !1),
              (workInProgress.lanes = 4194304));
        type.isBackwards
          ? ((updatePayload.sibling = workInProgress.child),
            (workInProgress.child = updatePayload))
          : ((current = type.last),
            null !== current
              ? (current.sibling = updatePayload)
              : (workInProgress.child = updatePayload),
            (type.last = updatePayload));
      }
      if (null !== type.tail)
        return (
          (workInProgress = type.tail),
          (type.rendering = workInProgress),
          (type.tail = workInProgress.sibling),
          (type.renderingStartTime = now()),
          (workInProgress.sibling = null),
          (current = suspenseStackCursor.current),
          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),
          workInProgress
        );
      bubbleProperties(workInProgress);
      return null;
    case 22:
    case 23:
      return (
        popRenderLanes(),
        (renderLanes = null !== workInProgress.memoizedState),
        null !== current &&
          (null !== current.memoizedState) !== renderLanes &&
          "unstable-defer-without-hiding" !== newProps.mode &&
          (workInProgress.flags |= 4),
        (renderLanes &&
          0 === (subtreeRenderLanes & 1073741824) &&
          0 !== (workInProgress.mode & 1)) ||
          bubbleProperties(workInProgress),
        null
      );
  }
  throw Error(
    "Unknown unit of work tag (" +
      workInProgress.tag +
      "). This error is likely caused by a bug in React. Please file an issue."
  );
}