UNPKG

7.52 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
10
11var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
12
13var _typeof2 = require('babel-runtime/helpers/typeof');
14
15var _typeof3 = _interopRequireDefault(_typeof2);
16
17var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
18
19var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
20
21var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
22
23var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
24
25var _inherits2 = require('babel-runtime/helpers/inherits');
26
27var _inherits3 = _interopRequireDefault(_inherits2);
28
29var _class, _temp;
30
31var _react = require('react');
32
33var _react2 = _interopRequireDefault(_react);
34
35var _propTypes = require('prop-types');
36
37var _propTypes2 = _interopRequireDefault(_propTypes);
38
39var _reactTransitionGroup = require('react-transition-group');
40
41var _child = require('./child');
42
43var _child2 = _interopRequireDefault(_child);
44
45function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
47var noop = function noop() {};
48var FirstChild = function FirstChild(props) {
49 var childrenArray = _react2.default.Children.toArray(props.children);
50 return childrenArray[0] || null;
51};
52
53/**
54 * Animate
55 */
56var Animate = (_temp = _class = function (_Component) {
57 (0, _inherits3.default)(Animate, _Component);
58
59 function Animate() {
60 (0, _classCallCheck3.default)(this, Animate);
61 return (0, _possibleConstructorReturn3.default)(this, _Component.apply(this, arguments));
62 }
63
64 Animate.prototype.normalizeNames = function normalizeNames(names) {
65 if (typeof names === 'string') {
66 return {
67 appear: names + '-appear',
68 appearActive: names + '-appear-active',
69 enter: names + '-enter',
70 enterActive: names + '-enter-active',
71 leave: names + '-leave',
72 leaveActive: names + '-leave-active'
73 };
74 }
75 if ((typeof names === 'undefined' ? 'undefined' : (0, _typeof3.default)(names)) === 'object') {
76 return {
77 appear: names.appear,
78 appearActive: names.appear + '-active',
79 enter: '' + names.enter,
80 enterActive: names.enter + '-active',
81 leave: '' + names.leave,
82 leaveActive: names.leave + '-active'
83 };
84 }
85 };
86
87 Animate.prototype.render = function render() {
88 var _this2 = this;
89
90 /* eslint-disable no-unused-vars */
91 var _props = this.props,
92 animation = _props.animation,
93 children = _props.children,
94 animationAppear = _props.animationAppear,
95 singleMode = _props.singleMode,
96 component = _props.component,
97 beforeAppear = _props.beforeAppear,
98 onAppear = _props.onAppear,
99 afterAppear = _props.afterAppear,
100 beforeEnter = _props.beforeEnter,
101 onEnter = _props.onEnter,
102 afterEnter = _props.afterEnter,
103 beforeLeave = _props.beforeLeave,
104 onLeave = _props.onLeave,
105 afterLeave = _props.afterLeave,
106 others = (0, _objectWithoutProperties3.default)(_props, ['animation', 'children', 'animationAppear', 'singleMode', 'component', 'beforeAppear', 'onAppear', 'afterAppear', 'beforeEnter', 'onEnter', 'afterEnter', 'beforeLeave', 'onLeave', 'afterLeave']);
107 /* eslint-enable no-unused-vars */
108
109 var animateChildren = _react.Children.map(children, function (child) {
110 return _react2.default.createElement(
111 _child2.default,
112 {
113 key: child.key,
114 names: _this2.normalizeNames(animation),
115 onAppear: beforeAppear,
116 onAppearing: onAppear,
117 onAppeared: afterAppear,
118 onEnter: beforeEnter,
119 onEntering: onEnter,
120 onEntered: afterEnter,
121 onExit: beforeLeave,
122 onExiting: onLeave,
123 onExited: afterLeave
124 },
125 child
126 );
127 });
128
129 return _react2.default.createElement(
130 _reactTransitionGroup.TransitionGroup,
131 (0, _extends3.default)({
132 appear: animationAppear,
133 component: singleMode ? FirstChild : component
134 }, others),
135 animateChildren
136 );
137 };
138
139 return Animate;
140}(_react.Component), _class.propTypes = {
141 /**
142 * 动画 className
143 */
144 animation: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),
145 /**
146 * 子元素第一次挂载时是否执行动画
147 */
148 animationAppear: _propTypes2.default.bool,
149 /**
150 * 包裹子元素的标签
151 */
152 component: _propTypes2.default.any,
153 /**
154 * 是否只有单个子元素,如果有多个子元素,请设置为 false
155 */
156 singleMode: _propTypes2.default.bool,
157 /**
158 * 子元素
159 */
160 children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.arrayOf(_propTypes2.default.element)]),
161 /**
162 * 执行第一次挂载动画前触发的回调函数
163 */
164 beforeAppear: _propTypes2.default.func,
165 /**
166 * 执行第一次挂载动画,添加 xxx-appear-active 类名后触发的回调函数
167 * @param {HTMLElement} node 执行动画的 dom 元素
168 */
169 onAppear: _propTypes2.default.func,
170 /**
171 * 执行完第一次挂载动画后触发的函数
172 * @param {HTMLElement} node 执行动画的 dom 元素
173 */
174 afterAppear: _propTypes2.default.func,
175 /**
176 * 执行进场动画前触发的回调函数
177 * @param {HTMLElement} node 执行动画的 dom 元素
178 */
179 beforeEnter: _propTypes2.default.func,
180 /**
181 * 执行进场动画,添加 xxx-enter-active 类名后触发的回调函数
182 * @param {HTMLElement} node 执行动画的 dom 元素
183 */
184 onEnter: _propTypes2.default.func,
185 /**
186 * 执行完进场动画后触发的回调函数
187 * @param {HTMLElement} node 执行动画的 dom 元素
188 */
189 afterEnter: _propTypes2.default.func,
190 /**
191 * 执行离场动画前触发的回调函数
192 * @param {HTMLElement} node 执行动画的 dom 元素
193 */
194 beforeLeave: _propTypes2.default.func,
195 /**
196 * 执行离场动画,添加 xxx-leave-active 类名后触发的回调函数
197 * @param {HTMLElement} node 执行动画的 dom 元素
198 */
199 onLeave: _propTypes2.default.func,
200 /**
201 * 执行完离场动画后触发的回调函数
202 * @param {HTMLElement} node 执行动画的 dom 元素
203 */
204 afterLeave: _propTypes2.default.func
205}, _class.defaultProps = {
206 animationAppear: true,
207 component: 'div',
208 singleMode: true,
209 beforeAppear: noop,
210 onAppear: noop,
211 afterAppear: noop,
212 beforeEnter: noop,
213 onEnter: noop,
214 afterEnter: noop,
215 beforeLeave: noop,
216 onLeave: noop,
217 afterLeave: noop
218}, _temp);
219Animate.displayName = 'Animate';
220exports.default = Animate;
221module.exports = exports['default'];
\No newline at end of file