import React, { FunctionComponent } from 'react'; import { dateReviver } from '../helpers'; interface ExtractViewModel { extract_id: number; extracted_on: Date; download_path: string; } interface DataExtractsState { latestExtract: ExtractViewModel; previousExtracts: ExtractViewModel[]; } export default class DataExtracts extends React.Component<{}, DataExtractsState> { constructor(props) { super(props); this.state = { latestExtract: undefined, previousExtracts: undefined }; } async componentDidMount() { const res = await fetch('/api/extracts'); const data = JSON.parse(await res.text(), dateReviver); const extracts = (data.extracts as ExtractViewModel[]) .sort((a, b) => a.extracted_on.valueOf() - b.extracted_on.valueOf()) .reverse(); this.setState({ latestExtract: extracts[0], previousExtracts: extracts.slice(1) }); } render() { return (

Open data extracts

Choose one of the links below to download an archive containing the open data collected on the Colouring London platform

{ this.state.latestExtract == undefined ?

Loading extracts...

:

Latest extract

} { this.state.previousExtracts && this.state.previousExtracts.length > 0 ? (

Older extracts

    { this.state.previousExtracts.map(e =>
  • ) }
) : null }
); } } const ExtractDownloadLink: FunctionComponent = (props) => (

Extracted on {props.extracted_on.toDateString()}

);