import copy from '../js/data/copy.json'
import {
parseDate,
formatterWithYear
} from '../js/utilities'
import React from 'react'
import CardTimestamp from './presentational/Card/Timestamp'
import CardLocation from './presentational/Card/Location'
import CardCaret from './presentational/Card/Caret'
import CardTags from './presentational/Card/Tags'
import CardSummary from './presentational/Card/Summary'
import CardSource from './presentational/Card/Source'
import CardNarrative from './presentational/Card/Narrative'
class Card extends React.Component {
constructor (props) {
super(props)
this.state = {
isOpen: false
}
}
toggle () {
this.setState({
isOpen: !this.state.isOpen
})
}
makeTimelabel (timestamp) {
if (timestamp === null) return null
const parsedTimestamp = parseDate(timestamp)
const timelabel = formatterWithYear(parsedTimestamp)
return timelabel
}
renderSummary () {
return (
)
}
renderTags () {
if (!this.props.tags || (this.props.tags && this.props.tags.length === 0)) {
return null
}
return (
)
}
renderLocation () {
return (
)
}
renderSources () {
if (this.props.sourceError) {
return
ERROR: something went wrong loading sources, TODO:
}
const sourceLang = copy[this.props.language].cardstack.sources
return (
{sourceLang}:
{this.props.event.sources.map(source => (
this.props.onViewSource(source)}
/>
))}
)
}
// NB: should be internaionalized.
renderTimestamp () {
let timelabel = this.makeTimelabel(this.props.event.timestamp)
let precision = this.props.event.time_display
if (precision === '_date_only') {
precision = ''
timelabel = timelabel.substring(0, 11)
} else if (precision === '_approximate_date_only') {
precision = ' (Approximate date)'
timelabel = timelabel.substring(0, 11)
} else if (precision === '_approximate_datetime') {
precision = ' (Approximate datetime)'
} else {
timelabel = timelabel.substring(0, 11)
}
return (
)
}
renderNarrative () {
const links = this.props.getNarrativeLinks(this.props.event)
if (links !== null) {
return (
this.props.onSelect([event])}
makeTimelabel={(timestamp) => this.makeTimelabel(timestamp)}
next={links.next}
prev={links.prev}
/>
)
}
}
renderMain () {
return (
{this.renderTimestamp()}
{this.renderLocation()}
{this.renderSummary()}
)
}
renderExtra () {
return (
{this.renderTags()}
{this.renderSources()}
{this.renderNarrative()}
)
}
renderCaret () {
return (
this.toggle()}
isOpen={this.state.isOpen}
/>
)
}
render () {
const { isSelected, idx } = this.props
return (
{this.renderMain()}
{this.state.isOpen ? this.renderExtra() : null}
{isSelected ? this.renderCaret() : null}
)
}
}
// The ref to each card will be used in CardStack for programmatic scrolling
export default React.forwardRef((props, ref) => )