32 lines
866 B
JavaScript
Executable File
32 lines
866 B
JavaScript
Executable File
import useEventCallback from '@restart/hooks/useEventCallback';
|
|
import useMergedRefs from '@restart/hooks/useMergedRefs';
|
|
import { cloneElement, useEffect, useRef } from 'react';
|
|
function NoopTransition({
|
|
children,
|
|
in: inProp,
|
|
onExited,
|
|
mountOnEnter,
|
|
unmountOnExit
|
|
}) {
|
|
const ref = useRef(null);
|
|
const hasEnteredRef = useRef(inProp);
|
|
const handleExited = useEventCallback(onExited);
|
|
useEffect(() => {
|
|
if (inProp) hasEnteredRef.current = true;else {
|
|
handleExited(ref.current);
|
|
}
|
|
}, [inProp, handleExited]);
|
|
const combinedRef = useMergedRefs(ref, children.ref);
|
|
const child = /*#__PURE__*/cloneElement(children, {
|
|
ref: combinedRef
|
|
});
|
|
if (inProp) return child;
|
|
if (unmountOnExit) {
|
|
return null;
|
|
}
|
|
if (!hasEnteredRef.current && mountOnEnter) {
|
|
return null;
|
|
}
|
|
return child;
|
|
}
|
|
export default NoopTransition; |