import React from 'react'; import { connect } from 'react-redux'; import * as selectors from '../selectors'; import hash from 'object-hash'; import copy from '../js/data/copy.json'; import { formatterWithYear, isNotNullNorUndefined } from '../js/utilities'; import TimelineHeader from './presentational/TimelineHeader'; import TimelineHandles from './TimelineHandles.jsx'; import TimelineZoomControls from './TimelineZoomControls.jsx'; import TimelineLogic from '../js/timeline/timeline.js'; import TimelineLabels from './TimelineLabels.jsx'; import TimelineMarkers from './TimelineMarkers.jsx' class Timeline extends React.Component { constructor(props) { super(props); this.svgRef = React.createRef() this.state = { isFolded: false, dims: { height: 140, width: 0, width_controls: 100, height_controls: 115, margin_left: 120 } }; } componentDidMount() { this.timeline = new TimelineLogic(this.svgRef.current, this.props.app, this.props.ui, this.props.methods); this.timeline.update(this.props.domain, this.props.app); this.computeDims(); window.addEventListener('resize', () => { this.computeDims(); }); } componentWillReceiveProps(nextProps) { if (hash(nextProps) !== hash(this.props)) { this.timeline.update(nextProps.domain, nextProps.app); } } onClickArrow() { this.setState((prevState, props) => { return {isFolded: !prevState.isFolded}; }); } computeDims() { if (document.querySelector(`#${this.props.ui.dom.timeline}`) !== null) { const boundingClient = document.querySelector(`#${this.props.ui.dom.timeline}`).getBoundingClientRect(); const WIDTH = boundingClient.width; this.setState({ dims: Object.assign({}, this.state.dims, { width: WIDTH }) }); } } onMoveTime(dir) { if (this.timeline) { return this.timeline.moveTime(dir); } return ''; } onApplyZoom(zoom) { if (this.timeline) { return this.timeline.applyZoom(zoom); } return ''; } renderSVG() { const dims = this.state.dims; return ( ); } render() { const { isNarrative, app, ui } = this.props let classes = `timeline-wrapper ${(this.state.isFolded) ? ' folded' : ''}`; classes += (app.narrative !== null) ? ' narrative-mode' : ''; return (