blob: e242e8a0e5da7002bdc771014134fa3a13065e01 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import React, { Component } from 'react'
import { connect } from 'react-redux'
import actions from 'app/actions'
import { ROMAN_NUMERALS } from 'app/constants'
import { Arrow } from './viewer.icons'
import NavPlayer from './nav.player'
import { thumbnailURL } from 'app/utils/annotation.utils'
class NavParent extends Component {
state = {
hovering: false,
suppressHover: false,
}
constructor(props){
super(props)
this.handleMouseLeave = this.handleMouseLeave.bind(this)
this.handleMouseEnter = this.handleMouseEnter.bind(this)
}
handleMouseEnter(){
if (this.state.suppressHover) return
this.setState({ hovering: true })
}
handleMouseLeave(){
this.setState({ hovering: false, suppressHover: false })
}
render() {
const { viewer } = this.props
return (
<div className={"viewer-nav " + viewer.navStyle + " " + (this.state.hovering ? 'hovering-next': '')} onMouseLeave={this.handleMouseLeave}>
<div className='nav-row main-nav'>
<div className='nav-section-name'>
<span className="section-link link" onClick={() => actions.viewer.toggleComponent('nav')}>
<Arrow type={viewer.nav ? 'down' : 'up'} />
{viewer.currentSection &&
<span>
{ROMAN_NUMERALS[viewer.currentSection.index]}
{'. '}
{viewer.currentSection.title}
</span>
}
</span>
</div>
<NavPlayer />
<div className='nav-next' onMouseEnter={this.handleMouseEnter}>
{viewer.nextSection &&
<span className="next-link link" onClick={() => actions.viewer.seekToSection(viewer.nextSection)}>
Next
<Arrow type={'right'} />
</span>
}
</div>
</div>
{viewer.nextSection &&
<div className="next-section-thumbnail"
onClick={() => {
actions.viewer.seekToSection(viewer.nextSection)
this.setState({ hovering: false, suppressHover: true })
}}
style={{
backgroundImage: viewer.nextSection.media.length && 'url(' + thumbnailURL(viewer.nextSection.media[0].media) + ')',
}}/>
}
</div>
)
}
}
const mapStateToProps = state => ({
viewer: state.viewer,
})
export default connect(mapStateToProps)(NavParent)
|