import type { ElementRef, FC } from '../../lib/teact/teact'; import type React from '../../lib/teact/teact'; import { useRef } from '../../lib/teact/teact'; import usePreviousDeprecated from '../../hooks/usePreviousDeprecated'; import useShowTransition from '../../hooks/useShowTransition'; type OwnProps = { isOpen: boolean; isCustom?: boolean; isHidden?: boolean; id?: string; className?: string; onClick?: (e: React.MouseEvent) => void; noCloseTransition?: boolean; shouldAnimateFirstRender?: boolean; style?: string; children: React.ReactNode; ref?: ElementRef; }; const ShowTransition: FC = ({ isOpen, isHidden, isCustom, id, className, onClick, children, noCloseTransition, shouldAnimateFirstRender, style, ref: externalRef, }) => { const prevIsOpen = usePreviousDeprecated(isOpen); const prevChildren = usePreviousDeprecated(children); const fromChildrenRef = useRef(); const isFirstRender = prevIsOpen === undefined; const { ref, shouldRender } = useShowTransition({ isOpen: isOpen && !isHidden, ref: externalRef, noMountTransition: isFirstRender && !shouldAnimateFirstRender, className: isCustom ? false : undefined, noCloseTransition, withShouldRender: true, }); if (prevIsOpen && !isOpen) { fromChildrenRef.current = prevChildren; } return ( (shouldRender || isHidden) && (
{isOpen ? children : fromChildrenRef.current!}
) ); }; export default ShowTransition;