summaryrefslogtreecommitdiff
path: root/client/table/file.table.js
blob: a7e25bbf22a1b59162eb14a2daf1707f1d704fd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import React, { Component } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import { toArray, toTuples } from '../util'

import { Loader } from '../common'

import csv from 'parse-csv'

class FileTable extends Component {
  state = {
    data: []
  }
  
  componentDidMount() {
    fetch(payload.url, { mode: 'cors' })
      .then(r => r.text())
      .then(text => {
        try {
          const data = csv.toJSON(text, { headers: { included: true } })
          this.setState({ data })
        } catch (e) {
          console.error("error making json:", payload.url)
          console.error(e)
        }
      })
  }

  getColumns(payload) {
    let { cmd, url, fields } = payload
    return ((fields && fields.length) ? fields[0] : '').split(', ').map(field => {
      switch (field) {
        default:
          return { title: field, field: field.toLowerCase(), sorter: 'string' }
      }
    })
  }

  render() {
    const { payload } = this.props
    const { paper, citations } = payload.data
    const columns = getColumns(payload)
    if (!this.state.data.length) {
      return <Loader />
    }
    return (
      <ReactTabulator
        columns={citationsColumns}
        data={this.state.data}
        options={{
          height: 311,
          layout: 'fitColumns',
          placeholder: 'No Data Set',
        }}
      />
    )
  }
}
export default FileTable