import React, { ComponentPropsWithoutRef, ComponentType } from 'react' import { Transition, Transitioning } from 'react-native-reanimated' import { useAfterInteractions } from './use-after-interactions' interface Props { transition?: ComponentPropsWithoutRef<typeof Transitioning.View>['transition'] children: React.ReactNode style?: ComponentPropsWithoutRef<typeof Transitioning.View>['style'] placeHolder?: ComponentType } const OptimizedHeavyScreen = ({ transition = ( <Transition.Together> <Transition.Change interpolation="easeInOut" /> <Transition.In type="fade" /> </Transition.Together> ), style, children, placeHolder: Placeholder, }: Props) => { const { transitionRef, areInteractionsComplete } = useAfterInteractions() return ( <Transitioning.View transition={transition} style={style} ref={transitionRef} > {areInteractionsComplete ? ( children ) : !!Placeholder ? ( <Placeholder /> ) : null} </Transitioning.View> ) } export { OptimizedHeavyScreen }