import * as React from "react"; import classNames from "classnames"; // @ts-ignore import Animated from "rc-animate/lib/CSSMotion"; import TreeNode, { TreeNodeProps } from "./tree-node"; import { FlattenNode } from "./interface"; import { getTreeNodeProps, TreeNodeRequiredProps } from "./util/tree-util"; import { TreeContext } from "./context-types"; interface MotionTreeNodeProps extends Omit { active: boolean; motion?: any; motionNodes?: FlattenNode[]; onMotionEnd: () => void; motionType?: "show" | "hide"; treeNodeRequiredProps: TreeNodeRequiredProps; } //Motion Tree Node component const MotionTreeNode: React.FC = ( { className, style, motion, motionNodes, motionType, onMotionEnd, active, treeNodeRequiredProps, ...props }, ref ) => { const [visible, setVisible] = React.useState(true); const { prefixCls } = React.useContext(TreeContext); React.useEffect(() => { if (motionNodes && motionType === "hide" && visible) { setVisible(false); } }, [motionNodes]); if (motionNodes) { return ( {({ className: motionClassName, style: motionStyle }, motionRef) => (
{motionNodes.map((treeNode: FlattenNode) => { const { data: { key, ...restProps }, isStart, isEnd } = treeNode; delete restProps.children; const treeNodeProps = getTreeNodeProps( key, treeNodeRequiredProps ); return ( ); })}
)}
); } return ( ); }; MotionTreeNode.displayName = "MotionTreeNode"; const RefMotionTreeNode = React.forwardRef(MotionTreeNode); export { RefMotionTreeNode };