UNPKG

3.88 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 classNames from 'classnames';
7import CSSMotion from 'rc-motion';
8import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
9import * as React from 'react';
10import { TreeContext } from './contextTypes';
11import TreeNode from './TreeNode';
12import useUnmount from './useUnmount';
13import { getTreeNodeProps } from './utils/treeUtil';
14var MotionTreeNode = function MotionTreeNode(_ref, ref) {
15 var className = _ref.className,
16 style = _ref.style,
17 motion = _ref.motion,
18 motionNodes = _ref.motionNodes,
19 motionType = _ref.motionType,
20 onOriginMotionStart = _ref.onMotionStart,
21 onOriginMotionEnd = _ref.onMotionEnd,
22 active = _ref.active,
23 treeNodeRequiredProps = _ref.treeNodeRequiredProps,
24 props = _objectWithoutProperties(_ref, _excluded);
25 var _React$useState = React.useState(true),
26 _React$useState2 = _slicedToArray(_React$useState, 2),
27 visible = _React$useState2[0],
28 setVisible = _React$useState2[1];
29 var _React$useContext = React.useContext(TreeContext),
30 prefixCls = _React$useContext.prefixCls;
31 // Calculate target visible here.
32 // And apply in effect to make `leave` motion work.
33 var targetVisible = motionNodes && motionType !== 'hide';
34 useLayoutEffect(function () {
35 if (motionNodes) {
36 onOriginMotionStart();
37 if (targetVisible !== visible) {
38 setVisible(targetVisible);
39 }
40 }
41 }, [motionNodes]);
42 // Should only trigger once
43 var triggerMotionEndRef = React.useRef(false);
44 var triggerMotionEnd = function triggerMotionEnd() {
45 if (motionNodes && !triggerMotionEndRef.current) {
46 triggerMotionEndRef.current = true;
47 onOriginMotionEnd();
48 }
49 };
50 // Effect if unmount
51 useUnmount(triggerMotionEnd);
52 // Motion end event
53 var onVisibleChanged = function onVisibleChanged(nextVisible) {
54 if (targetVisible === nextVisible) {
55 triggerMotionEnd();
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 onVisibleChanged: onVisibleChanged
65 }), function (_ref2, motionRef) {
66 var motionClassName = _ref2.className,
67 motionStyle = _ref2.style;
68 return /*#__PURE__*/React.createElement("div", {
69 ref: motionRef,
70 className: classNames("".concat(prefixCls, "-treenode-motion"), motionClassName),
71 style: motionStyle
72 }, motionNodes.map(function (treeNode) {
73 var restProps = _extends({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),
74 title = treeNode.title,
75 key = treeNode.key,
76 isStart = treeNode.isStart,
77 isEnd = treeNode.isEnd;
78 delete restProps.children;
79 var treeNodeProps = getTreeNodeProps(key, treeNodeRequiredProps);
80 return /*#__PURE__*/React.createElement(TreeNode, _extends({}, restProps, treeNodeProps, {
81 title: title,
82 active: active,
83 data: treeNode.data,
84 key: key,
85 isStart: isStart,
86 isEnd: isEnd
87 }));
88 }));
89 });
90 }
91 return /*#__PURE__*/React.createElement(TreeNode, _extends({
92 domRef: ref,
93 className: className,
94 style: style
95 }, props, {
96 active: active
97 }));
98};
99MotionTreeNode.displayName = 'MotionTreeNode';
100var RefMotionTreeNode = /*#__PURE__*/React.forwardRef(MotionTreeNode);
101export default RefMotionTreeNode;
\No newline at end of file