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