diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h index b6fdc43c662..3c6d223255e 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h @@ -28,6 +28,7 @@ class ScrollViewState final { Point contentOffset; Rect contentBoundingRect; int scrollAwayPaddingTop{0}; + int scrollAwayPaddingBottom{0}; /* * View Culling has to be disabled when accessibility features are used. @@ -46,12 +47,13 @@ class ScrollViewState final { ScrollViewState(const ScrollViewState &previousState, folly::dynamic data) : contentOffset({(Float)data["contentOffsetLeft"].getDouble(), (Float)data["contentOffsetTop"].getDouble()}), contentBoundingRect({}), - scrollAwayPaddingTop((Float)data["scrollAwayPaddingTop"].getDouble()) {}; + scrollAwayPaddingTop((Float)data["scrollAwayPaddingTop"].getDouble()), + scrollAwayPaddingBottom((Float)data["scrollAwayPaddingBottom"].getDouble()) {}; folly::dynamic getDynamic() const { return folly::dynamic::object("contentOffsetLeft", contentOffset.x)("contentOffsetTop", contentOffset.y)( - "scrollAwayPaddingTop", scrollAwayPaddingTop); + "scrollAwayPaddingTop", scrollAwayPaddingTop)("scrollAwayPaddingBottom", scrollAwayPaddingBottom); }; #endif }; diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewTest.cpp index 6e11d8130bc..8b5aa607462 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewTest.cpp @@ -136,4 +136,21 @@ TEST(ScrollViewStateTest, zeroSizeContentBoundingRect) { EXPECT_EQ(contentSize.height, 0.0f); } +#ifdef RN_SERIALIZABLE_STATE +TEST(ScrollViewStateTest, dynamicIncludesScrollAwayPaddingBottom) { + ScrollViewState state; + + EXPECT_EQ(state.getDynamic()["scrollAwayPaddingBottom"].asInt(), 0); + + folly::dynamic data = + folly::dynamic::object("contentOffsetLeft", 0.0)("contentOffsetTop", 0.0)( + "scrollAwayPaddingTop", 5.0)("scrollAwayPaddingBottom", 10.0); + ScrollViewState newState(state, data); + + EXPECT_EQ(newState.scrollAwayPaddingTop, 5); + EXPECT_EQ(newState.scrollAwayPaddingBottom, 10); + EXPECT_EQ(newState.getDynamic()["scrollAwayPaddingBottom"].asInt(), 10); +} +#endif + } // namespace facebook::react diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api index e793d6f7de2..15159656a01 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api @@ -3600,6 +3600,7 @@ class facebook::react::ScrollViewState { public facebook::react::Rect contentBoundingRect; public facebook::react::Size getContentSize() const; public folly::dynamic getDynamic() const; + public int scrollAwayPaddingBottom; public int scrollAwayPaddingTop; } diff --git a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api index b05f7665f7d..39e4e316a88 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api @@ -5782,6 +5782,7 @@ class facebook::react::ScrollViewState { public facebook::react::Point contentOffset; public facebook::react::Rect contentBoundingRect; public facebook::react::Size getContentSize() const; + public int scrollAwayPaddingBottom; public int scrollAwayPaddingTop; } diff --git a/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api index 2772d8e63b9..81d364e957b 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api @@ -2193,6 +2193,7 @@ class facebook::react::ScrollViewState { public facebook::react::Point contentOffset; public facebook::react::Rect contentBoundingRect; public facebook::react::Size getContentSize() const; + public int scrollAwayPaddingBottom; public int scrollAwayPaddingTop; }