import copy from '../js/data/copy.json'; import { isNotNullNorUndefined, parseDate, formatterWithYear } from '../js/utilities'; import React from 'react'; import Spinner from './presentational/Spinner'; import CardTimestamp from './presentational/CardTimestamp'; import CardLocation from './presentational/CardLocation'; import CardCaret from './presentational/CardCaret'; import CardTags from './presentational/CardTags'; import CardSummary from './presentational/CardSummary'; import CardSource from './presentational/CardSource'; import CardCategory from './presentational/CardCategory'; import CardNarrative from './presentational/CardNarrative'; class Card extends React.Component { constructor(props) { super(props); this.state = { isHighlighted: false }; } toggle() { this.setState({ isHighlighted: !this.state.isHighlighted }, () => { if (!this.state.isHighlighted) { this.props.highlight(this.props.event); } else { this.props.highlight(null); } }); } makeTimelabel(timestamp) { if (timestamp === null) return null; const parsedTimestamp = parseDate(timestamp); const timelabel = formatterWithYear(parsedTimestamp); return timelabel; } renderCategory() { const categoryTitle = copy[this.props.language].cardstack.category; const categoryLabel = this.props.event.category; const color = this.props.getCategoryColor(this.props.event.category); return ( ); } 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 source_lang = copy[this.props.language].cardstack.sources return (

{source_lang}:

{this.props.event.sources.map(source => ( ))}
) } // NB: should be internaionalized. renderTimestamp() { return ( this.makeTimelabel(timestamp)} language={this.props.language} timestamp={this.props.event.timestamp} /> ); } renderNarrative() { const links = this.props.getNarrativeLinks(this.props.event); if (links !== null) { return ( this.props.select([event])} makeTimelabel={(timestamp) => this.makeTimelabel(timestamp)} next={links.next} prev={links.prev} /> ) } } renderHeader() { return (
{this.renderTimestamp()} {this.renderLocation()}
{this.renderCategory()}
{this.renderSummary()}
); } renderContent() { if (this.state.isHighlighted) { return (
{this.renderTags()} {this.renderSources()} {this.renderNarrative()}
) } else { return
} } renderCaret() { return ( this.toggle()} isHighlighted={this.state.isHighlighted} /> ) } render() { return (
  • {this.renderHeader()} {this.renderContent()} {this.renderCaret()}
  • ); } } export default Card;