UNPKG

6.22 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
12
13var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
14
15var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
16
17var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
18
19var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
20
21var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
22
23var _createClass2 = require('babel-runtime/helpers/createClass');
24
25var _createClass3 = _interopRequireDefault(_createClass2);
26
27var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
28
29var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
30
31var _inherits2 = require('babel-runtime/helpers/inherits');
32
33var _inherits3 = _interopRequireDefault(_inherits2);
34
35var _simpleAssign = require('simple-assign');
36
37var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
38
39var _react = require('react');
40
41var _react2 = _interopRequireDefault(_react);
42
43var _propTypes = require('prop-types');
44
45var _propTypes2 = _interopRequireDefault(_propTypes);
46
47var _reactDom = require('react-dom');
48
49var _reactDom2 = _interopRequireDefault(_reactDom);
50
51var _transitions = require('../styles/transitions');
52
53var _transitions2 = _interopRequireDefault(_transitions);
54
55function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
56
57var reflow = function reflow(elem) {
58 return elem.offsetHeight;
59};
60
61var ExpandTransitionChild = function (_Component) {
62 (0, _inherits3.default)(ExpandTransitionChild, _Component);
63
64 function ExpandTransitionChild() {
65 (0, _classCallCheck3.default)(this, ExpandTransitionChild);
66 return (0, _possibleConstructorReturn3.default)(this, (ExpandTransitionChild.__proto__ || (0, _getPrototypeOf2.default)(ExpandTransitionChild)).apply(this, arguments));
67 }
68
69 (0, _createClass3.default)(ExpandTransitionChild, [{
70 key: 'componentWillUnmount',
71 value: function componentWillUnmount() {
72 clearTimeout(this.enterTimer);
73 clearTimeout(this.enteredTimer);
74 clearTimeout(this.leaveTimer);
75 }
76 }, {
77 key: 'componentWillAppear',
78 value: function componentWillAppear(callback) {
79 this.open();
80 callback();
81 }
82 }, {
83 key: 'componentDidAppear',
84 value: function componentDidAppear() {
85 this.setAutoHeight();
86 }
87 }, {
88 key: 'componentWillEnter',
89 value: function componentWillEnter(callback) {
90 var _this2 = this;
91
92 var _props = this.props,
93 enterDelay = _props.enterDelay,
94 transitionDelay = _props.transitionDelay,
95 transitionDuration = _props.transitionDuration;
96
97 var element = _reactDom2.default.findDOMNode(this);
98 element.style.height = 0;
99 this.enterTimer = setTimeout(function () {
100 return _this2.open();
101 }, enterDelay);
102 this.enteredTimer = setTimeout(function () {
103 return callback();
104 }, enterDelay + transitionDelay + transitionDuration);
105 }
106 }, {
107 key: 'componentDidEnter',
108 value: function componentDidEnter() {
109 this.setAutoHeight();
110 }
111 }, {
112 key: 'componentWillLeave',
113 value: function componentWillLeave(callback) {
114 var _props2 = this.props,
115 transitionDelay = _props2.transitionDelay,
116 transitionDuration = _props2.transitionDuration;
117
118 var element = _reactDom2.default.findDOMNode(this);
119 // Set fixed height first for animated property value
120 element.style.height = this.refs.wrapper.clientHeight + 'px';
121 reflow(element);
122 element.style.transitionDuration = transitionDuration + 'ms';
123 element.style.height = 0;
124 this.leaveTimer = setTimeout(function () {
125 return callback();
126 }, transitionDelay + transitionDuration);
127 }
128 }, {
129 key: 'setAutoHeight',
130 value: function setAutoHeight() {
131 var _ReactDOM$findDOMNode = _reactDom2.default.findDOMNode(this),
132 style = _ReactDOM$findDOMNode.style;
133
134 style.transitionDuration = 0;
135 style.height = 'auto';
136 }
137 }, {
138 key: 'open',
139 value: function open() {
140 var element = _reactDom2.default.findDOMNode(this);
141 element.style.height = this.refs.wrapper.clientHeight + 'px';
142 }
143 }, {
144 key: 'render',
145 value: function render() {
146 var _props3 = this.props,
147 children = _props3.children,
148 enterDelay = _props3.enterDelay,
149 style = _props3.style,
150 transitionDelay = _props3.transitionDelay,
151 transitionDuration = _props3.transitionDuration,
152 other = (0, _objectWithoutProperties3.default)(_props3, ['children', 'enterDelay', 'style', 'transitionDelay', 'transitionDuration']);
153 var prepareStyles = this.context.muiTheme.prepareStyles;
154
155
156 var mergedRootStyles = (0, _simpleAssign2.default)({
157 position: 'relative',
158 height: 0,
159 width: '100%',
160 top: 0,
161 left: 0,
162 overflow: 'hidden',
163 transition: _transitions2.default.easeOut(transitionDuration + 'ms', ['height'], transitionDelay + 'ms')
164 }, style);
165
166 return _react2.default.createElement(
167 'div',
168 (0, _extends3.default)({}, other, { style: prepareStyles(mergedRootStyles) }),
169 _react2.default.createElement(
170 'div',
171 { ref: 'wrapper' },
172 children
173 )
174 );
175 }
176 }]);
177 return ExpandTransitionChild;
178}(_react.Component);
179
180ExpandTransitionChild.defaultProps = {
181 enterDelay: 0,
182 transitionDelay: 0,
183 transitionDuration: 450
184};
185ExpandTransitionChild.contextTypes = {
186 muiTheme: _propTypes2.default.object.isRequired
187};
188ExpandTransitionChild.propTypes = process.env.NODE_ENV !== "production" ? {
189 children: _propTypes2.default.node,
190 enterDelay: _propTypes2.default.number,
191 style: _propTypes2.default.object,
192 transitionDelay: _propTypes2.default.number,
193 transitionDuration: _propTypes2.default.number
194} : {};
195exports.default = ExpandTransitionChild;
\No newline at end of file