react-jplayer
Version:
Html5 audio and video player library for React
59 lines (47 loc) • 1.77 kB
JSX
import { connectWithId, convertTime } from 'react-jplayer-utils';
import { compose, lifecycle as setLifecycle, withHandlers, renderNothing } from 'recompose';
import { setOption } from '../../../actions/actions';
const mapStateToProps = ({ jPlayers }, { id }) => ({
timeFormats: jPlayers[id].timeFormats,
currentTime: jPlayers[id].currentTime,
duration: jPlayers[id].duration,
showRemainingDuration: jPlayers[id].showRemainingDuration,
});
const handlers = {
setDurationText: props => () => {
let durationText = '';
if (props.showRemainingDuration) {
const timeRemaining = props.duration - props.currentTime;
durationText = (timeRemaining > 0 ? '-' : '') +
convertTime(timeRemaining, props.timeFormats);
} else {
durationText = convertTime(props.duration, props.timeFormats);
}
props.setOption(props.id, 'durationText', durationText);
},
setCurrentTimeText: props => () => {
const currentTimeText = convertTime(props.currentTime, props.timeFormats);
props.setOption(props.id, 'currentTimeText', currentTimeText);
},
};
const lifecycle = {
componentDidUpdate(prevProps) {
if (prevProps.timeFormats !== this.props.timeFormats ||
prevProps.currentTime !== this.props.currentTime) {
this.props.setCurrentTimeText();
}
if (prevProps.timeFormats !== this.props.timeFormats ||
prevProps.currentTime !== this.props.currentTime ||
prevProps.duration !== this.props.duration ||
prevProps.showRemainingDuration !== this.props.showRemainingDuration) {
this.props.setDurationText();
}
},
};
export default compose(
connectWithId(mapStateToProps, {
setOption,
}),
withHandlers(handlers),
setLifecycle(lifecycle),
)(renderNothing(null));