diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 48940b4c690647c56b7dc4262c263270de30b074..cf7ada7241bb4906b3bacca806947a5ce986768b 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -174,13 +174,15 @@ export const pendingHEInvitation = (state, collectionId) => i.role === 'handlingEditor' && !i.hasAnswer, ) + .value() -const parseInvitedHE = (handlingEditor = {}, state, collectionId) => ({ - ...handlingEditor, - name: pendingHEInvitation(state, collectionId) - ? 'Invited' - : handlingEditor.name, -}) +const parseInvitedHE = (handlingEditor, state, collectionId) => + handlingEditor && { + ...handlingEditor, + name: pendingHEInvitation(state, collectionId) + ? 'Invited' + : handlingEditor.name, + } const hideCustomIdStatuses = ['draft', 'technicalChecks'] export const newestFirstParseDashboard = (state, items) => chain(items) diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js index 26afbcc9d9a772aa80e6ffbbeef4d29e58de804b..a4d5c432c355631b1c842b6e681dd19a0359e2ea 100644 --- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js +++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js @@ -99,21 +99,20 @@ export default compose( heInvitation, resendInvitation, revokeInvitation, - pendingInvitation, + pendingInvitation = {}, handlingEditors = [], - currentUser: { canAssignHE, id: currentUserId }, + currentUser: { permissions: { canAssignHE }, id: currentUserId }, collection: { handlingEditor }, }) => () => { if (pendingInvitation.userId === currentUserId) { return <Text ml={1}>Invited</Text> } - if (pendingInvitation) { + if (pendingInvitation.userId) { const person = chain(handlingEditors) .filter(he => he.id === pendingInvitation.userId) .map(he => ({ ...he, name: `${he.firstName} ${he.lastName}` })) .first() .value() - return ( <PersonInvitation isFetching={isFetching} @@ -129,6 +128,7 @@ export default compose( if (heInvitation) { return <Text ml={1}>{handlingEditor.name}</Text> } + if (canAssignHE) { return ( <Button ml={1} onClick={inviteHE} primary size="small"> diff --git a/packages/component-manuscript/src/redux/editors.js b/packages/component-manuscript/src/redux/editors.js index e39a801a48fc179f638dfb1c36d16a50dd664401..794f4266b2b07ebe31d66f3300895fb7c54596c8 100644 --- a/packages/component-manuscript/src/redux/editors.js +++ b/packages/component-manuscript/src/redux/editors.js @@ -23,15 +23,20 @@ export const selectHandlingEditors = state => .filter(editor => editor.isActive && editor.isConfirmed) .value() +const canAssignHEStatuses = ['submitted'] export const canAssignHE = (state, collectionId = '') => { const isEIC = currentUserIs(state, 'adminEiC') - const hasHE = chain(state) + const collection = chain(state) .get('collections', []) .find(c => c.id === collectionId) - .get('handlingEditor') .value() + const hasHE = get(collection, 'handlingEditor') - return isEIC && !hasHE + return ( + isEIC && + !hasHE && + canAssignHEStatuses.includes(get(collection, 'status', 'draft')) + ) } const editorsRequest = () => ({ type: EDITORS_REQUEST })