diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h index d65411a812c6d7..868a8611e8d65f 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h @@ -33,8 +33,43 @@ T get(const std::unique_ptr &animatedProp) return static_cast *>(animatedProp.get())->value; } +template +T get(const AnimatedPropBase &animatedProp) +{ + return static_cast &>(animatedProp).value; +} + struct AnimatedProps { std::vector> props; std::unique_ptr rawProps; }; + +inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animatedProp) +{ + switch (animatedProp.propName) { + case OPACITY: + viewProps.opacity = get(animatedProp); + break; + + case WIDTH: + viewProps.yogaStyle.setDimension(yoga::Dimension::Width, get(animatedProp)); + break; + + case HEIGHT: + viewProps.yogaStyle.setDimension(yoga::Dimension::Height, get(animatedProp)); + break; + + case BORDER_RADII: + viewProps.borderRadii = get(animatedProp); + break; + + case FLEX: + viewProps.yogaStyle.setFlex(get(animatedProp)); + break; + + case TRANSFORM: + viewProps.transform = get(animatedProp); + break; + } +} } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp index 6b49decc8cf2be..8ab5f07ba97319 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp @@ -41,34 +41,7 @@ static inline Props::Shared cloneProps( auto viewProps = std::const_pointer_cast( std::static_pointer_cast(newProps)); for (auto& animatedProp : animatedProps.props) { - switch (animatedProp->propName) { - case OPACITY: - viewProps->opacity = get(animatedProp); - break; - - case WIDTH: - viewProps->yogaStyle.setDimension( - yoga::Dimension::Width, get(animatedProp)); - break; - - case HEIGHT: - viewProps->yogaStyle.setDimension( - yoga::Dimension::Height, - get(animatedProp)); - break; - - case BORDER_RADII: - viewProps->borderRadii = get(animatedProp); - break; - - case FLEX: - viewProps->yogaStyle.setFlex(get(animatedProp)); - break; - - case TRANSFORM: - viewProps->transform = get(animatedProp); - break; - } + cloneProp(*viewProps, *animatedProp); } return newProps; }