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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
import React, { Component } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import * as actions from '../actions'
import { Loader, Autocomplete } from '../common'
const initialState = {
citation: null,
institution_1: '',
institution_2: '',
institution_3: '',
institution_4: '',
}
class PaperAddress extends Component {
state = {
...initialState
}
componentDidMount() {
const { sha256 } = this.props.match.params
this.props.actions.getAddress(sha256)
const citation = this.getCitation(sha256)
this.setState({ citation })
}
componentDidUpdate(oldProps) {
const { sha256 } = this.props.match.params
const { address } = this.props.api
const { sha256: oldSha256 } = oldProps.match.params
const { address: oldAddress } = oldProps.api
const oldPaper = oldAddress ? oldAddress.paper : null
const paper = address ? address.paper : null
if (oldSha256 && sha256 !== oldSha256) {
console.log('update address')
this.props.actions.getAddress(sha256)
const citation = this.getCitation(sha256)
this.setState({
...initialState,
citation
})
} else if (address && !address.loading && address.paper && (!oldPaper || oldPaper !== address.paper)) {
if (paper.error) {
const citation = this.getCitation(sha256)
this.setState({
...initialState,
citation,
})
} else {
console.log(paper)
const citation = this.getCitation(sha256)
this.setState({
citation,
institution_1: paper['Institution #1'],
institution_2: paper['Institution #2'],
institution_3: paper['Institution #3'],
institution_4: paper['Institution #4'],
})
}
} else if (oldProps.api.unknownCitations !== this.props.api.unknownCitations) {
const citation = this.getCitation(sha256)
this.setState({ citation })
}
}
getCitation(sha256) {
const { paperInfo, unknownCitations } = this.props.api
let citation = (unknownCitations.citations || []).find(f => f.id === sha256)
if (!citation) {
citation = (paperInfo.citations || []).find(f => f.id === sha256)
}
console.log(sha256, citation)
return citation
}
render() {
// if (!this.props.match.params.key) return null
// if (this.props.api.address.loading) return <Loader />
// if (!this.props.api.paperInfo.dataset) return <div className='paperInfo'>Metadata not found</div>
let { paperInfo, unknownCitations } = this.props.api
if (paperInfo.loading || unknownCitations.loading) return <Loader />
console.log(this.state)
const { citation } = this.state
if (!citation) {
return <div>Citation not found in this paper</div>
}
return (
<div className='form'>
<h3>{citation.title}</h3>
<div className='gray'>{citation.id}</div>
{this.state.institution_1}
{/*
<iframe className='pdfViewer' src={citation.pdf} />
*/}
</div>
)
}
}
const mapStateToProps = state => ({
api: state.api,
})
const mapDispatchToProps = dispatch => ({
actions: bindActionCreators({ ...actions }, dispatch),
})
export default connect(mapStateToProps, mapDispatchToProps)(PaperAddress)
|