diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp index 85c3da824eb102..14f7430f2006c6 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp @@ -283,6 +283,10 @@ void packAnimatedProp( case MAX_WIDTH: case MIN_HEIGHT: case MIN_WIDTH: + case STYLE_OVERFLOW: + case POSITION_TYPE: + case Z_INDEX: + case DIRECTION: throw std::runtime_error("Tried to synchronously update layout props"); } } diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h index 034a67fbd785b6..ba706131c4ee54 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h @@ -51,7 +51,11 @@ enum PropName { MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, - MIN_WIDTH + MIN_WIDTH, + STYLE_OVERFLOW, + POSITION_TYPE, + Z_INDEX, + DIRECTION, }; struct AnimatedPropBase { @@ -355,6 +359,22 @@ inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animated viewProps.yogaStyle.setMinDimension(yoga::Dimension::Width, get(animatedProp)); break; + case STYLE_OVERFLOW: + viewProps.yogaStyle.setOverflow(get(animatedProp)); + break; + + case POSITION_TYPE: + viewProps.yogaStyle.setPositionType(get(animatedProp)); + break; + + case Z_INDEX: + viewProps.zIndex = get>(animatedProp); + break; + + case DIRECTION: + viewProps.yogaStyle.setDirection(get(animatedProp)); + break; + default: break; } diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h index a3755c4c36c6b4..fd3e0f5c27a55e 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h @@ -168,6 +168,22 @@ struct AnimatedPropsBuilder { { props.push_back(std::make_unique>(MIN_WIDTH, value)); } + void setOverflow(yoga::Overflow value) + { + props.push_back(std::make_unique>(STYLE_OVERFLOW, value)); + } + void setPositionType(yoga::PositionType value) + { + props.push_back(std::make_unique>(POSITION_TYPE, value)); + } + void setZIndex(std::optional value) + { + props.push_back(std::make_unique>>(Z_INDEX, value)); + } + void setDirection(yoga::Direction value) + { + props.push_back(std::make_unique>(DIRECTION, value)); + } void storeDynamic(folly::dynamic &d) { rawProps = std::make_unique(std::move(d)); diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h index 749eaa57912dcf..293325795858d8 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h @@ -240,6 +240,22 @@ inline void updateProp(const PropName propName, BaseViewProps &viewProps, const viewProps.yogaStyle.setMinDimension( yoga::Dimension::Width, snapshot.props.yogaStyle.minDimension(yoga::Dimension::Width)); break; + + case STYLE_OVERFLOW: + viewProps.yogaStyle.setOverflow(snapshot.props.yogaStyle.overflow()); + break; + + case POSITION_TYPE: + viewProps.yogaStyle.setPositionType(snapshot.props.yogaStyle.positionType()); + break; + + case Z_INDEX: + viewProps.zIndex = snapshot.props.zIndex; + break; + + case DIRECTION: + viewProps.yogaStyle.setDirection(snapshot.props.yogaStyle.direction()); + break; } } diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp index 6cb8a707c4e0ac..884a469b8b90be 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp @@ -16,15 +16,12 @@ namespace facebook::react { static const auto layoutProps = std::set{ - PropName::WIDTH, PropName::HEIGHT, PropName::FLEX, - PropName::MARGIN, PropName::PADDING, PropName::POSITION, - PropName::BORDER_WIDTH, PropName::ALIGN_CONTENT, PropName::ALIGN_ITEMS, - PropName::ALIGN_SELF, PropName::ASPECT_RATIO, PropName::BOX_SIZING, - PropName::DISPLAY, PropName::FLEX_BASIS, PropName::FLEX_DIRECTION, - PropName::ROW_GAP, PropName::COLUMN_GAP, PropName::FLEX_GROW, - PropName::FLEX_SHRINK, PropName::FLEX_WRAP, PropName::JUSTIFY_CONTENT, - PropName::MAX_HEIGHT, PropName::MAX_WIDTH, PropName::MIN_HEIGHT, - PropName::MIN_WIDTH, + WIDTH, HEIGHT, FLEX, MARGIN, PADDING, + POSITION, BORDER_WIDTH, ALIGN_CONTENT, ALIGN_ITEMS, ALIGN_SELF, + ASPECT_RATIO, BOX_SIZING, DISPLAY, FLEX_BASIS, FLEX_DIRECTION, + ROW_GAP, COLUMN_GAP, FLEX_GROW, FLEX_SHRINK, FLEX_WRAP, + JUSTIFY_CONTENT, MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH, + STYLE_OVERFLOW, POSITION_TYPE, DIRECTION, Z_INDEX, }; UIManagerNativeAnimatedDelegateBackendImpl::