UNPKG

react-jplayer

Version:

Html5 audio and video player library for React

66 lines (60 loc) 1.77 kB
import screenfull from 'screenfull'; import { connectWithId } from 'react-jplayer-utils'; import { compose, lifecycle, withHandlers, renderNothing } from 'recompose'; import { setOption } from '../../../actions/actions'; const mapStateToProps = ({ jPlayers }, { id }) => ({ fullScreen: jPlayers[id].fullScreen, }); const handlers = { closeFullScreenListener: props => () => { if (!screenfull.isFullscreen && props.fullScreen) { props.setOption(props.id, 'fullScreen', false); } }, }; const lifecycleFunctions = { requestFullScreen() { if (this.props.fullScreen) { if (screenfull.enabled) { screenfull.request(this.props.jPlayer); } // Legacy browsers don't implement full screen api // Safari 5.1 doesn't hide the other elements even with fullscreen api document.body.style.visibility = 'hidden'; } }, exitFullScreen() { if (!this.props.fullScreen) { if (screenfull.enabled) { screenfull.exit(); } document.body.style.visibility = 'visible'; } }, componentDidMount() { if (screenfull.enabled) { document.addEventListener(screenfull.raw.fullscreenchange, this.props.closeFullScreenListener); } this.requestFullScreen(); }, componentDidUpdate(prevProps) { this.requestFullScreen(); if (prevProps.fullScreen !== this.props.fullScreen) { this.exitFullScreen(); } }, componentWillUnmount() { if (screenfull.enabled) { document.removeEventListener(screenfull.raw.fullscreenchange, this.props.closeFullScreenListener); } }, }; export default compose( connectWithId(mapStateToProps, { setOption, }), withHandlers(handlers), lifecycle(lifecycleFunctions), )(renderNothing(null));