diff --git a/packages/component-invite/src/routes/fragmentsInvitations/decline.js b/packages/component-invite/src/routes/fragmentsInvitations/decline.js index 6d661344665ccd70f199eb3b7b024dd46010c033..8d7e5d97541e08dc4a9ae912867ce58a8e61df4e 100644 --- a/packages/component-invite/src/routes/fragmentsInvitations/decline.js +++ b/packages/component-invite/src/routes/fragmentsInvitations/decline.js @@ -1,4 +1,5 @@ const { + Team, services, Invitation, authsome: authsomeHelper, @@ -73,6 +74,25 @@ module.exports = models => async (req, res) => { const baseUrl = services.getBaseUrl(req) + const teamHelper = new Team({ + fragmentId, + collectionId, + TeamModel: models.Team, + }) + + const reviewerTeam = await teamHelper.getTeam({ + role: 'reviewer', + objectType: 'fragment', + }) + + await teamHelper.removeTeamMember({ + teamId: reviewerTeam.id, + userId: user.id, + }) + + user.teams = user.teams.filter(userTeamId => reviewerTeam.id !== userTeamId) + await user.save() + notifications.sendNotifications({ baseUrl, fragment, diff --git a/packages/component-invite/src/routes/fragmentsInvitations/patch.js b/packages/component-invite/src/routes/fragmentsInvitations/patch.js index b6bda8da6ee35e84b28b992cee9c86b6102ce3d2..20d059bcb68b96842426a1f6a71c246c98238c5c 100644 --- a/packages/component-invite/src/routes/fragmentsInvitations/patch.js +++ b/packages/component-invite/src/routes/fragmentsInvitations/patch.js @@ -1,4 +1,5 @@ const { + Team, services, Collection, Invitation, @@ -61,10 +62,32 @@ module.exports = models => async (req, res) => { fragment.save() } else { if (reason) invitation.reason = reason + await fragment.save() collectionHelper.updateStatusByNumberOfReviewers({ invitations: fragment.invitations, }) + + const teamHelper = new Team({ + fragmentId, + collectionId, + TeamModel: models.Team, + }) + + const reviewerTeam = await teamHelper.getTeam({ + role: 'reviewer', + objectType: 'fragment', + }) + + await teamHelper.removeTeamMember({ + teamId: reviewerTeam.id, + userId: user.id, + }) + + user.teams = user.teams.filter( + userTeamId => reviewerTeam.id !== userTeamId, + ) + await user.save() } notifications.sendNotifications({ diff --git a/packages/component-invite/src/tests/fragmentsInvitations/patch.test.js b/packages/component-invite/src/tests/fragmentsInvitations/patch.test.js index 8ce62849aeaf74fe31749028fa9cccf1834e6fff..15d6f7a45edb01cde39e137b57121fd8520a5168 100644 --- a/packages/component-invite/src/tests/fragmentsInvitations/patch.test.js +++ b/packages/component-invite/src/tests/fragmentsInvitations/patch.test.js @@ -62,6 +62,7 @@ describe('Patch fragments invitations route handler', () => { await require(patchPath)(models)(req, res) expect(res.statusCode).toBe(200) + expect(reviewer.teams).toHaveLength(0) }) it('should return an error if the collection does not exist', async () => { const { handlingEditor } = testFixtures.users diff --git a/packages/component-mts-package/config/default.js b/packages/component-mts-package/config/default.js index bf1f239eb09ce13400de74acb78501622867fb33..bb85c1548b8ff3d3fe551c6ef63334be3b5d9279 100644 --- a/packages/component-mts-package/config/default.js +++ b/packages/component-mts-package/config/default.js @@ -33,9 +33,36 @@ const defaultFTPConfig = { exclude: ['*.js'], } +const journalConfig = { + manuscriptTypes: [ + { + label: 'Research Article', + value: 'research', + author: true, + peerReview: true, + abstractRequired: true, + }, + { + label: 'Review Article', + value: 'review', + author: true, + peerReview: true, + abstractRequired: true, + }, + { + label: 'Letter to the editor', + value: 'letter-to-editor', + author: true, + peerReview: false, + abstractRequired: false, + }, + ], +} + module.exports = { defaultConfig, defaultParseXmlOptions, defaultS3Config, defaultFTPConfig, + journalConfig, } diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js index 0f9a82235ff2dd0bd6517e9e948cacef33f64053..22d862896b71ffa81a67478a708a0dadcc262974 100644 --- a/packages/component-mts-package/src/MTS.js +++ b/packages/component-mts-package/src/MTS.js @@ -1,8 +1,12 @@ const convert = require('xml-js') -const { set, get, reduce, isEmpty } = require('lodash') +const config = require('config') +const { set, get, reduce, isEmpty, capitalize } = require('lodash') const PackageManager = require('./PackageManager') const mts = require('./mts-json-template') + +const manuscriptTypes = config.get('journalConfig.manuscriptTypes') + const { defaultConfig, defaultParseXmlOptions, @@ -76,7 +80,11 @@ class MTS { 'subj-group-type': 'Article Type', }, subject: { - _text: metadata.type, + _text: get( + manuscriptTypes.find(v => v.value === metadata.type), + 'label', + 'Research Article', + ), }, }, ], @@ -147,53 +155,67 @@ class MTS { const { hasConflicts = 'no', message = '', - hasDataAvailability, - dataAvailabilityMessage, - hasFunding, - fundingMessage, + hasDataAvailability = 'no', + dataAvailabilityMessage = '', + hasFunding = 'no', + fundingMessage = '', } = conflicts const questions = [] + const funding = isEmpty(hasFunding) ? 'no' : hasFunding + const dataAvailability = isEmpty(hasDataAvailability) + ? 'no' + : hasDataAvailability + const getQuestionMessage = (selection, message, defaultMessage) => { + if (selection === 'yes') { + return '' + } + return isEmpty(message) ? defaultMessage : message + } if (!isEmpty(hasConflicts)) { questions.push({ _attributes: { type: 'COI', }, answer: { - _text: hasConflicts, + _text: capitalize(hasConflicts), }, statement: { _text: message, }, }) } - if (!isEmpty(hasDataAvailability)) { + if (!isEmpty(dataAvailability)) { questions.push({ _attributes: { type: 'DA', }, answer: { - _text: hasDataAvailability, + _text: capitalize(dataAvailability), }, statement: { - _text: isEmpty(dataAvailabilityMessage) - ? 'The authors for this paper did not provide a data availability statement' - : dataAvailabilityMessage, + _text: getQuestionMessage( + dataAvailability, + dataAvailabilityMessage, + 'The authors for this paper did not provide a data availability statement', + ), }, }) } - if (!isEmpty(hasFunding)) { + if (!isEmpty(funding)) { questions.push({ _attributes: { type: 'Fund', }, answer: { - _text: hasFunding, + _text: capitalize(funding), }, statement: { - _text: isEmpty(fundingMessage) - ? 'The authors for this paper did not provide a funding statement' - : fundingMessage, + _text: getQuestionMessage( + funding, + fundingMessage, + 'The authors for this paper did not provide a funding statement', + ), }, }) } @@ -206,7 +228,7 @@ class MTS { const contrib = authors.map((a, i) => ({ _attributes: { 'contrib-type': 'author', - corresp: a.isCorresponding ? 'yes' : 'no', + corresp: a.isCorresponding ? 'Yes' : 'No', }, role: { _attributes: { diff --git a/packages/hindawi-theme/src/elements/Menu.js b/packages/hindawi-theme/src/elements/Menu.js index 3f3878c1c89d55ecb6726163feea99d9ef3ea3e9..8932e3c988cc7e570d2ff5f6faf11b87a2466e72 100644 --- a/packages/hindawi-theme/src/elements/Menu.js +++ b/packages/hindawi-theme/src/elements/Menu.js @@ -42,6 +42,7 @@ export default { Options: css` background: ${th('colorBackgroundHue')}; box-shadow: ${th('menu.openerShadow')}; + min-width: fit-content; `, Option: css` border: none; diff --git a/packages/xpub-faraday/app/config/journal/metadata.js b/packages/xpub-faraday/app/config/journal/metadata.js index d23e29ac87bd7daba4425925e1969f69a0beeecc..3a1ef627a1a1cc8d89f0e49f4db95a0e8cdd575b 100644 --- a/packages/xpub-faraday/app/config/journal/metadata.js +++ b/packages/xpub-faraday/app/config/journal/metadata.js @@ -7,10 +7,10 @@ module.exports = { doctype: 'article SYSTEM "JATS-archivearticle1-mathml3.dtd"', dtdVersion: '1.1d1', articleType: 'Research Article', - journalIdPublisher: 'research', + journalIdPublisher: 'BCA', email: 'bca.support@hindawi.com', journalTitle: 'Bioinorganic Chemistry and Applications', issn: '2474-7394', - prefix: 'RESEARCH-BCA-', + prefix: 'BCA-', }, } diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js index 79f2c7ccb86e9d8752fd932ded3c577622a2af96..2e0282b488877c38e737c366e0da6ba7dc7730e8 100644 --- a/packages/xpub-faraday/config/default.js +++ b/packages/xpub-faraday/config/default.js @@ -81,6 +81,7 @@ module.exports = { remoteRoot: '/BCA/', exclude: ['*.js'], }, + journal: get(journalConfig, 'metadata.mts'), }, 'invite-reset-password': { url: process.env.PUBSWEET_INVITE_PASSWORD_RESET_URL || '/invite',