summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/viewer/nav/nav.parent.js
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)