@@ -36,16 +36,18 @@ import Animated, {
3636 withSpring ,
3737} from 'react-native-reanimated' ;
3838
39- import { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects' ;
40- import { GestureDetector } from '../handlers/gestures/GestureDetector' ;
4139import {
4240 UserSelect ,
4341 ActiveCursor ,
4442 MouseButton ,
4543 HitSlop ,
46- GestureStateChangeEvent ,
4744} from '../handlers/gestureHandlerCommon' ;
48- import { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload' ;
45+ import {
46+ PanGestureStateChangeEvent ,
47+ usePan ,
48+ useTap ,
49+ } from '../v3/hooks/gestures' ;
50+ import { GestureDetector } from '../v3/detectors' ;
4951
5052const DRAG_TOSS = 0.05 ;
5153
@@ -432,9 +434,9 @@ const DrawerLayout = forwardRef<DrawerLayoutMethods, DrawerLayoutProps>(
432434 ) ;
433435
434436 const handleRelease = useCallback (
435- ( event : GestureStateChangeEvent < PanGestureHandlerEventPayload > ) => {
437+ ( event : PanGestureStateChangeEvent ) => {
436438 'worklet' ;
437- let { translationX : dragX , velocityX, x : touchX } = event ;
439+ let { translationX : dragX , velocityX, x : touchX } = event . handlerData ;
438440
439441 if ( drawerPosition !== DrawerPosition . LEFT ) {
440442 // See description in _updateAnimatedEvent about why events are flipped
@@ -497,20 +499,18 @@ const DrawerLayout = forwardRef<DrawerLayoutMethods, DrawerLayoutProps>(
497499 [ animateDrawer ]
498500 ) ;
499501
500- const overlayDismissGesture = useMemo (
501- ( ) =>
502- Gesture . Tap ( )
503- . maxDistance ( 25 )
504- . onEnd ( ( ) => {
505- if (
506- isDrawerOpen . value &&
507- drawerLockMode !== DrawerLockMode . LOCKED_OPEN
508- ) {
509- closeDrawer ( ) ;
510- }
511- } ) ,
512- [ closeDrawer , isDrawerOpen , drawerLockMode ]
513- ) ;
502+ const overlayDismissGesture = useTap ( {
503+ maxDistance : 25 ,
504+ onEnd : ( ) => {
505+ 'worklet' ;
506+ if (
507+ isDrawerOpen . value &&
508+ drawerLockMode !== DrawerLockMode . LOCKED_OPEN
509+ ) {
510+ closeDrawer ( ) ;
511+ }
512+ } ,
513+ } ) ;
514514
515515 const overlayAnimatedStyle = useAnimatedStyle ( ( ) => ( {
516516 opacity : openValue . value ,
@@ -522,86 +522,63 @@ const DrawerLayout = forwardRef<DrawerLayoutMethods, DrawerLayoutProps>(
522522 [ drawerWidth , isFromLeft ]
523523 ) ;
524524
525- const panGesture = useMemo ( ( ) => {
526- return Gesture . Pan ( )
527- . activeCursor ( activeCursor )
528- . mouseButton ( mouseButton )
529- . hitSlop ( drawerOpened ? fillHitSlop : edgeHitSlop )
530- . minDistance ( drawerOpened ? 100 : 0 )
531- . activeOffsetX ( gestureOrientation * minSwipeDistance )
532- . failOffsetY ( [ - 15 , 15 ] )
533- . simultaneousWithExternalGesture ( overlayDismissGesture )
534- . enableTrackpadTwoFingerGesture ( enableTrackpadTwoFingerGesture )
535- . enabled (
536- drawerState !== DrawerState . SETTLING &&
537- ( drawerOpened
538- ? drawerLockMode !== DrawerLockMode . LOCKED_OPEN
539- : drawerLockMode !== DrawerLockMode . LOCKED_CLOSED )
540- )
541- . onStart ( ( ) => {
542- emitStateChanged ( DrawerState . DRAGGING , false ) ;
543- runOnJS ( setDrawerState ) ( DrawerState . DRAGGING ) ;
544- if ( keyboardDismissMode === DrawerKeyboardDismissMode . ON_DRAG ) {
545- runOnJS ( dismissKeyboard ) ( ) ;
546- }
547- if ( hideStatusBar ) {
548- runOnJS ( setStatusBarHidden ) ( true , statusBarAnimation ) ;
549- }
550- } )
551- . onUpdate ( ( event ) => {
552- const startedOutsideTranslation = isFromLeft
553- ? interpolate (
554- event . x ,
555- [ 0 , drawerWidth , drawerWidth + 1 ] ,
556- [ 0 , drawerWidth , drawerWidth ]
557- )
558- : interpolate (
559- event . x - containerWidth ,
560- [ - drawerWidth - 1 , - drawerWidth , 0 ] ,
561- [ drawerWidth , drawerWidth , 0 ]
562- ) ;
563-
564- const startedInsideTranslation =
565- sideCorrection *
566- ( event . translationX +
567- ( drawerOpened ? drawerWidth * - gestureOrientation : 0 ) ) ;
568-
569- const adjustedTranslation = Math . max (
570- drawerOpened ? startedOutsideTranslation : 0 ,
571- startedInsideTranslation
572- ) ;
573-
574- openValue . value = interpolate (
575- adjustedTranslation ,
576- [ - drawerWidth , 0 , drawerWidth ] ,
577- [ 1 , 0 , 1 ] ,
578- Extrapolation . CLAMP
579- ) ;
580- } )
581- . onEnd ( handleRelease ) ;
582- } , [
583- drawerLockMode ,
584- openValue ,
585- drawerWidth ,
586- emitStateChanged ,
587- gestureOrientation ,
588- handleRelease ,
589- edgeHitSlop ,
590- fillHitSlop ,
591- minSwipeDistance ,
592- hideStatusBar ,
593- keyboardDismissMode ,
594- overlayDismissGesture ,
595- drawerOpened ,
596- isFromLeft ,
597- containerWidth ,
598- sideCorrection ,
599- drawerState ,
600- activeCursor ,
601- enableTrackpadTwoFingerGesture ,
602- mouseButton ,
603- statusBarAnimation ,
604- ] ) ;
525+ const panGesture = usePan ( {
526+ activeCursor : activeCursor ,
527+ mouseButton : mouseButton ,
528+ hitSlop : drawerOpened ? fillHitSlop : edgeHitSlop ,
529+ activeOffsetX : gestureOrientation * minSwipeDistance ,
530+ failOffsetY : [ - 15 , 15 ] ,
531+ simultaneousWith : overlayDismissGesture ,
532+ enableTrackpadTwoFingerGesture : enableTrackpadTwoFingerGesture ,
533+ enabled :
534+ drawerState !== DrawerState . SETTLING &&
535+ ( drawerOpened
536+ ? drawerLockMode !== DrawerLockMode . LOCKED_OPEN
537+ : drawerLockMode !== DrawerLockMode . LOCKED_CLOSED ) ,
538+ onStart : ( ) => {
539+ 'worklet' ;
540+ emitStateChanged ( DrawerState . DRAGGING , false ) ;
541+ runOnJS ( setDrawerState ) ( DrawerState . DRAGGING ) ;
542+ if ( keyboardDismissMode === DrawerKeyboardDismissMode . ON_DRAG ) {
543+ runOnJS ( dismissKeyboard ) ( ) ;
544+ }
545+ if ( hideStatusBar ) {
546+ runOnJS ( setStatusBarHidden ) ( true , statusBarAnimation ) ;
547+ }
548+ } ,
549+ onUpdate : ( event ) => {
550+ 'worklet' ;
551+ const startedOutsideTranslation = isFromLeft
552+ ? interpolate (
553+ event . handlerData . x ,
554+ [ 0 , drawerWidth , drawerWidth + 1 ] ,
555+ [ 0 , drawerWidth , drawerWidth ]
556+ )
557+ : interpolate (
558+ event . handlerData . x - containerWidth ,
559+ [ - drawerWidth - 1 , - drawerWidth , 0 ] ,
560+ [ drawerWidth , drawerWidth , 0 ]
561+ ) ;
562+
563+ const startedInsideTranslation =
564+ sideCorrection *
565+ ( event . handlerData . translationX +
566+ ( drawerOpened ? drawerWidth * - gestureOrientation : 0 ) ) ;
567+
568+ const adjustedTranslation = Math . max (
569+ drawerOpened ? startedOutsideTranslation : 0 ,
570+ startedInsideTranslation
571+ ) ;
572+
573+ openValue . value = interpolate (
574+ adjustedTranslation ,
575+ [ - drawerWidth , 0 , drawerWidth ] ,
576+ [ 1 , 0 , 1 ] ,
577+ Extrapolation . CLAMP
578+ ) ;
579+ } ,
580+ onEnd : handleRelease ,
581+ } ) ;
605582
606583 // When using RTL, row and row-reverse flex directions are flipped.
607584 const reverseContentDirection = I18nManager . isRTL
0 commit comments