UNPKG

react-lottie-wrapper

Version:
271 lines (229 loc) 8.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties"); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _extends2 = require("babel-runtime/helpers/extends"); var _extends3 = _interopRequireDefault(_extends2); var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _lottieWeb = require("lottie-web"); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Lottie = function (_Component) { (0, _inherits3.default)(Lottie, _Component); function Lottie() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Lottie); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Lottie.__proto__ || (0, _getPrototypeOf2.default)(Lottie)).call.apply(_ref, [this].concat(args))), _this), _this.handleClickToPause = function () { // The pause() method is for handling pausing by passing a prop isPaused // This method is for handling the ability to pause by clicking on the animation if (_this.anim.isPaused) { return _this.anim.play(); } _this.anim.pause(); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(Lottie, [{ key: "componentDidMount", value: function componentDidMount() { var _props = this.props, options = _props.options, eventListeners = _props.eventListeners; var loop = options.loop, autoplay = options.autoplay, animationData = options.animationData, rendererSettings = options.rendererSettings, segments = options.segments; this.options = (0, _extends3.default)({ container: this.el, renderer: "svg", loop: loop !== false, autoplay: autoplay !== false, segments: segments !== false, animationData: animationData, rendererSettings: rendererSettings }, options); this.anim = (0, _lottieWeb.loadAnimation)(this.options); this.registerEvents(eventListeners); } }, { key: "componentDidUpdate", value: function componentDidUpdate(nextProps) { /* Recreate the animation handle if the data is changed */ var _props2 = this.props, eventListeners = _props2.eventListeners, isStopped = _props2.isStopped, segments = _props2.segments; if (this.options.animationData !== nextProps.options.animationData) { this.deRegisterEvents(eventListeners); this.destroy(); this.options = (0, _extends3.default)({}, this.options, nextProps.options); this.anim = (0, _lottieWeb.loadAnimation)(this.options); this.registerEvents(nextProps.eventListeners); } if (isStopped) { this.stop(); } else if (segments) { this.playSegments(); } else { this.play(); } this.pause(); this.setSpeed(); this.setDirection(); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.deRegisterEvents(this.props.eventListeners); this.destroy(); this.options.animationData = null; this.anim = null; } }, { key: "setSpeed", value: function setSpeed() { this.anim.setSpeed(this.props.speed); } }, { key: "setDirection", value: function setDirection() { this.anim.setDirection(this.props.direction); } }, { key: "play", value: function play() { this.anim.play(); } }, { key: "playSegments", value: function playSegments() { this.anim.playSegments(this.props.segments); } }, { key: "stop", value: function stop() { this.anim.stop(); } }, { key: "pause", value: function pause() { if (this.props.isPaused && !this.anim.isPaused) { this.anim.pause(); } else if (!this.props.isPaused && this.anim.isPaused) { this.anim.pause(); } } }, { key: "destroy", value: function destroy() { this.anim.destroy(); } }, { key: "registerEvents", value: function registerEvents(eventListeners) { var _this2 = this; eventListeners.forEach(function (_ref2) { var eventName = _ref2.eventName, callback = _ref2.callback; _this2.anim.addEventListener(eventName, callback); }); } }, { key: "deRegisterEvents", value: function deRegisterEvents(eventListeners) { var _this3 = this; eventListeners.forEach(function (_ref3) { var eventName = _ref3.eventName, callback = _ref3.callback; _this3.anim.removeEventListener(eventName, callback); }); } }, { key: "render", value: function render() { var _this4 = this; var _props3 = this.props, renderAs = _props3.renderAs, width = _props3.width, height = _props3.height, ariaLabel = _props3.ariaLabel, isClickToPauseDisabled = _props3.isClickToPauseDisabled, style = _props3.style, isStopped = _props3.isStopped, isPaused = _props3.isPaused, eventListeners = _props3.eventListeners, options = _props3.options, extraProps = (0, _objectWithoutProperties3.default)(_props3, ["renderAs", "width", "height", "ariaLabel", "isClickToPauseDisabled", "style", "isStopped", "isPaused", "eventListeners", "options"]); var lottieStyles = (0, _extends3.default)({ width: (0, _utils.getSize)(width), height: (0, _utils.getSize)(height), outline: "none" }, style); var onClickHandler = isClickToPauseDisabled ? function () { return null; } : this.handleClickToPause; var Element = renderAs; return _react2.default.createElement(Element, (0, _extends3.default)({ ref: function ref(c) { _this4.el = c; }, style: lottieStyles, onClick: onClickHandler, "aria-label": ariaLabel }, extraProps)); } }]); return Lottie; }(_react.Component); Lottie.propTypes = { options: _propTypes2.default.object.isRequired, eventListeners: _propTypes2.default.arrayOf(_propTypes2.default.object), height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), renderAs: _propTypes2.default.oneOf(["div", "span"]), isStopped: _propTypes2.default.bool, isPaused: _propTypes2.default.bool, speed: _propTypes2.default.number, segments: _propTypes2.default.arrayOf(_propTypes2.default.number), direction: _propTypes2.default.number, role: _propTypes2.default.string, ariaLabel: _propTypes2.default.string, isClickToPauseDisabled: _propTypes2.default.bool, title: _propTypes2.default.string, style: _propTypes2.default.object, className: _propTypes2.default.string, tabIndex: _propTypes2.default.number }; Lottie.defaultProps = { renderAs: "div", eventListeners: [], isStopped: false, isPaused: false, speed: 1, role: null, ariaLabel: "animation", isClickToPauseDisabled: false, title: null, className: null, tabIndex: 0 }; exports.default = Lottie;