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));