-
-
Notifications
You must be signed in to change notification settings - Fork 890
Fix snapToPosition
function call, right away after the mount.
#1623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: v4
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -807,39 +807,58 @@ const BottomSheetComponent = forwardRef<BottomSheet, BottomSheetProps>( | |
}, | ||
}); | ||
|
||
/** | ||
* 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why not early exit this method , and ensure to listen to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't believe exiting from a function in that manner is correct. The caller has requested to open the bottom sheet, and the caller doesn't have any information on whether the package is ready or undergoing some heavy operations. Regarding listening to isLayoutCalculated, if I understood it correctly, it seems more appropriate. I will update it after we know precisely whether there is a problem or not. For more details on these matters, please refer to the comment section below. |
||
* 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, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 @@ [email protected]: | |
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" | ||
|
Uh oh!
There was an error while loading. Please reload this page.