diff --git a/ReactCommon/fabric/uimanager/FabricUIManager.cpp b/ReactCommon/fabric/uimanager/FabricUIManager.cpp index 23dd8f8c60..9e20dd0563 100644 --- a/ReactCommon/fabric/uimanager/FabricUIManager.cpp +++ b/ReactCommon/fabric/uimanager/FabricUIManager.cpp @@ -230,16 +230,6 @@ SharedShadowNode FabricUIManager::cloneNodeWithNewChildrenAndProps(const SharedS void FabricUIManager::appendChild(const SharedShadowNode &parentShadowNode, const SharedShadowNode &childShadowNode) { isLoggingEnabled && LOG(INFO) << "FabricUIManager::appendChild(parentShadowNode: " << parentShadowNode->getDebugDescription(DebugStringConvertibleOptions {.format = false}) << ", childShadowNode: " << childShadowNode->getDebugDescription(DebugStringConvertibleOptions {.format = false}) << ")"; const SharedComponentDescriptor &componentDescriptor = (*componentDescriptorRegistry_)[parentShadowNode]; - - // TODO: Remove this after we move this to JS side. - if (childShadowNode->getSealed()) { - auto childComponentDescriptor = (*componentDescriptorRegistry_)[childShadowNode]; - auto clonedChildShadowNode = childComponentDescriptor->cloneShadowNode(childShadowNode); - auto nonConstClonedChildShadowNode = std::const_pointer_cast(clonedChildShadowNode); - componentDescriptor->appendChild(parentShadowNode, clonedChildShadowNode); - return; - } - componentDescriptor->appendChild(parentShadowNode, childShadowNode); } diff --git a/ReactCommon/fabric/view/yoga/YogaLayoutableShadowNode.cpp b/ReactCommon/fabric/view/yoga/YogaLayoutableShadowNode.cpp index 69ed311158..34b0f372fa 100644 --- a/ReactCommon/fabric/view/yoga/YogaLayoutableShadowNode.cpp +++ b/ReactCommon/fabric/view/yoga/YogaLayoutableShadowNode.cpp @@ -94,12 +94,16 @@ void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) auto yogaNodeRawPtr = &yogaNode_; auto childYogaNodeRawPtr = &child->yogaNode_; - yogaNodeRawPtr->insertChild(childYogaNodeRawPtr, yogaNodeRawPtr->getChildren().size()); - if (childYogaNodeRawPtr->getOwner() == nullptr) { - child->ensureUnsealed(); - childYogaNodeRawPtr->setOwner(yogaNodeRawPtr); + if (childYogaNodeRawPtr->getOwner() != nullptr) { + child = std::static_pointer_cast(cloneAndReplaceChild(child)); + childYogaNodeRawPtr = &child->yogaNode_; } + + child->ensureUnsealed(); + childYogaNodeRawPtr->setOwner(yogaNodeRawPtr); + + yogaNodeRawPtr->insertChild(childYogaNodeRawPtr, yogaNodeRawPtr->getChildren().size()); } void YogaLayoutableShadowNode::layout(LayoutContext layoutContext) {