@@ -26,6 +26,7 @@ import {
2626} from 'react-native' ;
2727import EventManager , { actionSheetEventManager } from './eventmanager' ;
2828import {
29+ Route ,
2930 RouterContext ,
3031 RouterParamsContext ,
3132 useRouter ,
@@ -294,7 +295,7 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
294295
295296 const getCurrentPosition = React . useCallback ( ( ) => {
296297 //@ts -ignore
297- return animations . translateY . _value <= minTranslateValue . current
298+ return animations . translateY . _value <= minTranslateValue . current + 5
298299 ? 0
299300 : //@ts -ignore
300301 ( animations . translateY . _value as number ) ;
@@ -579,20 +580,23 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
579580 let gestures = true ;
580581 for ( let _id in gestureBoundaries . current ) {
581582 const gestureBoundary = gestureBoundaries . current [ _id ] ;
582- if ( getCurrentPosition ( ) > 0 || ! gestureBoundary ) {
583+ if ( getCurrentPosition ( ) > 3 || ! gestureBoundary ) {
583584 gestures = true ;
584585 break ;
585586 }
586587 const scrollOffset = gestureBoundary ?. scrollOffset || 0 ;
587588 if (
588- event . nativeEvent . pageY < gestureBoundary ?. y ||
589+ event . nativeEvent . locationY < gestureBoundary ?. y ||
589590 ( gesture . vy > 0 && scrollOffset <= 0 ) ||
590591 getCurrentPosition ( ) !== 0
591592 ) {
592- if ( event . nativeEvent . pageY > gestureBoundary ?. y )
593- gestures = false ;
594-
595- if ( Platform . OS === 'web' ) {
593+ if (
594+ ! props . enableGesturesInScrollView &&
595+ Platform . OS !== 'web' &&
596+ event . nativeEvent . locationY > gestureBoundary ?. y
597+ ) {
598+ return false ;
599+ } else {
596600 gestures = true ;
597601 }
598602 } else {
@@ -614,29 +618,27 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
614618 onStartShouldSetPanResponder : ( event , _gesture ) => {
615619 if ( sheetId && ! isRenderedOnTop ( sheetId , currentContext ) )
616620 return false ;
617-
618- if ( Platform . OS === 'web' ) {
619- let gestures = true ;
620- for ( let _id in gestureBoundaries . current ) {
621- const gestureBoundary = gestureBoundaries . current [ _id ] ;
622- if ( getCurrentPosition ( ) > 3 || ! gestureBoundary ) {
623- gestures = true ;
624- }
625- const scrollOffset = gestureBoundary ?. scrollOffset || 0 ;
626- if (
627- event . nativeEvent . pageY < gestureBoundary ?. y ||
628- scrollOffset <= 0 ||
629- getCurrentPosition ( ) !== 0
630- ) {
631- gestures = true ;
621+ let gestures = true ;
622+ for ( let _id in gestureBoundaries . current ) {
623+ const gestureBoundary = gestureBoundaries . current [ _id ] ;
624+ if ( getCurrentPosition ( ) > 3 || ! gestureBoundary ) {
625+ gestures = true ;
626+ }
627+ const scrollOffset = gestureBoundary ?. scrollOffset || 0 ;
628+ if (
629+ event . nativeEvent . locationY < gestureBoundary ?. y ||
630+ ( scrollOffset <= 0 && getCurrentPosition ( ) !== 0 )
631+ ) {
632+ if ( Platform . OS !== 'web' ) {
633+ return false ;
632634 } else {
633- gestures = false ;
635+ gestures = true ;
634636 }
637+ } else {
638+ gestures = false ;
635639 }
636-
637- return gestures ;
638640 }
639- return true ;
641+ return gestures ;
640642 } ,
641643 onPanResponderMove : ( _event , gesture ) => {
642644 const value = initialValue . current + gesture . dy ;
@@ -688,6 +690,7 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
688690 sheetId ,
689691 currentContext ,
690692 getCurrentPosition ,
693+ props . enableGesturesInScrollView ,
691694 overdrawFactor ,
692695 overdrawSize ,
693696 animations . translateY ,
@@ -950,6 +953,30 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
950953 ] ,
951954 ) ;
952955
956+ const renderRoute = useCallback (
957+ ( route : Route ) => {
958+ const RouteComponent = route . component as any ;
959+ return (
960+ < Animated . View
961+ key = { route . name }
962+ style = { {
963+ display :
964+ route . name !== router . currentRoute ?. name ? 'none' : 'flex' ,
965+ opacity : animations . routeOpacity ,
966+ } } >
967+ < RouterParamsContext . Provider value = { route ?. params } >
968+ < RouteComponent
969+ router = { router }
970+ params = { route ?. params }
971+ payload = { payloadRef . current }
972+ />
973+ </ RouterParamsContext . Provider >
974+ </ Animated . View >
975+ ) ;
976+ } ,
977+ [ animations . routeOpacity , router ] ,
978+ ) ;
979+
953980 const getPaddingBottom = ( ) => {
954981 if ( ! props . useBottomSafeAreaPadding && ! props . containerStyle ) return 0 ;
955982
@@ -1147,29 +1174,7 @@ export default forwardRef<ActionSheetRef, ActionSheetProps>(
11471174
11481175 { router ?. hasRoutes ( ) ? (
11491176 < RouterContext . Provider value = { router } >
1150- { router ?. stack . map ( route => {
1151- const RouteComponent = route . component as any ;
1152- return (
1153- < Animated . View
1154- key = { route . name }
1155- style = { {
1156- display :
1157- route . name !== router . currentRoute ?. name
1158- ? 'none'
1159- : 'flex' ,
1160- opacity : animations . routeOpacity ,
1161- } } >
1162- < RouterParamsContext . Provider
1163- value = { route ?. params } >
1164- < RouteComponent
1165- router = { router }
1166- params = { route ?. params }
1167- payload = { payloadRef . current }
1168- />
1169- </ RouterParamsContext . Provider >
1170- </ Animated . View >
1171- ) ;
1172- } ) }
1177+ { router ?. stack . map ( renderRoute ) }
11731178 </ RouterContext . Provider >
11741179 ) : (
11751180 props ?. children
0 commit comments