@gorhom/bottom-sheet
Version:
A performant interactive bottom sheet with fully configurable options 🚀
90 lines (78 loc) • 3.06 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import React, { useMemo, useRef, memo } from 'react';
import Animated from 'react-native-reanimated';
import { PanGestureHandler } from 'react-native-gesture-handler';
import { useBottomSheetGestureHandlers, useBottomSheetInternal } from '../../hooks';
import { GESTURE_SOURCE } from '../../constants';
import { styles } from './styles';
const BottomSheetDraggableViewComponent = ({
gestureType = GESTURE_SOURCE.CONTENT,
nativeGestureRef,
refreshControlGestureRef,
style,
children,
...rest
}) => {
//#region hooks
const {
enableContentPanningGesture,
simultaneousHandlers: _providedSimultaneousHandlers,
waitFor,
activeOffsetX,
activeOffsetY,
failOffsetX,
failOffsetY
} = useBottomSheetInternal();
const {
contentPanGestureHandler,
scrollablePanGestureHandler
} = useBottomSheetGestureHandlers(); //#endregion
//#region variables
const panGestureRef = useRef(null);
const gestureHandler = useMemo(() => gestureType === GESTURE_SOURCE.CONTENT ? contentPanGestureHandler : scrollablePanGestureHandler, [gestureType, contentPanGestureHandler, scrollablePanGestureHandler]);
const simultaneousHandlers = useMemo(() => {
const refs = [];
if (nativeGestureRef) {
refs.push(nativeGestureRef);
}
if (refreshControlGestureRef) {
refs.push(refreshControlGestureRef);
}
if (_providedSimultaneousHandlers) {
if (Array.isArray(_providedSimultaneousHandlers)) {
refs.push(..._providedSimultaneousHandlers);
} else {
refs.push(_providedSimultaneousHandlers);
}
}
return refs;
}, [_providedSimultaneousHandlers, nativeGestureRef, refreshControlGestureRef]); //#endregion
//#region styles
const containerStyle = useMemo(() => {
if (!style) {
return styles.container;
}
if (Array.isArray(style)) {
return [styles.container, ...style];
}
return [styles.container, style];
}, [style]); //#endregion
return /*#__PURE__*/React.createElement(PanGestureHandler, {
ref: panGestureRef,
enabled: enableContentPanningGesture,
simultaneousHandlers: simultaneousHandlers,
shouldCancelWhenOutside: false,
waitFor: waitFor,
onGestureEvent: gestureHandler,
activeOffsetX: activeOffsetX,
activeOffsetY: activeOffsetY,
failOffsetX: failOffsetX,
failOffsetY: failOffsetY
}, /*#__PURE__*/React.createElement(Animated.View, _extends({
style: containerStyle
}, rest), children));
};
const BottomSheetDraggableView = /*#__PURE__*/memo(BottomSheetDraggableViewComponent);
BottomSheetDraggableView.displayName = 'BottomSheetDraggableView';
export default BottomSheetDraggableView;
//# sourceMappingURL=BottomSheetDraggableView.js.map