Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/drawer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
"@react-navigation/native": "^6.0.0",
"react": "*",
"react-native": "*",
"react-native-gesture-handler": ">= 1.0.0",
"react-native-gesture-handler": ">= 2.0.0",
"react-native-reanimated": ">= 1.0.0",
"react-native-safe-area-context": ">= 3.0.0",
"react-native-screens": ">= 3.0.0"
Expand Down
51 changes: 24 additions & 27 deletions packages/drawer/src/views/modern/Drawer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ import {
View,
} from 'react-native';
import {
PanGestureHandler,
PanGestureHandlerGestureEvent,
Gesture,
GestureDetector,
State as GestureState,
} from 'react-native-gesture-handler';
import Animated, {
interpolate,
runOnJS,
useAnimatedGestureHandler,
useAnimatedStyle,
useDerivedValue,
useSharedValue,
Expand Down Expand Up @@ -176,23 +175,24 @@ export default function Drawer({

React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);

const onGestureEvent = useAnimatedGestureHandler<
PanGestureHandlerGestureEvent,
{ startX: number }
>({
onStart: (event, ctx) => {
ctx.startX = translationX.value;
const startX = useSharedValue(0);
let panGesture = Gesture.Pan()
.activeOffsetX([-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM])
.hitSlop(hitSlop)
.enabled(drawerType !== 'permanent' && swipeEnabled)
.onStart((event) => {
startX.value = translationX.value;
gestureState.value = event.state;
touchStartX.value = event.x;

runOnJS(onGestureStart)();
},
onActive: (event, ctx) => {
})
.onUpdate((event) => {
touchX.value = event.x;
translationX.value = ctx.startX + event.translationX;
translationX.value = startX.value + event.translationX;
gestureState.value = event.state;
},
onEnd: (event) => {
})
.onEnd((event) => {
gestureState.value = event.state;

const nextOpen =
Expand All @@ -207,11 +207,15 @@ export default function Drawer({
: open;

toggleDrawer(nextOpen, event.velocityX);
},
onFinish: () => {
})
.onFinalize(() => {
runOnJS(onGestureFinish)();
},
});
});
// @ts-expect-error Ref types incompatible yet, needs to get fixed upstream
panGesture.config = {
...panGesture.config,
...gestureHandlerProps,
};

const translateX = useDerivedValue(() => {
// Comment stolen from react-native-gesture-handler/DrawerLayout
Expand Down Expand Up @@ -317,14 +321,7 @@ export default function Drawer({

return (
<DrawerProgressContext.Provider value={progress}>
<PanGestureHandler
activeOffsetX={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}
failOffsetY={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]}
hitSlop={hitSlop}
enabled={drawerType !== 'permanent' && swipeEnabled}
onGestureEvent={onGestureEvent}
{...gestureHandlerProps}
>
<GestureDetector gesture={panGesture}>
{/* Immediate child of gesture handler needs to be an Animated.View */}
<Animated.View
style={[
Expand Down Expand Up @@ -371,7 +368,7 @@ export default function Drawer({
{renderDrawerContent()}
</Animated.View>
</Animated.View>
</PanGestureHandler>
</GestureDetector>
</DrawerProgressContext.Provider>
);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/stack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"@react-navigation/native": "^6.0.0",
"react": "*",
"react-native": "*",
"react-native-gesture-handler": ">= 1.0.0",
"react-native-gesture-handler": ">= 2.0.0",
"react-native-safe-area-context": ">= 3.0.0",
"react-native-screens": ">= 3.0.0"
},
Expand Down
4 changes: 2 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6068,7 +6068,7 @@ __metadata:
"@react-navigation/native": ^6.0.0
react: "*"
react-native: "*"
react-native-gesture-handler: ">= 1.0.0"
react-native-gesture-handler: ">= 2.0.0"
react-native-reanimated: ">= 1.0.0"
react-native-safe-area-context: ">= 3.0.0"
react-native-screens: ">= 3.0.0"
Expand Down Expand Up @@ -6295,7 +6295,7 @@ __metadata:
"@react-navigation/native": ^6.0.0
react: "*"
react-native: "*"
react-native-gesture-handler: ">= 1.0.0"
react-native-gesture-handler: ">= 2.0.0"
react-native-safe-area-context: ">= 3.0.0"
react-native-screens: ">= 3.0.0"
languageName: unknown
Expand Down