import React, { useRef, useEffect } from 'react'; import { View, Platform } from 'react-native'; import type { ViewProps } from 'react-native'; import useEvent from '../hooks/use-event'; import deepClone from '../utils/deep-clone'; interface IOutsidePressHandlerProps extends ViewProps { onOutsidePress: () => void; disabled?: boolean; } export default function OutsidePressHandler(props: IOutsidePressHandlerProps) { const { children, onOutsidePress, disabled = false } = props; const id: string = useRef(Math.random().toString()).current; const { appendEvent, removeEvent, setSkippedEventId } = useEvent(); const setSkippedEventIdFunc = () => setSkippedEventId(id); useEffect(() => { appendEvent({ id, onOutsidePress, disabled }); return () => removeEvent(id); }, [onOutsidePress, disabled]); return Platform.select({ web: ( {deepClone(children, setSkippedEventIdFunc)} ), default: ( {children} ), }); }