| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | import { Transition } from '@douyinfe/semi-animation-react';import PropTypes from 'prop-types';import React, { useState } from 'react';import { Motion } from '@douyinfe/semi-foundation/utils/type';const ease = 'cubicBezier(.25,.1,.25,1)';const formatStyle = function formatStyle({ maxHeight, opacity }: { maxHeight: number; opacity: number }) {    return {        maxHeight,        opacity,    };};export interface SubNavTransitionProps {    children?: React.ReactNode | ((transitionProps?: any) => React.ReactNode);    isCollapsed?: boolean;    maxHeight?: number;    motion?: Motion;}function SubNavTransition(props: SubNavTransitionProps = {}) {    const { children, isCollapsed, maxHeight = 999 } = props;    // eslint-disable-next-line no-unused-vars    const [immediate, setImmediate] = useState(false);    // useEffect(() => {    //     setImmediate(isCollapsed);    // }, [isCollapsed]);    return (        <Transition            from={{ maxHeight: 0, opacity: 0 }}            enter={{                maxHeight: { val: maxHeight, easing: 'easeInQuad', duration: 250 },                opacity: { val: 1, duration: 200, easing: 'cubic-bezier(0.5, -0.1, 1, 0.4)' },            }}            leave={{                maxHeight: { val: 0, easing: ease, duration: 250 },                opacity: {                    val: 0,                    duration: isCollapsed ? 1 : 200, // Need to be fast and transparent when put away, otherwise there will be jumping                    easing: 'cubic-bezier(0.5, -0.1, 1, 0.4)',                },            }}            immediate={immediate}        >            {typeof children === 'function' ? (transitionStyle: { maxHeight: number; opacity: number }) => children(formatStyle(transitionStyle)) : children}        </Transition>    );}SubNavTransition.propTypes = {    children: PropTypes.any,    isCollapsed: PropTypes.bool,};export default SubNavTransition;
 |