UNPKG

5.42 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
7exports.__esModule = true;
8exports.default = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
14var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
15
16var _classnames = _interopRequireDefault(require("classnames"));
17
18var _style = _interopRequireDefault(require("dom-helpers/style"));
19
20var _react = _interopRequireDefault(require("react"));
21
22var _end = _interopRequireDefault(require("dom-helpers/transition/end"));
23
24var _Transition = _interopRequireWildcard(require("react-transition-group/Transition"));
25
26var _triggerBrowserReflow = _interopRequireDefault(require("./utils/triggerBrowserReflow"));
27
28var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
29
30var _collapseStyles;
31
32var MARGINS = {
33 height: ['marginTop', 'marginBottom'],
34 width: ['marginLeft', 'marginRight']
35};
36
37function getDimensionValue(dimension, elem) {
38 var offset = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
39 var value = elem[offset];
40 var margins = MARGINS[dimension];
41 return value + parseInt((0, _style.default)(elem, margins[0]), 10) + parseInt((0, _style.default)(elem, margins[1]), 10);
42}
43
44var collapseStyles = (_collapseStyles = {}, _collapseStyles[_Transition.EXITED] = 'collapse', _collapseStyles[_Transition.EXITING] = 'collapsing', _collapseStyles[_Transition.ENTERING] = 'collapsing', _collapseStyles[_Transition.ENTERED] = 'collapse show', _collapseStyles);
45var defaultProps = {
46 in: false,
47 timeout: 300,
48 mountOnEnter: false,
49 unmountOnExit: false,
50 appear: false,
51 dimension: 'height',
52 getDimensionValue: getDimensionValue
53};
54
55var Collapse =
56/*#__PURE__*/
57function (_React$Component) {
58 (0, _inheritsLoose2.default)(Collapse, _React$Component);
59
60 function Collapse() {
61 var _this;
62
63 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
64 args[_key] = arguments[_key];
65 }
66
67 _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
68
69 _this.handleEnter = function (elem) {
70 elem.style[_this.getDimension()] = '0';
71 };
72
73 _this.handleEntering = function (elem) {
74 var dimension = _this.getDimension();
75
76 elem.style[dimension] = _this._getScrollDimensionValue(elem, dimension);
77 };
78
79 _this.handleEntered = function (elem) {
80 elem.style[_this.getDimension()] = null;
81 };
82
83 _this.handleExit = function (elem) {
84 var dimension = _this.getDimension();
85
86 elem.style[dimension] = _this.props.getDimensionValue(dimension, elem) + "px";
87 (0, _triggerBrowserReflow.default)(elem);
88 };
89
90 _this.handleExiting = function (elem) {
91 elem.style[_this.getDimension()] = null;
92 };
93
94 return _this;
95 }
96
97 var _proto = Collapse.prototype;
98
99 _proto.getDimension = function getDimension() {
100 return typeof this.props.dimension === 'function' ? this.props.dimension() : this.props.dimension;
101 }
102 /* -- Expanding -- */
103 ;
104
105 // for testing
106 _proto._getScrollDimensionValue = function _getScrollDimensionValue(elem, dimension) {
107 var scroll = "scroll" + dimension[0].toUpperCase() + dimension.slice(1);
108 return elem[scroll] + "px";
109 };
110
111 _proto.render = function render() {
112 var _this2 = this;
113
114 var _this$props = this.props,
115 onEnter = _this$props.onEnter,
116 onEntering = _this$props.onEntering,
117 onEntered = _this$props.onEntered,
118 onExit = _this$props.onExit,
119 onExiting = _this$props.onExiting,
120 className = _this$props.className,
121 children = _this$props.children,
122 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["onEnter", "onEntering", "onEntered", "onExit", "onExiting", "className", "children"]);
123 delete props.dimension;
124 delete props.getDimensionValue;
125 var handleEnter = (0, _createChainedFunction.default)(this.handleEnter, onEnter);
126 var handleEntering = (0, _createChainedFunction.default)(this.handleEntering, onEntering);
127 var handleEntered = (0, _createChainedFunction.default)(this.handleEntered, onEntered);
128 var handleExit = (0, _createChainedFunction.default)(this.handleExit, onExit);
129 var handleExiting = (0, _createChainedFunction.default)(this.handleExiting, onExiting);
130 return _react.default.createElement(_Transition.default, (0, _extends2.default)({
131 addEndListener: _end.default
132 }, props, {
133 "aria-expanded": props.role ? props.in : null,
134 onEnter: handleEnter,
135 onEntering: handleEntering,
136 onEntered: handleEntered,
137 onExit: handleExit,
138 onExiting: handleExiting
139 }), function (state, innerProps) {
140 return _react.default.cloneElement(children, (0, _extends2.default)({}, innerProps, {
141 className: (0, _classnames.default)(className, children.props.className, collapseStyles[state], _this2.getDimension() === 'width' && 'width')
142 }));
143 });
144 };
145
146 return Collapse;
147}(_react.default.Component);
148
149Collapse.defaultProps = defaultProps;
150var _default = Collapse;
151exports.default = _default;
152module.exports = exports["default"];
\No newline at end of file