gab-social/app/javascript/gabsocial/components/extended_video_player.js

65 lines
1.5 KiB
JavaScript
Raw Normal View History

import React from 'react'
import PropTypes from 'prop-types'
export default class ExtendedVideoPlayer extends React.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,
2020-05-02 07:25:55 +01:00
}
handleLoadedData = () => {
if (this.props.time) {
2020-05-02 07:25:55 +01:00
this.video.currentTime = this.props.time
}
}
componentDidMount () {
2020-05-02 07:25:55 +01:00
this.video.addEventListener('loadeddata', this.handleLoadedData)
}
componentWillUnmount () {
2020-05-02 07:25:55 +01:00
this.video.removeEventListener('loadeddata', this.handleLoadedData)
}
setRef = (c) => {
2020-05-02 07:25:55 +01:00
this.video = c
}
handleClick = e => {
2020-05-02 07:25:55 +01:00
e.stopPropagation()
const handler = this.props.onClick
if (handler) handler()
}
render () {
2020-05-02 07:25:55 +01:00
const { src, muted, controls, alt } = this.props
2020-04-11 23:29:19 +01:00
return (
2020-05-02 07:25:55 +01:00
<div className={[_s.default, _s.width100PC, _s.height100PC, _s.alignItemsCenter, _s.justifyContentCenter].join(' ')}>
<video
2020-05-02 07:25:55 +01:00
className={[_s.default, _s.maxWidth100PC, _s.heightMax100PC].join(' ')}
playsInline
ref={this.setRef}
src={src}
role='button'
tabIndex='0'
aria-label={alt}
title={alt}
muted={muted}
controls={controls}
loop={!controls}
onClick={this.handleClick}
/>
</div>
2020-05-02 07:25:55 +01:00
)
}
}