UNPKG

4.15 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inheritsLoose"));
13
14var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
15
16var _classnames = _interopRequireDefault(require("classnames"));
17
18var _react = _interopRequireDefault(require("react"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _reactDom = _interopRequireDefault(require("react-dom"));
23
24var _transition = _interopRequireDefault(require("dom-helpers/transition"));
25
26var propTypes = {
27 direction: _propTypes.default.oneOf(['prev', 'next']),
28 onAnimateOutEnd: _propTypes.default.func,
29 active: _propTypes.default.bool,
30 animateIn: _propTypes.default.bool,
31 animateOut: _propTypes.default.bool,
32 index: _propTypes.default.number
33};
34var defaultProps = {
35 active: false,
36 animateIn: false,
37 animateOut: false
38};
39
40var CarouselItem =
41/*#__PURE__*/
42function (_React$Component) {
43 (0, _inheritsLoose2.default)(CarouselItem, _React$Component);
44
45 function CarouselItem(props, context) {
46 var _this;
47
48 _this = _React$Component.call(this, props, context) || this;
49 _this.handleAnimateOutEnd = _this.handleAnimateOutEnd.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
50 _this.state = {
51 direction: null
52 };
53 _this.isUnmounted = false;
54 return _this;
55 }
56
57 var _proto = CarouselItem.prototype;
58
59 _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
60 if (this.props.active !== nextProps.active) {
61 this.setState({
62 direction: null
63 });
64 }
65 };
66
67 _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
68 var _this2 = this;
69
70 var active = this.props.active;
71 var prevActive = prevProps.active;
72
73 if (!active && prevActive) {
74 _transition.default.end(_reactDom.default.findDOMNode(this), this.handleAnimateOutEnd);
75 }
76
77 if (active !== prevActive) {
78 setTimeout(function () {
79 return _this2.startAnimation();
80 }, 20);
81 }
82 };
83
84 _proto.componentWillUnmount = function componentWillUnmount() {
85 this.isUnmounted = true;
86 };
87
88 _proto.handleAnimateOutEnd = function handleAnimateOutEnd() {
89 if (this.isUnmounted) {
90 return;
91 }
92
93 if (this.props.onAnimateOutEnd) {
94 this.props.onAnimateOutEnd(this.props.index);
95 }
96 };
97
98 _proto.startAnimation = function startAnimation() {
99 if (this.isUnmounted) {
100 return;
101 }
102
103 this.setState({
104 direction: this.props.direction === 'prev' ? 'right' : 'left'
105 });
106 };
107
108 _proto.render = function render() {
109 var _this$props = this.props,
110 direction = _this$props.direction,
111 active = _this$props.active,
112 animateIn = _this$props.animateIn,
113 animateOut = _this$props.animateOut,
114 className = _this$props.className,
115 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["direction", "active", "animateIn", "animateOut", "className"]);
116 delete props.onAnimateOutEnd;
117 delete props.index;
118 var classes = {
119 item: true,
120 active: active && !animateIn || animateOut
121 };
122
123 if (direction && active && animateIn) {
124 classes[direction] = true;
125 }
126
127 if (this.state.direction && (animateIn || animateOut)) {
128 classes[this.state.direction] = true;
129 }
130
131 return _react.default.createElement("div", (0, _extends2.default)({}, props, {
132 className: (0, _classnames.default)(className, classes)
133 }));
134 };
135
136 return CarouselItem;
137}(_react.default.Component);
138
139CarouselItem.propTypes = propTypes;
140CarouselItem.defaultProps = defaultProps;
141var _default = CarouselItem;
142exports.default = _default;
143module.exports = exports["default"];
\No newline at end of file