summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/viewer/checklist/credits.components.js
blob: de24639aa9483af1796feaa0b93a0aab3da41e09 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import React from 'react'
import { connect } from 'react-redux'
import { Arrow } from '../nav/viewer.icons'
import { parseCredits, groupColumns } from 'app/utils/viewer.utils'

const VenuesList = ({ venues }) => {
  const [ open, setOpen ] = React.useState(-1)
  return (
    <div className='site-credits'>
      <div className='credits-title'>
        Previous venues
      </div>
      {venues.order.map(id => (
        <CreditsVenue
          key={id}
          venue={venues.lookup[id]}
          open={open}
          setOpen={setOpen}
        />
      ))}
    </div>
  )
}

const mapStateToProps = state => ({
  episodes: state.episode.index,
  venues: state.venue.index,
})

export const Venues = connect(mapStateToProps)(VenuesList)

export const CreditsColumns = ({ lines }) => {
  const creditSections = parseCredits(lines)
  return (
    <div className='credits'>
      {creditSections.map(section => (
        <div key={section.i}>
          <div className='credits-title'>
            {section.title}
          </div>
          <div className='credits-info'>
            {section.lines.map((line, j) => (
              <div
                key={j}
                dangerouslySetInnerHTML={{ __html: line || " " }}
              />
            ))}
          </div>
        </div>
      ))}
    </div>
  )
}

const CreditsVenue = ({ venue, open, setOpen }) => {
  // const [ open, setOpen ] = React.useState(-1)
  const isOpen = open === venue.id
  const artistGroups = groupColumns(venue.settings.artists.trim().split('\n'), 4)
  const creditSections = parseCredits(venue.settings.credits)
  return (
    <div className={isOpen ? 'venue open' : 'venue'}>
      <div className='venue-header' onClick={() => setOpen(isOpen ? -1 : venue.id)}>
        <div>
          {venue.title}<br />
          {venue.date}
        </div>
        <Arrow type={isOpen ? 'up' : 'down'} />
      </div>
      {isOpen && (
        <div className='venue-info'>
          <div className='credits-title'>
            Artists
          </div>
          <div className="credits">
            {artistGroups.map((group, i) => (
              <div className='credits-info' key={i}>
                {group.map((line, j) => (
                  <div key={j}>{line}</div>
                ))}
              </div>
            ))}
          </div>
          {creditSections.map(section => (
            <div key={section.i}>
              <div className='credits-title'>
                {section.title}
              </div>
              <div className='credits-info-wide'>
                {section.lines.map((line, j) => (
                  <div
                    key={j}
                    dangerouslySetInnerHTML={{ __html: line || " " }}
                  />
                ))}
              </div>
            </div>
          ))}
        </div>
      )}
    </div>
  )
}