summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-07-28 00:20:51 +0200
committerJules Laplace <julescarbon@gmail.com>2020-07-28 00:20:51 +0200
commitf6bc505597463cc8f593e00d74b421175a69f7f3 (patch)
tree8e55d423573fcadc0e51f86b67b825c4c619f90e /animism-align/frontend/app/views/viewer/player/player.fullscreen.js
parent443f0a465c720c9e70a124671872c74bc7e9bbd4 (diff)
some fullscreen elements fading in...
Diffstat (limited to 'animism-align/frontend/app/views/viewer/player/player.fullscreen.js')
-rw-r--r--animism-align/frontend/app/views/viewer/player/player.fullscreen.js65
1 files changed, 63 insertions, 2 deletions
diff --git a/animism-align/frontend/app/views/viewer/player/player.fullscreen.js b/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
index 89052ed..47c6cd2 100644
--- a/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
+++ b/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
@@ -1,22 +1,83 @@
import React, { Component } from 'react'
import { connect } from 'react-redux'
+import { TransitionGroup, CSSTransition } from 'react-transition-group'
import actions from 'app/actions'
+import { floatInRange, floatLT } from 'app/utils'
+
+import { fullscreenComponents } from './components.fullscreen'
class PlayerFullscreen extends Component {
+ state = {
+ elements: [],
+ }
+
componentDidMount() {
+ this.setCurrentElements()
+ }
+
+ componentDidUpdate(prevProps) {
+ if (this.props.audio.play_ts === prevProps.audio.play_ts) return
+ this.setCurrentElements()
}
-
+
+ setCurrentElements() {
+ const { audio, timeline } = this.props
+ const { play_ts } = audio
+ const elements = timeline.filter(element => (
+ floatInRange(element.start_ts, play_ts, element.fade_out_start_ts + 0.1)
+ ))
+ this.setState({ elements })
+ }
+
render() {
- const { } = this.props
+ const { audio, media } = this.props
+ const { play_ts } = audio
+ const { elements } = this.state
+ // console.log(elements, play_ts)
return (
<div className="viewer-fullscreen">
+ <TransitionGroup>
+ {elements.map(element => {
+ if (!(element.type in fullscreenComponents)) {
+ return null
+ }
+ const isEntering = floatInRange(element.start_ts, play_ts, element.fade_in_end_ts)
+ const FullscreenComponent = fullscreenComponents[element.type]
+ const transitionDuration = (isEntering ? (1000 * element.fadeInDuration) : (1000 * element.fadeOutDuration)) + 'ms'
+ return (
+ <CSSTransition
+ key={element.index}
+ classNames="fade"
+ timeout={{
+ enter: element.fadeInDuration * 1000,
+ exit: element.fadeOutDuration * 1000,
+ }}
+ component={FirstChild}
+ >
+ <FullscreenComponent
+ element={element}
+ media={media}
+ transitionDuration={transitionDuration}
+ />
+ </CSSTransition>
+ )
+ })}
+ </TransitionGroup>
</div>
)
}
}
+const FirstChild = (props) => {
+ const childrenArray = React.Children.toArray(props.children);
+ return childrenArray[0] || null;
+}
+
const mapStateToProps = state => ({
+ audio: state.audio,
+ media: state.media.index,
+ timeline: state.viewer.fullscreenTimeline,
})
export default connect(mapStateToProps)(PlayerFullscreen)