diff --git a/package.json b/package.json index 70d90672b..80d27915f 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "react-native": "^0.62.2", "react-native-builder-bob": "^0.18.1", "react-native-gesture-handler": "^1.10.3", - "react-native-reanimated": "^2.8.0", + "react-native-reanimated": "^3.5.4", "release-it": "^16.1.5", "typescript": "^4.2.4" }, @@ -72,7 +72,7 @@ "react": "*", "react-native": "*", "react-native-gesture-handler": ">=1.10.1", - "react-native-reanimated": ">=2.2.0" + "react-native-reanimated": ">=3.0.0" }, "peerDependenciesMeta": { "@types/react-native": { diff --git a/src/components/bottomSheet/BottomSheet.tsx b/src/components/bottomSheet/BottomSheet.tsx index 1050af591..46789cf98 100644 --- a/src/components/bottomSheet/BottomSheet.tsx +++ b/src/components/bottomSheet/BottomSheet.tsx @@ -807,39 +807,58 @@ const BottomSheetComponent = forwardRef( }, }); - /** - * normalized provided position. - */ - const nextPosition = normalizeSnapPoint( - position, - animatedContainerHeight.value - ); + const snapToPosition = () => { + /** + * normalized provided position. + */ + const nextPosition = normalizeSnapPoint( + position, + animatedContainerHeight.value + ); - /** - * exit method if : - * - layout is not calculated. - * - already animating to next position. - * - sheet is forced closing. - */ - if ( - !isLayoutCalculated || - nextPosition === animatedNextPosition.value || - isForcedClosing.value - ) { - return; - } + /** + * exit method if : + * - layout is not calculated. + * - already animating to next position. + * - sheet is forced closing. + */ + if ( + !isLayoutCalculated || + nextPosition === animatedNextPosition.value || + isForcedClosing.value + ) { + return; + } + + /** + * mark the new position as temporary. + */ + isInTemporaryPosition.value = true; + + runOnUI(animateToPosition)( + nextPosition, + ANIMATION_SOURCE.USER, + 0, + animationConfigs + ); + }; /** - * mark the new position as temporary. + * Checks whether the library has measured the container's height or if it was passed from props. + * If the height is not measured, the function waits for the value to be updated. + * The variable 'isContainerHeightCalculated' cannot be solely trusted, + * as it only checks if the value is neither undefined nor null. + * Fixes: https://github.com/gorhom/react-native-bottom-sheet/issues/1294 */ - isInTemporaryPosition.value = true; - - runOnUI(animateToPosition)( - nextPosition, - ANIMATION_SOURCE.USER, - 0, - animationConfigs - ); + if (animatedContainerHeight.value === INITIAL_CONTAINER_HEIGHT) + runOnUI(() => { + const id = Math.random(); + animatedContainerHeight.addListener(id, () => { + runOnJS(snapToPosition)(); + animatedContainerHeight.removeListener(id); + }); + })(); + else snapToPosition(); }, [ animateToPosition, diff --git a/yarn.lock b/yarn.lock index 110b52fe4..e3f6ce4f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1969,11 +1969,6 @@ resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.34.tgz#05e4f79f465c2007884374d4795452f995720bbe" integrity sha512-lYUtmJ9BqUN688fGY1U1HZoWT1/Jrmgigx2loq4ZcJpICECm/Om3V314BxdzypO0u5PORKGMM6x0OXaljV1YFg== -"@types/invariant@^2.2.35": - version "2.2.35" - resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be" - integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -3455,6 +3450,11 @@ convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -6388,11 +6388,6 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - lodash.isfunction@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" @@ -8071,18 +8066,15 @@ react-native-gesture-handler@^1.10.3: invariant "^2.2.4" prop-types "^15.7.2" -react-native-reanimated@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.8.0.tgz#93c06ca84d91fb3865110b0857c49a24e316130e" - integrity sha512-kJvf/UWLBMaGCs9X66MKq5zdFMgwx8D0nHnolbHR7s8ZnbLdb7TlQ/yuzIXqn/9wABfnwtNRI3CyaP1aHWMmZg== +react-native-reanimated@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.5.4.tgz#a6c2b0c43b6dad246f5d276213974afedb8e3fc7" + integrity sha512-8we9LLDO1o4Oj9/DICeEJ2K1tjfqkJagqQUglxeUAkol/HcEJ6PGxIrpBcNryLqCDYEcu6FZWld/FzizBIw6bg== dependencies: "@babel/plugin-transform-object-assign" "^7.16.7" "@babel/preset-typescript" "^7.16.7" - "@types/invariant" "^2.2.35" + convert-source-map "^2.0.0" invariant "^2.2.4" - lodash.isequal "^4.5.0" - setimmediate "^1.0.5" - string-hash-64 "^1.0.3" react-native@^0.62.2: version "0.62.3" @@ -9060,11 +9052,6 @@ string-argv@0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -string-hash-64@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string-hash-64/-/string-hash-64-1.0.3.tgz#0deb56df58678640db5c479ccbbb597aaa0de322" - integrity sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw== - string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"