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) => )