From 0aa837e0a6d1073cfc6c30278686bb1c233f1031 Mon Sep 17 00:00:00 2001 From: Audrey Hamelers <hamelers@ebi.ac.uk> Date: Mon, 4 Mar 2019 15:51:09 +0000 Subject: [PATCH] #239 duplicate checking improvement --- app/components/submission-wizard/SubmitPage.jsx | 8 +++----- app/components/submission-wizard/operations.js | 4 ++-- .../xpub-model/entities/manuscript/data-access.js | 1 - server/xpub-model/entities/manuscript/index.js | 13 +++++++++---- server/xpub-server/entities/manuscript/resolvers.js | 4 ++-- .../entities/manuscript/typeDefs.graphqls | 2 +- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/app/components/submission-wizard/SubmitPage.jsx b/app/components/submission-wizard/SubmitPage.jsx index da78b6d46..950751284 100755 --- a/app/components/submission-wizard/SubmitPage.jsx +++ b/app/components/submission-wizard/SubmitPage.jsx @@ -13,12 +13,10 @@ const SubmitWithHeader = SubmissionHeader(SubmitWithMutations) const DupeCheckSubmitPage = ({ manuscript, ...props }) => { const { id, meta } = manuscript - const pmid = - meta.articleIds && meta.articleIds.find(id => id.pubIdType === 'pmid') - ? meta.articleIds.find(id => id.pubIdType === 'pmid').id - : null + const { title, articleIds: aids } = meta + const articleIds = aids.map(aid => aid.id) return ( - <Query query={CHECK_DUPES} variables={{ id, pmid, title: meta.title }}> + <Query query={CHECK_DUPES} variables={{ id, articleIds, title }}> {({ data, loading }) => { if (loading || !data) { return ( diff --git a/app/components/submission-wizard/operations.js b/app/components/submission-wizard/operations.js index bbfb29d48..a49070839 100644 --- a/app/components/submission-wizard/operations.js +++ b/app/components/submission-wizard/operations.js @@ -40,8 +40,8 @@ export const CREATE_MANUSCRIPT = gql` ` export const CHECK_DUPES = gql` - query($id: ID!, $pmid: String, $title: String!) { - checkDuplicates(id: $id, pmid: $pmid, title: $title) { + query($id: ID!, $articleIds: [String], $title: String!) { + checkDuplicates(id: $id, articleIds: $articleIds, title: $title) { ...ManuscriptFragment } } diff --git a/server/xpub-model/entities/manuscript/data-access.js b/server/xpub-model/entities/manuscript/data-access.js index 046e3af14..5da28aae7 100644 --- a/server/xpub-model/entities/manuscript/data-access.js +++ b/server/xpub-model/entities/manuscript/data-access.js @@ -394,7 +394,6 @@ class Manuscript extends EpmcBaseModel { ]), ) .orderBy('manuscript.updated', 'desc') - .debug() return manuscripts } diff --git a/server/xpub-model/entities/manuscript/index.js b/server/xpub-model/entities/manuscript/index.js index e4da17c1d..55d211643 100755 --- a/server/xpub-model/entities/manuscript/index.js +++ b/server/xpub-model/entities/manuscript/index.js @@ -90,13 +90,18 @@ const Manuscript = { } }, - checkDuplicates: async (id, pmid, title, user) => { + checkDuplicates: async (id, articleIds, title, user) => { let manuscripts = [] - if (pmid) { - const idMatches = await ManuscriptAccess.searchArticleIds(pmid, user) + if (articleIds.length > 0) { + const idMatches = [] + const matchLists = articleIds.map(aid => + ManuscriptAccess.searchArticleIds(aid, user), + ) + await Promise.all(matchLists) + matchLists.forEach(list => idMatches.concat(list)) manuscripts = manuscripts.concat( idMatches.reduce((other, each) => { - if (each.id !== id) { + if (each.id !== id && !manuscripts.some(m => m.id === each.id)) { other.push(each) } return other diff --git a/server/xpub-server/entities/manuscript/resolvers.js b/server/xpub-server/entities/manuscript/resolvers.js index 33739822f..fe9391de3 100644 --- a/server/xpub-server/entities/manuscript/resolvers.js +++ b/server/xpub-server/entities/manuscript/resolvers.js @@ -19,11 +19,11 @@ const resolvers = { return ManuscriptManager.all(user) }, - async checkDuplicates(_, { id, pmid, title }, { user }) { + async checkDuplicates(_, { id, articleIds, title }, { user }) { if (!user) { throw new Error('You are not authenticated!') } - return ManuscriptManager.checkDuplicates(id, pmid, title, user) + return ManuscriptManager.checkDuplicates(id, articleIds, title, user) }, async countByStatus(_, vars, { user }) { if (!user) { diff --git a/server/xpub-server/entities/manuscript/typeDefs.graphqls b/server/xpub-server/entities/manuscript/typeDefs.graphqls index 7d355d6e1..0b9275c55 100644 --- a/server/xpub-server/entities/manuscript/typeDefs.graphqls +++ b/server/xpub-server/entities/manuscript/typeDefs.graphqls @@ -23,7 +23,7 @@ extend type Query { manuscripts: [Manuscript]! adminManuscripts(external: Boolean): [Manuscript]! countByStatus: [Count]! - checkDuplicates(id: ID!, pmid: String, title: String!): [Manuscript] + checkDuplicates(id: ID!, articleIds: [String], title: String!): [Manuscript] searchArticleIds(id: String!): ManuscriptResult! findByStatus(query: String!, page: Int, pageSize: Int): ManuscriptSearchResult! searchManuscripts(query: String!, page: Int, pageSize: Int): ManuscriptSearchResult! -- GitLab