From 604084edfa88e5291f52aa68aa7b6a81d5fa0310 Mon Sep 17 00:00:00 2001 From: Georg Vienna Date: Thu, 13 Feb 2025 17:21:36 +0100 Subject: [PATCH 1/2] feat: add enabled prop to draggable view --- src/components/bottomSheet/BottomSheet.tsx | 8 +++----- .../bottomSheetDraggableView/BottomSheetDraggableView.tsx | 6 +++--- src/components/bottomSheetDraggableView/types.d.ts | 1 + 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/bottomSheet/BottomSheet.tsx b/src/components/bottomSheet/BottomSheet.tsx index 321034d68..55f3dae7b 100644 --- a/src/components/bottomSheet/BottomSheet.tsx +++ b/src/components/bottomSheet/BottomSheet.tsx @@ -1866,9 +1866,6 @@ const BottomSheetComponent = forwardRef( //#endregion // render - const DraggableView = enableContentPanningGesture - ? BottomSheetDraggableView - : Animated.View; return ( @@ -1906,12 +1903,13 @@ const BottomSheetComponent = forwardRef( accessibilityRole={_providedAccessibilityRole ?? undefined} accessibilityLabel={_providedAccessibilityLabel ?? undefined} > - {children} - + {footerComponent && ( { //#region hooks const { - enableContentPanningGesture, simultaneousHandlers: _providedSimultaneousHandlers, waitFor, activeOffsetX, @@ -56,7 +56,7 @@ const BottomSheetDraggableViewComponent = ({ ]); const draggableGesture = useMemo(() => { let gesture = Gesture.Pan() - .enabled(enableContentPanningGesture) + .enabled(enabled) .shouldCancelWhenOutside(false) .runOnJS(false) .onStart(contentPanGestureHandler.handleOnStart) @@ -94,7 +94,7 @@ const BottomSheetDraggableViewComponent = ({ }, [ activeOffsetX, activeOffsetY, - enableContentPanningGesture, + enabled, failOffsetX, failOffsetY, simultaneousHandlers, diff --git a/src/components/bottomSheetDraggableView/types.d.ts b/src/components/bottomSheetDraggableView/types.d.ts index 5ed61d78c..3ca52e0c2 100644 --- a/src/components/bottomSheetDraggableView/types.d.ts +++ b/src/components/bottomSheetDraggableView/types.d.ts @@ -6,4 +6,5 @@ export type BottomSheetDraggableViewProps = RNViewProps & { nativeGestureRef?: Exclude; refreshControlGestureRef?: Exclude; children: ReactNode[] | ReactNode; + enabled?: boolean }; From efd67194b85380bca01f7951ed081b90393ef55a Mon Sep 17 00:00:00 2001 From: Georg Vienna Date: Fri, 14 Feb 2025 09:56:31 +0100 Subject: [PATCH 2/2] add example --- .../screens/advanced/DraggableViewExample.tsx | 74 +++++++++++++++++++ example/src/screens/index.ts | 5 ++ 2 files changed, 79 insertions(+) create mode 100644 example/src/screens/advanced/DraggableViewExample.tsx diff --git a/example/src/screens/advanced/DraggableViewExample.tsx b/example/src/screens/advanced/DraggableViewExample.tsx new file mode 100644 index 000000000..e47dfabcd --- /dev/null +++ b/example/src/screens/advanced/DraggableViewExample.tsx @@ -0,0 +1,74 @@ +import React, { useCallback, useMemo, useRef } from 'react'; +import { View, StyleSheet, Text } from 'react-native'; +import BottomSheet, { BottomSheetDraggableView, BottomSheetView } from '@gorhom/bottom-sheet'; +import { Button } from '../../components/button'; + +const DraggableViewExample = () => { + // hooks + const bottomSheetRef = useRef(null); + + // variables + const snapPoints = useMemo(() => ['25%', '50%'], []); + + // callbacks + const handleExpandPress = useCallback(() => { + bottomSheetRef.current?.expand(); + }, []); + const handleCollapsePress = useCallback(() => { + bottomSheetRef.current?.collapse(); + }, []); + const handleClosePress = useCallback(() => { + bottomSheetRef.current?.close(); + }, []); + + // renders + return ( + +