UNPKG

3.73 kBJavaScriptView Raw
1import _objectDestructuringEmpty from "@babel/runtime/helpers/esm/objectDestructuringEmpty";
2import _extends from "@babel/runtime/helpers/esm/extends";
3import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5var _excluded = ["className", "style", "motion", "motionNodes", "motionType", "onMotionStart", "onMotionEnd", "active", "treeNodeRequiredProps"];
6import * as React from 'react';
7import { useEffect } from 'react';
8import classNames from 'classnames';
9import CSSMotion from 'rc-motion';
10import TreeNode from './TreeNode';
11import { getTreeNodeProps } from './utils/treeUtil';
12import { TreeContext } from './contextTypes';
13var MotionTreeNode = function MotionTreeNode(_ref, ref) {
14 var className = _ref.className,
15 style = _ref.style,
16 motion = _ref.motion,
17 motionNodes = _ref.motionNodes,
18 motionType = _ref.motionType,
19 onOriginMotionStart = _ref.onMotionStart,
20 onOriginMotionEnd = _ref.onMotionEnd,
21 active = _ref.active,
22 treeNodeRequiredProps = _ref.treeNodeRequiredProps,
23 props = _objectWithoutProperties(_ref, _excluded);
24 var _React$useState = React.useState(true),
25 _React$useState2 = _slicedToArray(_React$useState, 2),
26 visible = _React$useState2[0],
27 setVisible = _React$useState2[1];
28 var _React$useContext = React.useContext(TreeContext),
29 prefixCls = _React$useContext.prefixCls;
30 var motionedRef = React.useRef(false);
31 var onMotionEnd = function onMotionEnd() {
32 if (!motionedRef.current) {
33 onOriginMotionEnd();
34 }
35 motionedRef.current = true;
36 };
37 useEffect(function () {
38 if (motionNodes && motionType === 'hide' && visible) {
39 setVisible(false);
40 }
41 }, [motionNodes]);
42 var reruningEffectFlag = null;
43 useEffect(function () {
44 // Trigger motion only when patched
45 if (motionNodes) {
46 if (reruningEffectFlag === null) {
47 onOriginMotionStart();
48 } else {
49 clearTimeout(reruningEffectFlag);
50 }
51 }
52 return function () {
53 if (motionNodes) {
54 reruningEffectFlag = setTimeout(onMotionEnd, 0);
55 }
56 };
57 }, []);
58 if (motionNodes) {
59 return /*#__PURE__*/React.createElement(CSSMotion, _extends({
60 ref: ref,
61 visible: visible
62 }, motion, {
63 motionAppear: motionType === 'show',
64 onAppearEnd: onMotionEnd,
65 onLeaveEnd: onMotionEnd
66 }), function (_ref2, motionRef) {
67 var motionClassName = _ref2.className,
68 motionStyle = _ref2.style;
69 return /*#__PURE__*/React.createElement("div", {
70 ref: motionRef,
71 className: classNames("".concat(prefixCls, "-treenode-motion"), motionClassName),
72 style: motionStyle
73 }, motionNodes.map(function (treeNode) {
74 var restProps = _extends({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),
75 title = treeNode.title,
76 key = treeNode.key,
77 isStart = treeNode.isStart,
78 isEnd = treeNode.isEnd;
79 delete restProps.children;
80 var treeNodeProps = getTreeNodeProps(key, treeNodeRequiredProps);
81 return /*#__PURE__*/React.createElement(TreeNode, _extends({}, restProps, treeNodeProps, {
82 title: title,
83 active: active,
84 data: treeNode.data,
85 key: key,
86 isStart: isStart,
87 isEnd: isEnd
88 }));
89 }));
90 });
91 }
92 return /*#__PURE__*/React.createElement(TreeNode, _extends({
93 domRef: ref,
94 className: className,
95 style: style
96 }, props, {
97 active: active
98 }));
99};
100MotionTreeNode.displayName = 'MotionTreeNode';
101var RefMotionTreeNode = /*#__PURE__*/React.forwardRef(MotionTreeNode);
102export default RefMotionTreeNode;
\No newline at end of file