UNPKG

react-h5-audio-player

Version:

A customizable React audio player. Written in TypeScript. Mobile compatible. Keyboard friendly

92 lines (71 loc) 3.35 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _utils = require("./utils"); var CurrentTime = function (_PureComponent) { (0, _inheritsLoose2.default)(CurrentTime, _PureComponent); function CurrentTime(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "audio", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasAddedAudioEventListener", false); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", { currentTime: _this.props.defaultCurrentTime }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleAudioCurrentTimeChange", function (e) { var audio = e.target; var _this$props = _this.props, isLeftTime = _this$props.isLeftTime, timeFormat = _this$props.timeFormat, defaultCurrentTime = _this$props.defaultCurrentTime; _this.setState({ currentTime: (0, _utils.getDisplayTimeBySeconds)(isLeftTime ? audio.duration - audio.currentTime : audio.currentTime, audio.duration, timeFormat) || defaultCurrentTime }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addAudioEventListeners", function () { var audio = _this.props.audio; if (audio && !_this.hasAddedAudioEventListener) { _this.audio = audio; _this.hasAddedAudioEventListener = true; audio.addEventListener('timeupdate', _this.handleAudioCurrentTimeChange); audio.addEventListener('loadedmetadata', _this.handleAudioCurrentTimeChange); } }); var _audio = props.audio, _defaultCurrentTime = props.defaultCurrentTime, _isLeftTime = props.isLeftTime, _timeFormat = props.timeFormat; var currentTime = _defaultCurrentTime; if (_audio) { currentTime = (0, _utils.getDisplayTimeBySeconds)(_isLeftTime ? _audio.duration - _audio.currentTime : _audio.currentTime, _audio.duration, _timeFormat); } _this.state = { currentTime: currentTime }; return _this; } var _proto = CurrentTime.prototype; _proto.componentDidMount = function componentDidMount() { this.addAudioEventListeners(); }; _proto.componentDidUpdate = function componentDidUpdate() { this.addAudioEventListeners(); }; _proto.componentWillUnmount = function componentWillUnmount() { if (this.audio && this.hasAddedAudioEventListener) { this.audio.removeEventListener('timeupdate', this.handleAudioCurrentTimeChange); this.audio.removeEventListener('loadedmetadata', this.handleAudioCurrentTimeChange); } }; _proto.render = function render() { return this.state.currentTime; }; return CurrentTime; }(_react.PureComponent); var _default = CurrentTime; exports.default = _default;