import React, { ReactEventHandler } from 'react'; import { connect } from 'react-redux'; import { IReduxState } from '../../../../app/types'; import AbstractVideoTrack, { IProps as AbstractVideoTrackProps } from '../AbstractVideoTrack'; import Video from './Video'; /** * The type of the React {@code Component} props of {@link VideoTrack}. */ interface IProps extends AbstractVideoTrackProps { /** * * Used to determine the value of the autoplay attribute of the underlying * video element. */ _noAutoPlayVideo: boolean; /** * CSS classes to add to the video element. */ className: string; /** * A map of the event handlers for the video HTML element. */ eventHandlers?: { /** * OnAbort event handler. */ onAbort?: ReactEventHandler; /** * OnCanPlay event handler. */ onCanPlay?: ReactEventHandler; /** * OnCanPlayThrough event handler. */ onCanPlayThrough?: ReactEventHandler; /** * OnEmptied event handler. */ onEmptied?: ReactEventHandler; /** * OnEnded event handler. */ onEnded?: ReactEventHandler; /** * OnError event handler. */ onError?: ReactEventHandler; /** * OnLoadStart event handler. */ onLoadStart?: ReactEventHandler; /** * OnLoadedData event handler. */ onLoadedData?: ReactEventHandler; /** * OnLoadedMetadata event handler. */ onLoadedMetadata?: ReactEventHandler; /** * OnPause event handler. */ onPause?: ReactEventHandler; /** * OnPlay event handler. */ onPlay?: ReactEventHandler; /** * OnPlaying event handler. */ onPlaying?: ReactEventHandler; /** * OnRateChange event handler. */ onRateChange?: ReactEventHandler; /** * OnStalled event handler. */ onStalled?: ReactEventHandler; /** * OnSuspend event handler. */ onSuspend?: ReactEventHandler; /** * OnWaiting event handler. */ onWaiting?: ReactEventHandler; }; /** * The value of the id attribute of the video. Used by the torture tests * to locate video elements. */ id: string; /** * The value of the muted attribute for the underlying element. */ muted?: boolean; /** * A styles that will be applied on the video element. */ style: Object; } /** * Component that renders a video element for a passed in video track and * notifies the store when the video has started playing. * * @augments AbstractVideoTrack */ class VideoTrack extends AbstractVideoTrack { /** * Default values for {@code VideoTrack} component's properties. * * @static */ static defaultProps = { className: '', id: '' }; /** * Renders the video element. * * @override * @returns {ReactElement} */ override render() { const { _noAutoPlayVideo, className, id, muted, videoTrack, style, eventHandlers } = this.props; return (