diff --git a/packages/component-invite/src/helpers/Team.js b/packages/component-invite/src/helpers/Team.js index 8955e107a0b6bba49093a2028de088431f6eeb54..8092336a8cdd94720eea378cd4dfae14a3453f7f 100644 --- a/packages/component-invite/src/helpers/Team.js +++ b/packages/component-invite/src/helpers/Team.js @@ -106,10 +106,20 @@ const getTeamByGroupAndCollection = async (collectionId, role, TeamModel) => { ) } +const updateHETeam = async (collection, role, TeamModel, user) => { + const team = await getTeamByGroupAndCollection(collection.id, role, TeamModel) + delete collection.handlingEditor + await removeTeamMember(team.id, user.id, TeamModel) + user.teams = user.teams.filter(userTeamId => team.id !== userTeamId) + await user.save() + await collection.save() +} + module.exports = { createNewTeam, setupManuscriptTeam, removeTeamMember, getTeamMembersByCollection, getTeamByGroupAndCollection, + updateHETeam, } diff --git a/packages/component-invite/src/routes/collectionsInvitations/patch.js b/packages/component-invite/src/routes/collectionsInvitations/patch.js index c23e245eafa38622c1bac42345ff734a99aa36dd..da754a1fc193276c4bb22006fe9c5c0b68ce54c3 100644 --- a/packages/component-invite/src/routes/collectionsInvitations/patch.js +++ b/packages/component-invite/src/routes/collectionsInvitations/patch.js @@ -19,7 +19,7 @@ module.exports = models => async (req, res) => { let user = await models.User.find(req.user) try { - let collection = await models.Collection.find(collectionId) + const collection = await models.Collection.find(collectionId) const invitation = await collection.invitations.find( invitation => invitation.id === invitationId, ) @@ -70,19 +70,17 @@ module.exports = models => async (req, res) => { } } else { invitation.isAccepted = false - const team = await teamHelper.getTeamByGroupAndCollection( - collectionId, - invitation.role, - models.Team, - ) - if (invitation.role === 'handlingEditor') { - delete collection.handlingEditor - } - await collection.save() - await teamHelper.removeTeamMember(team.id, user.id, models.Team) - user.teams = user.teams.filter(userTeamId => team.id !== userTeamId) + + if (invitation.role === 'handlingEditor') + await teamHelper.updateHETeam( + collection, + invitation.role, + models.Team, + user, + ) if (reason !== undefined) { invitation.reason = reason + await collection.save() } try { if (invitation.role === 'handlingEditor') { diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js index 89f45615879ce4a02387ff462f08c12c60adebd2..e9eb600cbef1cb248ebf518e146e891f2e91afb3 100644 --- a/packages/xpub-faraday/config/authsome-helpers.js +++ b/packages/xpub-faraday/config/authsome-helpers.js @@ -19,4 +19,10 @@ module.exports = { coll.visibleStatus = statuses[coll.status].private } }, + filterRefusedReviewers: (coll, user) => { + const matchingInv = coll.invitations.find(inv => inv.userId === user.id) + if (matchingInv === undefined) return null + if (matchingInv.hasAnswer === true && !matchingInv.isAccepted) return null + return coll + }, } diff --git a/packages/xpub-faraday/config/authsome.js b/packages/xpub-faraday/config/authsome.js index 9418e830bf2700f23aaccbce52939cb816f23936..cd7bed1d09f72d09798f6b8cc4e0d03cb9c0dc75 100644 --- a/packages/xpub-faraday/config/authsome.js +++ b/packages/xpub-faraday/config/authsome.js @@ -35,6 +35,9 @@ async function teamPermissions(user, operation, object, context) { } helpers.setPublicStatuses(coll, matchingCollPerm) helpers.parseReviewerAuthors(coll, matchingCollPerm) + if (['reviewer'].includes(matchingCollPerm.permission)) { + return helpers.filterRefusedReviewers(coll, user) + } return coll }) .filter(Boolean)