import React, { forwardRef, useCallback } from 'react'; // @ts-ignore - Peer dependency import { Keyboard, Text, TouchableOpacity, View } from 'react-native'; // @ts-ignore - Peer dependency import BottomSheet, { BottomSheetBackdrop } from '@gorhom/bottom-sheet'; // @ts-ignore - Peer dependency import { SafeAreaView } from 'react-native-safe-area-context'; import { createCustomBottomSheetStyles } from './CustomBottomSheetStyles'; import { useFontFamily } from '../../context/FontFamilyContext'; type CustomBottomSheetProps = { snapPoints?: Array; title?: string; children: React.ReactNode; bottomSheetStyle?: object; containerStyle?: object; onClose?: () => void; onChange?: (index: number) => void; disablePanDownToClose?: boolean; safeAreaDisabled?: boolean; headerStyle?: object; sheetContentStyle?: object; headerTextStyle?: object; closeBtnCntnrStyle?: object; closeIconColor?: string; isSheetOpen?: number; setIsSheetOpen?: (index: number) => void; showHandleComponent?: boolean; showNoHeader?: boolean; pressBehavior?: 'close' | 'collapse' | 'none'; }; export const CustomBottomSheet = React.memo( forwardRef( ( { snapPoints = ['40%'], title, children, bottomSheetStyle, containerStyle, onClose, onChange, disablePanDownToClose, safeAreaDisabled = false, headerStyle, sheetContentStyle, headerTextStyle, closeBtnCntnrStyle, closeIconColor, isSheetOpen = -1, setIsSheetOpen, showHandleComponent = false, showNoHeader = false, pressBehavior = 'close', ...restProps }, ref ) => { const styles = createCustomBottomSheetStyles(); const { fontStyle } = useFontFamily(); const renderBackdrop = useCallback( (backdropProps: any) => ( ), [pressBehavior] ); const handleClosePress = () => { onClose?.(); if (ref && 'current' in ref) { ref.current?.close(); } Keyboard.dismiss(); setTimeout(() => { setIsSheetOpen?.(-1); }, 200); }; const handleChange = (index: number) => { if (index === -1) { onClose?.(); setTimeout(() => { setIsSheetOpen?.(-1); }, 200); } onChange?.(index); }; if (isSheetOpen === -1) { return null; } return ( <> {!showNoHeader && title && ( {title} )} {safeAreaDisabled ? ( children ) : ( {children} )} ); } ) );