YogaLayoutableShadowNode::YogaLayoutableShadowNode(
  const SharedYogaStylableProps &props,
  const SharedShadowNodeSharedList &children
):
  yogaNode_({}) {
  assert(props);
  assert(children);

  yogaNode_.setConfig(suitableYogaConfig().get());
  yogaNode_.setStyle(props->yogaStyle);
  yogaNode_.setContext(this);
  yogaNode_.setDirty(true);

  YogaLayoutableShadowNode::setYogaNodeChildrenBasedOnShadowNodeChildren(&yogaNode_, children);
}
YogaLayoutableShadowNode::YogaLayoutableShadowNode(
  const SharedYogaStylableProps &props,
  const SharedShadowNodeSharedList &children
) {
  assert(props);
  assert(children);

  auto yogaNode = std::make_shared<YGNode>();
  yogaNode->setConfig(suitableYogaConfig().get());
  yogaNode->setStyle(props->getYogaStyle());
  yogaNode->setContext(this);
  yogaNode->markDirtyAndPropogate();
  YogaLayoutableShadowNode::setYogaNodeChildrenBasedOnShadowNodeChildren(*yogaNode, children);
  yogaNode_ = yogaNode;
}
YogaLayoutableShadowNode::YogaLayoutableShadowNode(
  const SharedYogaLayoutableShadowNode &shadowNode,
  const SharedYogaStylableProps &props,
  const SharedShadowNodeSharedList &children
):
  yogaNode_(shadowNode->yogaNode_) {
  yogaNode_.setConfig(suitableYogaConfig().get());
  yogaNode_.setContext(this);
  yogaNode_.setOwner(nullptr);
  yogaNode_.setDirty(true);

  if (props) {
    yogaNode_.setStyle(props->yogaStyle);
  }

  if (children) {
    YogaLayoutableShadowNode::setYogaNodeChildrenBasedOnShadowNodeChildren(&yogaNode_, children);
  }
}