Add videos to be played across all pages. #1523

Closed
dan1d wants to merge 13 commits from video-overlay-new into master
4 changed files with 60 additions and 17 deletions
Showing only changes of commit 7d2617e9dc - Show all commits

View file

@ -1,14 +1,21 @@
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { selectPlayingUri } from 'redux/selectors/content'; import { selectPlayingUri } from 'redux/selectors/content';
import { doSetPlayingUri } from 'redux/actions/content'; import { doSetPlayingUri, doPlayUri } from 'redux/actions/content';
import { doNavigate } from 'redux/actions/navigation';
import { doPlay, doPause } from 'redux/actions/media';
import { selectMediaPaused } from 'redux/selectors/media';
import VideoOverlay from './view'; import VideoOverlay from './view';
const select = state => ({ const select = state => ({
playingUri: selectPlayingUri(state), playingUri: selectPlayingUri(state),
mediaPaused: selectMediaPaused(state),
}); });
const perform = dispatch => ({ const perform = dispatch => ({
navigate: (path, params) => dispatch(doNavigate(path, params)),
cancelPlay: () => dispatch(doSetPlayingUri(null)), cancelPlay: () => dispatch(doSetPlayingUri(null)),
play: uri => dispatch(doPlayUri(uri)),
doPause: () => dispatch(doPause()),
}); });
export default connect(select, perform)(VideoOverlay); export default connect(select, perform)(VideoOverlay);

View file

@ -2,25 +2,45 @@
import React from 'react'; import React from 'react';
import Video from 'component/video'; import Video from 'component/video';
import Overlay from 'component/overlay'; import Overlay from 'component/overlay';
import VideoOverlayHeader from '../videoOverlayHeader'; import VideoOverlayHeader from 'component/videoOverlayHeader';
import Button from 'component/button';
import * as icons from 'constants/icons';
type Props = { type Props = {
play: () => void,
cancelPlay: () => void, cancelPlay: () => void,
navigate: (string, ?{}) => void,
playingUri: ?string, playingUri: ?string,
play: (string) => void,
doPause: () => void,
mediaPaused: boolean,
}; };
class VideoOverlay extends React.Component<Props> { class VideoOverlay extends React.Component<Props> {
renderPlayOrPauseButton() {
const { mediaPaused, doPause, play, playingUri } = this.props;
if (mediaPaused) {
return <Button noPadding button="secondary" icon={icons.PLAY} onClick={() => play(playingUri)} />;
} else {
return <Button noPadding button="secondary" icon={icons.PAUSE} onClick={() => doPause()} />;
}
}
render() { render() {
const { playingUri, cancelPlay } = this.props; const { playingUri, cancelPlay, navigate } = this.props;
if (!playingUri) return ''; if (!playingUri) return '';
return ( const returnToMedia = () => navigate('/show', { uri: playingUri });
<Overlay> return <Overlay>
<VideoOverlayHeader uri={playingUri} onClose={cancelPlay} /> <VideoOverlayHeader uri={playingUri} onClose={cancelPlay} />
<div className="overlayeada">
<div className="video__overlay">
<Video className="content__embedded" uri={playingUri} overlayed hiddenControls /> <Video className="content__embedded" uri={playingUri} overlayed hiddenControls />
<div className="video__mask">
{this.renderPlayOrPauseButton()}
<Button noPadding button="secondary" icon={icons.MAXIMIZE} onClick={() => returnToMedia()}/>
</div> </div>
</Overlay> </div>
); </Overlay>;
} }
} }

View file

@ -25,3 +25,6 @@ export const CHECK = 'CheckCircle';
export const HEART = 'Heart'; export const HEART = 'Heart';
export const UNLOCK = 'Unlock'; export const UNLOCK = 'Unlock';
export const CHECK_SIMPLE = 'Check'; export const CHECK_SIMPLE = 'Check';
export const PLAY = 'Play';
export const MAXIMIZE = 'Maximize2';
export const PAUSE = 'Pause';

View file

@ -9,17 +9,30 @@
z-index: 3; z-index: 3;
box-shadow: var(--box-shadow-layer); box-shadow: var(--box-shadow-layer);
&:hover { .video__overlay {
background-color: rgba(0,0,0, .6); position: relative;
.video__mask {
opacity: 0;
background-color: rgba(0,0,8, 0.7);
transition: all 0.4s ease-in-out;
width: 100%;
height: 100%;
overflow: hidden;
top: 0;
left: 0;
position: absolute;
display: flex;
flex-direction: row;
.btn {
margin: auto;
}
} }
}
.overlayeada { &:hover .video__mask {
z-index: 20; opacity: 1;
background: transparent; }
&:hover {
background-color: rgba(0,0,0, .9);
} }
} }