UNPKG

5 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 _classnames = _interopRequireDefault(require("classnames"));
15
16var _css = _interopRequireDefault(require("dom-helpers/css"));
17
18var _react = _interopRequireWildcard(require("react"));
19
20var _Transition = _interopRequireWildcard(require("react-transition-group/Transition"));
21
22var _transitionEndListener = _interopRequireDefault(require("./transitionEndListener"));
23
24var _createChainedFunction = _interopRequireDefault(require("./createChainedFunction"));
25
26var _triggerBrowserReflow = _interopRequireDefault(require("./triggerBrowserReflow"));
27
28var _collapseStyles;
29
30var MARGINS = {
31 height: ['marginTop', 'marginBottom'],
32 width: ['marginLeft', 'marginRight']
33};
34
35function getDefaultDimensionValue(dimension, elem) {
36 var offset = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
37 var value = elem[offset];
38 var margins = MARGINS[dimension];
39 return value + // @ts-ignore
40 parseInt((0, _css.default)(elem, margins[0]), 10) + // @ts-ignore
41 parseInt((0, _css.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 getDimensionValue: getDefaultDimensionValue
52};
53
54var Collapse = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
55 var onEnter = _ref.onEnter,
56 onEntering = _ref.onEntering,
57 onEntered = _ref.onEntered,
58 onExit = _ref.onExit,
59 onExiting = _ref.onExiting,
60 className = _ref.className,
61 children = _ref.children,
62 _ref$dimension = _ref.dimension,
63 dimension = _ref$dimension === void 0 ? 'height' : _ref$dimension,
64 _ref$getDimensionValu = _ref.getDimensionValue,
65 getDimensionValue = _ref$getDimensionValu === void 0 ? getDefaultDimensionValue : _ref$getDimensionValu,
66 props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["onEnter", "onEntering", "onEntered", "onExit", "onExiting", "className", "children", "dimension", "getDimensionValue"]);
67
68 /* Compute dimension */
69 var computedDimension = typeof dimension === 'function' ? dimension() : dimension;
70 /* -- Expanding -- */
71
72 var handleEnter = (0, _react.useMemo)(function () {
73 return (0, _createChainedFunction.default)(function (elem) {
74 elem.style[computedDimension] = '0';
75 }, onEnter);
76 }, [computedDimension, onEnter]);
77 var handleEntering = (0, _react.useMemo)(function () {
78 return (0, _createChainedFunction.default)(function (elem) {
79 var scroll = "scroll" + computedDimension[0].toUpperCase() + computedDimension.slice(1);
80 elem.style[computedDimension] = elem[scroll] + "px";
81 }, onEntering);
82 }, [computedDimension, onEntering]);
83 var handleEntered = (0, _react.useMemo)(function () {
84 return (0, _createChainedFunction.default)(function (elem) {
85 elem.style[computedDimension] = null;
86 }, onEntered);
87 }, [computedDimension, onEntered]);
88 /* -- Collapsing -- */
89
90 var handleExit = (0, _react.useMemo)(function () {
91 return (0, _createChainedFunction.default)(function (elem) {
92 elem.style[computedDimension] = getDimensionValue(computedDimension, elem) + "px";
93 (0, _triggerBrowserReflow.default)(elem);
94 }, onExit);
95 }, [onExit, getDimensionValue, computedDimension]);
96 var handleExiting = (0, _react.useMemo)(function () {
97 return (0, _createChainedFunction.default)(function (elem) {
98 elem.style[computedDimension] = null;
99 }, onExiting);
100 }, [computedDimension, onExiting]);
101 return /*#__PURE__*/_react.default.createElement(_Transition.default // @ts-ignore
102 , (0, _extends2.default)({
103 ref: ref,
104 addEndListener: _transitionEndListener.default
105 }, props, {
106 "aria-expanded": props.role ? props.in : null,
107 onEnter: handleEnter,
108 onEntering: handleEntering,
109 onEntered: handleEntered,
110 onExit: handleExit,
111 onExiting: handleExiting
112 }), function (state, innerProps) {
113 return /*#__PURE__*/_react.default.cloneElement(children, (0, _extends2.default)({}, innerProps, {
114 className: (0, _classnames.default)(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'width')
115 }));
116 });
117}); // @ts-ignore
118
119
120// @ts-ignore
121Collapse.defaultProps = defaultProps;
122var _default = Collapse;
123exports.default = _default;
124module.exports = exports["default"];
\No newline at end of file