
removed unnecessary components, combined where necessary added each component to a folder, added individual css style modules optimized some component rendering flows removed functional components in favor of pure components linted and formatted all of the files
63 lines
1.3 KiB
JavaScript
63 lines
1.3 KiB
JavaScript
import './index.scss';
|
|
|
|
export default class ExtendedVideoPlayer extends PureComponent {
|
|
|
|
static propTypes = {
|
|
src: PropTypes.string.isRequired,
|
|
alt: PropTypes.string,
|
|
width: PropTypes.number,
|
|
height: PropTypes.number,
|
|
time: PropTypes.number,
|
|
controls: PropTypes.bool.isRequired,
|
|
muted: PropTypes.bool.isRequired,
|
|
onClick: PropTypes.func,
|
|
};
|
|
|
|
handleLoadedData = () => {
|
|
if (this.props.time) {
|
|
this.video.currentTime = this.props.time;
|
|
}
|
|
}
|
|
|
|
componentDidMount () {
|
|
this.video.addEventListener('loadeddata', this.handleLoadedData);
|
|
}
|
|
|
|
componentWillUnmount () {
|
|
this.video.removeEventListener('loadeddata', this.handleLoadedData);
|
|
}
|
|
|
|
setRef = (c) => {
|
|
this.video = c;
|
|
}
|
|
|
|
handleClick = e => {
|
|
e.stopPropagation();
|
|
const handler = this.props.onClick;
|
|
if (handler) handler();
|
|
}
|
|
|
|
render () {
|
|
const { src, muted, controls, alt } = this.props;
|
|
|
|
return (
|
|
<div className='extended-video-player'>
|
|
<video
|
|
ref={this.setRef}
|
|
src={src}
|
|
autoPlay
|
|
role='button'
|
|
tabIndex='0'
|
|
aria-label={alt}
|
|
title={alt}
|
|
muted={muted}
|
|
controls={controls}
|
|
loop={!controls}
|
|
onClick={this.handleClick}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
}
|