UNPKG

2.16 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
3import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
4import React, { Component } from 'react';
5import PropTypes from 'prop-types';
6import Collapse from './Collapse';
7import { omit, findDOMElements, defaultToggleEvents, addMultipleEventListeners } from './utils';
8var omitKeys = ['toggleEvents', 'defaultOpen'];
9var propTypes = {
10 defaultOpen: PropTypes.bool,
11 toggler: PropTypes.string.isRequired,
12 toggleEvents: PropTypes.arrayOf(PropTypes.string)
13};
14var defaultProps = {
15 toggleEvents: defaultToggleEvents
16};
17
18var UncontrolledCollapse =
19/*#__PURE__*/
20function (_Component) {
21 _inheritsLoose(UncontrolledCollapse, _Component);
22
23 function UncontrolledCollapse(props) {
24 var _this;
25
26 _this = _Component.call(this, props) || this;
27 _this.togglers = null;
28 _this.removeEventListeners = null;
29 _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));
30 _this.state = {
31 isOpen: props.defaultOpen || false
32 };
33 return _this;
34 }
35
36 var _proto = UncontrolledCollapse.prototype;
37
38 _proto.componentDidMount = function componentDidMount() {
39 this.togglers = findDOMElements(this.props.toggler);
40
41 if (this.togglers.length) {
42 this.removeEventListeners = addMultipleEventListeners(this.togglers, this.toggle, this.props.toggleEvents);
43 }
44 };
45
46 _proto.componentWillUnmount = function componentWillUnmount() {
47 if (this.togglers.length && this.removeEventListeners) {
48 this.removeEventListeners();
49 }
50 };
51
52 _proto.toggle = function toggle(e) {
53 this.setState(function (_ref) {
54 var isOpen = _ref.isOpen;
55 return {
56 isOpen: !isOpen
57 };
58 });
59 e.preventDefault();
60 };
61
62 _proto.render = function render() {
63 return React.createElement(Collapse, _extends({
64 isOpen: this.state.isOpen
65 }, omit(this.props, omitKeys)));
66 };
67
68 return UncontrolledCollapse;
69}(Component);
70
71UncontrolledCollapse.propTypes = propTypes;
72UncontrolledCollapse.defaultProps = defaultProps;
73export default UncontrolledCollapse;
\No newline at end of file