import React, { Component } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import * as actions from '../actions'
import { history } from '../store'
import { Loader, Autocomplete } from '../common'
const initialState = {
citation: null,
institution_1: '',
institution_2: '',
institution_3: '',
institution_4: '',
institution_1_vetting: '',
institution_2_vetting: '',
institution_3_vetting: '',
institution_4_vetting: '',
notes: '',
pdf_index: 0,
}
class PaperAddress extends Component {
state = {
...initialState
}
componentDidMount() {
const { sha256 } = this.props.match.params
this.props.actions.getAddress(sha256)
const citationState = this.getCitationState(sha256)
console.log('DID MOUNT')
this.setState(citationState)
}
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 citationState = this.getCitationState(sha256)
this.setState({
...initialState,
...citationState,
})
} else if (address && !address.loading && address.paper && (!oldPaper || oldPaper !== address.paper)) {
if (paper.error) {
console.log('USING PAPER ADDRESS')
const citationState = this.getCitationState(sha256)
this.setState({
...initialState,
...citationState,
})
} else {
// console.log(paper)
console.log('GOT CUSTOM ADDRESS')
const citationState = this.getCitationState(sha256)
this.setState({
...citationState,
institution_1: paper.institution_1,
institution_2: paper.institution_2,
institution_3: paper.institution_3,
institution_4: paper.institution_4,
institution_1_vetting: paper.institution_1_vetting,
institution_2_vetting: paper.institution_2_vetting,
institution_3_vetting: paper.institution_3_vetting,
institution_4_vetting: paper.institution_4_vetting,
})
}
} else if (oldProps.api.unknownCitations !== this.props.api.unknownCitations) {
const citationState = this.getCitationState(sha256)
this.setState(citationState)
}
}
getCitationState(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)
let state = { citation }
let addresses = citation ? citation.addresses : []
if (addresses) {
addresses.forEach((address, i) => {
state['institution_' + (i + 1)] = address.address
})
}
return state
}
save() {
console.log(this.state)
this.props.actions.postAddress({
paper_id: this.state.citation.id,
title: this.state.citation.title,
institution_1: this.state.institution_1,
institution_2: this.state.institution_2,
institution_3: this.state.institution_3,
institution_4: this.state.institution_4,
institution_1_vetting: this.state.institution_1_vetting,
institution_2_vetting: this.state.institution_2_vetting,
institution_3_vetting: this.state.institution_3_vetting,
institution_4_vetting: this.state.institution_4_vetting,
notes: this.state.notes,
})
this.next(false)
}
next() {
const { key } = this.props.api.paperInfo.dataset
const { unknownCitations } = this.props.api
let citationIndex = (unknownCitations.citations || [])
.findIndex(f => f.id === this.state.citation.id)
if (citationIndex === -1) {
history.push('/paper/' + key + '/info/')
} else {
citationIndex += 1
if (citationIndex >= unknownCitations.length) {
history.push('/paper/' + key + '/info/')
} else {
let nextId = unknownCitations.citations[citationIndex].id
history.push('/paper/' + key + '/address/' + nextId)
}
}
}
render() {
let { institutions, paperInfo, unknownCitations } = this.props.api
if (institutions.loading || paperInfo.loading || unknownCitations.loading) return