Skip to content
Snippets Groups Projects
Commit e67afb22 authored by Audrey Hamelers's avatar Audrey Hamelers
Browse files

WIP: working with journals. #190, #159, #194

parent 4c940700
No related branches found
No related tags found
2 merge requests!60Dev,!29Shared data model
Showing
with 80 additions and 21 deletions
......@@ -143,7 +143,7 @@ class PubMedSearch extends React.Component {
const indexedby = xml.match(/<IndexingSourceName(.*)<\/IndexingSourceName>/g)
console.log(indexedby) */
const date = new Date(result.sortpubdate)
const metadata = {
const citationData = {
title: result.title,
articleIds: [
{
......@@ -157,9 +157,9 @@ class PubMedSearch extends React.Component {
date,
},
],
unmatchedJournal: result.source,
nlmId: result.nlmuniqueid,
}
this.props.citationData(metadata)
this.props.citationData(citationData)
}
}
render() {
......
......@@ -281,7 +281,7 @@ const DashboardList = ({
<span>{manuscript.id}</span>
{pmid && <span>PMID: {pmid.id}</span>}
<span>
JOURNAL: {journal ? journal.journalTitle : unmatchedJournal}
JOURNAL: {journal ? journal.meta.nlmta : unmatchedJournal}
</span>
{releaseDelay && (
<span>
......
......@@ -50,6 +50,11 @@ const DashboardFragment = gql`
status
updated
formState
journal {
meta {
nlmta
}
}
meta {
title
articleIds {
......
......@@ -9,14 +9,14 @@ const Small = styled.span`
`
const Citation = props => {
const { articleIds, title, journalMeta, unmatchedJournal } = props.metadata
const { title, articleIds, unmatchedJournal } = props.metadata
return (
<p>
<HTMLString string={title} />
<Small>
<span>
<HTMLString
string={journalMeta ? journalMeta.title : unmatchedJournal}
string={props.journal ? props.journal.meta.nlmta : unmatchedJournal}
/>
</span>
{articleIds && articleIds.length > 0 && (
......
......@@ -148,7 +148,7 @@ class Created extends React.Component {
render() {
const currentUser = this.context
const { currentStep, status, error, checked } = this.state
const { id: mId, meta, files: allfiles } = this.props.manuscript
const { id: mId, meta, journal, files: allfiles } = this.props.manuscript
const { notes } = meta
const files = allfiles
? allfiles.filter(
......@@ -161,6 +161,11 @@ class Created extends React.Component {
return (
<Mutation mutation={UPDATE_MANUSCRIPT}>
{(updateManuscript, { data }) => {
const changeCitation = async meta => {
await updateManuscript({
variables: { data: { id: mId, meta } },
})
}
const updateEmbargo = async releaseDelay => {
await updateManuscript({
variables: { data: { id: mId, meta: { releaseDelay } } },
......@@ -208,7 +213,7 @@ class Created extends React.Component {
<React.Fragment>
<H2>Citation</H2>
<PubMedSearch
citationData={this.createNewManuscriptVersion}
citationData={changeCitation}
metadata={meta}
/>
</React.Fragment>
......@@ -218,7 +223,7 @@ class Created extends React.Component {
Citation selected
</H2>
<Confirm>
<Citation metadata={meta} />
<Citation journal={journal} metadata={meta} />
<Icon color="currentColor" size={5}>
check
</Icon>
......
......@@ -14,6 +14,14 @@ export const GET_MANUSCRIPT = gql`
id
status
formState
journal {
journalTitle
meta {
nlmta
pmcStatus
pubmedStatus
}
}
meta {
title
articleIds {
......
......@@ -27,6 +27,8 @@ class Journal extends EpmcBaseModel {
'meta,nlmuniqueid': { type: ['string', 'null'] },
'meta,pmcStatus': { type: 'boolean' },
'meta,pubmedStatus': { type: 'boolean' },
'meta,firstYear': { type: 'string' },
'meta,endYear': { type: 'string' },
},
}
}
......@@ -58,6 +60,20 @@ class Journal extends EpmcBaseModel {
return rowToEntity(rows[0])
}
static async getIdByNlmId(nlmId) {
const row = await runQuery(
buildQuery
.select('journal.id')
.from('journal')
.where('meta,nlmuniqueid', nlmId)
.first(),
)
if (!row) {
throw new Error('journal not found')
}
return row.id
}
static async selectAll() {
const rows = await runQuery(buildQuery.select().from('journal'))
return rows.map(rowToEntity)
......
......@@ -213,7 +213,7 @@ class Manuscript extends EpmcBaseModel {
manuscripts = await Manuscript.query()
.select('manuscript.*')
.where('manuscript.id', id)
.eager('[teams.users, notes, files]')
.eager('[journal, teams.users, notes, files]')
} else {
manuscripts = await Manuscript.query().where('id', id)
}
......@@ -237,7 +237,7 @@ class Manuscript extends EpmcBaseModel {
const manuscripts = await Manuscript.query()
.distinct('manuscript.id')
.select('manuscript.*')
.eager('[teams.users, claiming]')
.eager('[teams.users, claiming, journal]')
.whereIn('status', status)
logger.debug('manuscripts: ', manuscripts)
return manuscripts
......@@ -270,7 +270,7 @@ class Manuscript extends EpmcBaseModel {
.leftJoin('team', 'team.manuscript_id', 'manuscript.id')
.groupBy('manuscript.id', 'team.user_id', 'team.role_name')
.where('team.user_id', user)
.eager('[teams.users]')
.eager('[teams.users, journal]')
return manuscripts
}
......
......@@ -28,12 +28,32 @@ const dManuscriptUpdate = (data, userId) => {
if (data.claimedBy) {
properties.claimedBy = data.claimedBy
}
if (data.journalId) {
properties.journalId = data.journalId
}
if (userId) {
properties.updatedBy = userId
}
return new Manuscript(properties)
}
const gJournal = model => {
const journal = {
journalTitle: model.journalTitle,
meta: {
publisherName: model['meta,publisherName'],
issn: model['meta,issn'],
nlmta: model['meta,nlmta'],
nlmuniqueid: model['meta,nlmuniqueid'],
pmcStatus: model['meta,pmcStatus'],
pubmedStatus: model['meta,pubmedStatus'],
firstYear: model['meta,firstYear'],
endYear: model['meta,endYear'],
},
}
return journal
}
// Transform from Database model to GraphQL data
const gManuscript = model => {
const manuscript = {}
......@@ -41,6 +61,9 @@ const gManuscript = model => {
manuscript.updated = model.updated
manuscript.status = model.status
manuscript.formState = model.formState
if (model.journal) {
manuscript.journal = gJournal(model.journal)
}
manuscript.meta = {}
if (model['meta,title']) {
manuscript.meta.title = model['meta,title']
......
......@@ -9,7 +9,7 @@ const FileAccess = require('../file/data-access')
const NoteAccess = require('../note/data-access')
const ReviewAccess = require('../review/data-access')
const Team = require('../team/data-access')
const UserAccess = require('../user/data-access')
const Journal = require('../journal/data-access')
const { dManuscriptUpdate, gManuscript } = require('./helpers/transform')
const mergeObjects = (...inputs) =>
......@@ -134,18 +134,20 @@ const Manuscript = {
return savedMan
},
update: async (input, userId, eager = false) => {
update: async (input, userId) => {
const originalMan = await ManuscriptAccess.selectById(input.id)
if (!originalMan) {
throw new Error('Manuscript not found')
}
const manuscriptUpdate = dManuscriptUpdate(input, userId)
lodash.assign(originalMan, manuscriptUpdate)
const updatedMan = await originalMan.save()
if (eager) {
updatedMan.claiming = await UserAccess.findById(userId)
const newInput = input
if (input.meta.nlmId) {
input.journalId = await Journal.getIdByNlmId(input.meta.nlmId)
delete newInput.meta.nlmId
}
const manuscriptUpdate = dManuscriptUpdate(newInput, userId)
lodash.assign(originalMan, manuscriptUpdate)
await originalMan.save()
const updatedMan = await ManuscriptAccess.selectById(input.id, true)
return gManuscript(updatedMan)
},
......
......@@ -80,7 +80,6 @@ const resolvers = {
const updatedMan = await ManuscriptManager.update(
{ id, claimedBy: user },
user,
true,
)
return updatedMan
},
......
......@@ -39,6 +39,7 @@ input ManuscriptMetaInput {
fundingGroup: [FundingGroupInput]
releaseDelay: String
unmatchedJournal: String
nlmId: String
}
input ArticleIdInput {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment