UNPKG

@re-flex/transition-group

Version:

Re-flex UI Transtion Controller Package

41 lines (40 loc) 1.49 kB
import { cloneElement, useMemo } from "react"; import useUseTransition, { Phase } from "./useTransition"; const createStyle = (transition, styles) => { switch (true) { case transition.appear: return styles.appear; case transition.appearActive: return { ...styles.appear, ...styles.appearActive }; case transition.appearDone: return styles.appearDone; case transition.enter: return styles.enter; case transition.enterActive: return { ...styles.enter, ...styles.enterActive }; case transition.enterDone: return styles.enterDone; case transition.exit: return styles.exit; case transition.exitActive: return { ...styles.exit, ...styles.exitActive }; case transition.exitDone: return styles.exitDone; default: return {}; } }; export default ({ children, styles, alwaysMounted, ...transitionProps }) => { const [transitionState, phase] = useUseTransition(transitionProps); const style = children.props?.style; const generatedElement = useMemo(() => { const finalStyle = { ...createStyle(transitionState, styles), ...style, }; return cloneElement(children, { style: finalStyle, }); }, [style, styles, transitionState, children]); return (alwaysMounted || phase !== Phase.EXITED) && generatedElement; };