import copy from '../common/data/copy.json' import React from 'react' import CardCustomField from './presentational/Card/CustomField' import CardTime from './presentational/Card/Time' import CardLocation from './presentational/Card/Location' import CardCaret from './presentational/Card/Caret' import CardFilters from './presentational/Card/Filters' import CardSummary from './presentational/Card/Summary' import CardSource from './presentational/Card/Source' import CardNarrative from './presentational/Card/Narrative' import { makeNiceDate } from '../common/utilities' class Card extends React.Component { constructor (props) { super(props) this.state = { isOpen: false } } toggle () { this.setState({ isOpen: !this.state.isOpen }) } makeTimelabel (datetime) { return makeNiceDate(datetime) } renderSummary () { return ( ) } renderFilters () { if (!this.props.filters || (this.props.filters && this.props.filters.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. renderTime () { let timelabel = this.makeTimelabel(this.props.event.datetime) // 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} /> ) } } renderCustomFields () { return this.props.features.CUSTOM_EVENT_FIELDS .map(field => { const value = this.props.event[field.key] return value ? ( ) : null }) } renderMain () { return (
{this.renderTime()} {this.renderLocation()}
{this.renderSummary()} {this.renderCustomFields()}
) } renderExtra () { return (
{this.renderFilters()} {this.renderSources()} {this.renderNarrative()}
) } renderCaret () { return this.props.features.USE_SOURCES ? ( this.toggle()} isOpen={this.state.isOpen} /> ) : null } 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) => )