diff --git a/app/components/PubMedSearch.jsx b/app/components/PubMedSearch.jsx index c92222707ea9ef76799272703869d02991637130..b4d36c1b5156adb485bf6e4007e490ea8a479862 100755 --- a/app/components/PubMedSearch.jsx +++ b/app/components/PubMedSearch.jsx @@ -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() { diff --git a/app/components/dashboard/DashboardList.jsx b/app/components/dashboard/DashboardList.jsx index 3fbb90e97aa6ac822c20fada152109f08448aab8..eae4e083728b0507aeaf2798c1b997678c7a71cb 100644 --- a/app/components/dashboard/DashboardList.jsx +++ b/app/components/dashboard/DashboardList.jsx @@ -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> diff --git a/app/components/dashboard/operations.js b/app/components/dashboard/operations.js index e1773ac5f0c67e1728c6f35a1b0b64cbacb4e186..300b972fb49abe546b6afe6c59d0fa6b70433603 100644 --- a/app/components/dashboard/operations.js +++ b/app/components/dashboard/operations.js @@ -50,6 +50,11 @@ const DashboardFragment = gql` status updated formState + journal { + meta { + nlmta + } + } meta { title articleIds { diff --git a/app/components/submission-wizard/Citation.jsx b/app/components/submission-wizard/Citation.jsx index 987a3f74b8f600b530a0e0430ccaad2398a8ca13..8cd791ec930cf9786e0191613a069fd91ead8b01 100755 --- a/app/components/submission-wizard/Citation.jsx +++ b/app/components/submission-wizard/Citation.jsx @@ -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 && ( diff --git a/app/components/submission-wizard/CreatePage.jsx b/app/components/submission-wizard/CreatePage.jsx index 3efab7ccb65338c90f4e169dabf25aa3d02c2804..41c2e22695e9c975f372fc999d3976c08a480935 100755 --- a/app/components/submission-wizard/CreatePage.jsx +++ b/app/components/submission-wizard/CreatePage.jsx @@ -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> diff --git a/app/components/submission-wizard/operations.js b/app/components/submission-wizard/operations.js index f88e59e754b7bf43e37ce017c207a875a926f38c..c52a14982f30915970eb95e66368db8cb4a88e3b 100644 --- a/app/components/submission-wizard/operations.js +++ b/app/components/submission-wizard/operations.js @@ -14,6 +14,14 @@ export const GET_MANUSCRIPT = gql` id status formState + journal { + journalTitle + meta { + nlmta + pmcStatus + pubmedStatus + } + } meta { title articleIds { diff --git a/server/xpub-model/entities/journal/data-access.js b/server/xpub-model/entities/journal/data-access.js index bf3773cf910f4707e843516545656b13c848323b..6ef633f05de75be9bb31b338aa0f111f71397710 100644 --- a/server/xpub-model/entities/journal/data-access.js +++ b/server/xpub-model/entities/journal/data-access.js @@ -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) diff --git a/server/xpub-model/entities/manuscript/data-access.js b/server/xpub-model/entities/manuscript/data-access.js index 55af7439f1306382837ee48c223ae06db36b2fa9..07a188bfb535e5ccaa74001e52146e7c74691395 100644 --- a/server/xpub-model/entities/manuscript/data-access.js +++ b/server/xpub-model/entities/manuscript/data-access.js @@ -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 } diff --git a/server/xpub-model/entities/manuscript/helpers/transform.js b/server/xpub-model/entities/manuscript/helpers/transform.js index 32d655dc2f81f67341c362d7a626ed15d9f0e7b5..8ee0cf7f0a863ef2b4c6ab911d2a9943cf7b6e3e 100644 --- a/server/xpub-model/entities/manuscript/helpers/transform.js +++ b/server/xpub-model/entities/manuscript/helpers/transform.js @@ -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'] diff --git a/server/xpub-model/entities/manuscript/index.js b/server/xpub-model/entities/manuscript/index.js index f0bd12fcbd0901c5d916e7ad453727818b5b91e1..dfa41dbef3eaa6590c66a2156cf915beae7a0022 100755 --- a/server/xpub-model/entities/manuscript/index.js +++ b/server/xpub-model/entities/manuscript/index.js @@ -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) }, diff --git a/server/xpub-server/entities/manuscript/resolvers.js b/server/xpub-server/entities/manuscript/resolvers.js index 98e891f3b910b063f8a27ac3b49be881669066f7..2edd1c7f68a8c280531e5720dbdddf8bdcb2f322 100644 --- a/server/xpub-server/entities/manuscript/resolvers.js +++ b/server/xpub-server/entities/manuscript/resolvers.js @@ -80,7 +80,6 @@ const resolvers = { const updatedMan = await ManuscriptManager.update( { id, claimedBy: user }, user, - true, ) return updatedMan }, diff --git a/server/xpub-server/entities/manuscript/typeDefs.graphqls b/server/xpub-server/entities/manuscript/typeDefs.graphqls index eb5374a60195432cd736cfc9dcbf5656a4d290f8..54d9d236d7b19644cf4ddb049caa142dd7a2a8a8 100644 --- a/server/xpub-server/entities/manuscript/typeDefs.graphqls +++ b/server/xpub-server/entities/manuscript/typeDefs.graphqls @@ -39,6 +39,7 @@ input ManuscriptMetaInput { fundingGroup: [FundingGroupInput] releaseDelay: String unmatchedJournal: String + nlmId: String } input ArticleIdInput {