import React, { forwardRef, memo } from 'react'; import { StyleSheet } from 'react-native'; import Backdrop from '../Backdrop'; import { Slide } from '../Transitions'; import { FocusScope } from '@react-native-aria/focus'; import { useControllableState, usePropsResolution } from '../../../hooks'; import { ModalContext } from './Context'; import Box from '../../primitives/Box'; import type { IModalProps } from './types'; import { Fade } from '../../composites/Transitions'; import { useKeyboardBottomInset } from '../../../utils'; import { Overlay } from '../../primitives/Overlay'; const Modal = ( { children, isOpen, onClose, defaultIsOpen, initialFocusRef, finalFocusRef, avoidKeyboard, closeOnOverlayClick = true, isKeyboardDismissable = true, overlayVisible = true, //@ts-ignore - internal purpose only animationPreset = 'fade', ...rest }: IModalProps, ref: any ) => { const bottomInset = useKeyboardBottomInset(); const { contentSize, ...restThemeProps } = usePropsResolution('Modal', rest); const [visible, setVisible] = useControllableState({ value: isOpen, defaultValue: defaultIsOpen, onChange: (val) => { if (!val) onClose && onClose(); }, }); const handleClose = () => setVisible(false); let child = ( {children} ); return ( {overlayVisible && ( { closeOnOverlayClick && handleClose(); }} /> )} {animationPreset === 'slide' ? ( {child} ) : ( {child} )} ); }; export default memo(forwardRef(Modal));