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 { AlertDialogContext } from './Context';
import Box from '../../primitives/Box';
import type { IAlertDialogProps } from './types';
import { Fade } from '../Transitions';
import { useKeyboardBottomInset } from '../../../utils';
import { Overlay } from '../../primitives/Overlay';
import { useHasResponsiveProps } from '../../../hooks/useHasResponsiveProps';
const AlertDialog = (
{
children,
isOpen,
onClose,
defaultIsOpen,
initialFocusRef,
finalFocusRef,
avoidKeyboard,
closeOnOverlayClick = false,
isKeyboardDismissable = true,
overlayVisible = true,
backdropVisible = true,
animationPreset,
...rest
}: IAlertDialogProps,
ref: any
) => {
const bottomInset = useKeyboardBottomInset();
const {
contentSize,
_backdrop,
_backdropFade,
_fade,
_slide,
_overlay,
useRNModal,
...restThemeProps
} = usePropsResolution('AlertDialog', rest);
const [visible, setVisible] = useControllableState({
value: isOpen,
defaultValue: defaultIsOpen,
onChange: (val) => {
if (!val) onClose && onClose();
},
});
const handleClose = () => setVisible(false);
const child = (
{children}
);
//TODO: refactor for responsive prop
if (useHasResponsiveProps(rest)) {
return null;
}
return (
{overlayVisible && backdropVisible && (
{
closeOnOverlayClick && handleClose();
}}
{..._backdrop}
/>
)}
{animationPreset === 'slide' ? (
{child}
) : (
{child}
)}
);
};
export default memo(forwardRef(AlertDialog));