/* eslint-disable @typescript-eslint/no-unused-vars */ import { OverlayContainer } from '@react-native-aria/overlays'; import React from 'react'; import type { ViewStyle } from 'react-native'; import { Modal, Platform } from 'react-native'; import { useKeyboardDismissable } from '../../../hooks'; import { ExitAnimationContext } from './ExitAnimationContext'; export interface IOverlayProps { isOpen?: boolean; children?: any; // We use RN modal on android if needed as it supports shifting accessiblity focus to the opened view. IOS automatically shifts focus if an absolutely placed view appears in front. useRNModalOnAndroid?: boolean; useRNModal?: boolean; onRequestClose?: any; isKeyboardDismissable?: boolean; animationPreset?: 'fade' | 'slide' | 'none'; style?: ViewStyle; unmountOnExit?: boolean; } export function Overlay({ children, isOpen, useRNModal = false, useRNModalOnAndroid = false, isKeyboardDismissable = true, //@ts-ignore animationPreset = 'fade', onRequestClose, style, unmountOnExit, }: IOverlayProps) { const [exited, setExited] = React.useState(!isOpen); useKeyboardDismissable({ enabled: isOpen && isKeyboardDismissable, callback: onRequestClose ? onRequestClose : () => {}, }); const styleObj = { ...style }; if (animationPreset === 'slide') { styleObj.overflow = 'hidden'; styleObj.display = 'flex'; } else { styleObj.display = exited && !isOpen ? 'none' : 'flex'; } if (unmountOnExit && !isOpen && exited) { return null; } if (useRNModal || (useRNModalOnAndroid && Platform.OS === 'android')) { return ( {children} ); } if (unmountOnExit && !isOpen && exited) { return null; } return ( //@ts-ignore {children} ); }