diff --git a/packages/component-modal/src/components/withModal.js b/packages/component-modal/src/components/withModal.js index 941fde711362f178e7337b6c3b5b03904f0eb8f3..9bd24e9007db25f6ac73965aa6a99655df672827 100644 --- a/packages/component-modal/src/components/withModal.js +++ b/packages/component-modal/src/components/withModal.js @@ -20,10 +20,8 @@ const mapDispatch = modalKey => (dispatch, propss) => ({ const mapDispatch2 = (dispatch, props) => ({ hideModal: () => dispatch(hideModal()), - showModal: (modalProps = {}) => { - console.log('showing modal dispatch', modalProps, props) - dispatch(showModal(props.modalKey, modalProps)) - }, + showModal: (modalProps = {}) => + dispatch(showModal(props.modalKey, modalProps)), setModalError: errorMessage => dispatch(setModalError(errorMessage)), }) diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js index 17a97a943b9a19c70491cc1c0fb5aefbf1a666ed..ebe49f7fb0b2a529cf4e81ce6df79adfaa482694 100644 --- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js +++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js @@ -25,6 +25,7 @@ const DashboardCard = ({ theme, currentUser, renderHandlingEditorRow, + canInviteReviewers, ...rest }) => { const { submitted, title, type } = parseVersion(version) @@ -139,11 +140,13 @@ const DashboardCard = ({ <HEText>Handling Editor</HEText> {renderHandlingEditorRow()} </LeftDetails> + {canInviteReviewers() && ( + <InviteReviewers + modalKey={`invite-reviewers-${project.id}`} + project={project} + /> + )} </Bottom> - <InviteReviewers - modalKey={`invite-reviewers-${project.id}`} - project={project} - /> </DetailsView> )} </Card> @@ -158,6 +161,12 @@ export default compose( modalComponent: ConfirmationModal, }), withHandlers({ + canInviteReviewers: ({ currentUser }) => () => { + const isAdmin = get(currentUser, 'admin') + const isEic = get(currentUser, 'editorInChief') + const isHe = get(currentUser, 'handlingEditor') + return isAdmin || isEic || isHe + }, renderHandlingEditorRow: ({ currentUser, project }) => () => { const status = get(project, 'status') || 'draft' const isAdmin = get(currentUser, 'admin') diff --git a/packages/components-faraday/src/components/Reviewers/InviteReviewers.js b/packages/components-faraday/src/components/Reviewers/InviteReviewers.js index e1432a82ccaf99d9731c66e136ac0b55bd8ab258..3df0d8b3433b4e1d14fc15fe58742c0239524cd9 100644 --- a/packages/components-faraday/src/components/Reviewers/InviteReviewers.js +++ b/packages/components-faraday/src/components/Reviewers/InviteReviewers.js @@ -38,32 +38,28 @@ const InviteReviewersModal = compose( collectionId, reviewers, getReviewers, - }) => { - console.log('InviteReviewersModal ->', showModal) - return ( - <Root> - <CloseIcon data-test="icon-modal-hide" onClick={hideModal}> - <Icon color={theme.colorPrimary}>x</Icon> - </CloseIcon> + }) => ( + <Root> + <CloseIcon data-test="icon-modal-hide" onClick={hideModal}> + <Icon color={theme.colorPrimary}>x</Icon> + </CloseIcon> - <Title>Invite Reviewers</Title> + <Title>Invite Reviewers</Title> - <Subtitle>Invite reviewer</Subtitle> - <ReviewerForm collectionId={collectionId} getReviewers={getReviewers} /> + <Subtitle>Invite reviewer</Subtitle> + <ReviewerForm collectionId={collectionId} getReviewers={getReviewers} /> - <Subtitle>Reviewers Info</Subtitle> - <ReviewersList - collectionId={collectionId} - reviewers={reviewers} - showModal={showModal} - /> - </Root> - ) - }, + <Subtitle>Reviewers Info</Subtitle> + <ReviewersList + collectionId={collectionId} + reviewers={reviewers} + showModal={showModal} + /> + </Root> + ), ) const ModalSwitcher = ({ type, ...rest }) => { - console.log('modal switcher', type, rest) switch (type) { case 'invite-reviewers': return <InviteReviewersModal {...rest} /> diff --git a/packages/components-faraday/src/components/Reviewers/ReviewerList.js b/packages/components-faraday/src/components/Reviewers/ReviewerList.js index e9e41772a57a31d76e5d63ef75471ad2222f1dea..e2a9a7bf278cf1710ffada22644f0806e9929106 100644 --- a/packages/components-faraday/src/components/Reviewers/ReviewerList.js +++ b/packages/components-faraday/src/components/Reviewers/ReviewerList.js @@ -1,4 +1,5 @@ import React from 'react' +import moment from 'moment' import { pick } from 'lodash' import { connect } from 'react-redux' import { th, Icon } from '@pubsweet/ui' @@ -47,14 +48,16 @@ const defaultReviewers = [ ] const ResendRevoke = withTheme( - ({ theme, showConfirmResend, showConfirmRevoke }) => ( + ({ theme, showConfirmResend, showConfirmRevoke, status }) => ( <ActionButtons> <div onClick={showConfirmResend}> <Icon color={theme.colorPrimary}>refresh-cw</Icon> </div> - <div onClick={showConfirmRevoke}> - <Icon color={theme.colorPrimary}>x-circle</Icon> - </div> + {status === 'pending' && ( + <div onClick={showConfirmRevoke}> + <Icon color={theme.colorPrimary}>x-circle</Icon> + </div> + )} </ActionButtons> ), ) @@ -63,6 +66,7 @@ const ReviewersList = ({ reviewers = defaultReviewers, showConfirmResend, showConfirmRevoke, + renderTimestamp, }) => ( <Root> <ScrollContainer> @@ -79,12 +83,15 @@ const ReviewersList = ({ </Column> <Column> <StatusText>{r.status}</StatusText> - <StatusText>{r.timestamp}</StatusText> + <DateText>{renderTimestamp(r.timestamp)}</DateText> </Column> - <ResendRevoke - showConfirmResend={showConfirmResend(r)} - showConfirmRevoke={showConfirmRevoke(r.invitationId)} - /> + {r.status !== 'accepted' && ( + <ResendRevoke + showConfirmResend={showConfirmResend(r)} + showConfirmRevoke={showConfirmRevoke(r.invitationId)} + status={r.status} + /> + )} </ReviewerItem> ))} </ScrollContainer> @@ -94,6 +101,16 @@ const ReviewersList = ({ export default compose( connect(null, { inviteReviewer, revokeReviewer }), withHandlers({ + renderTimestamp: () => timestamp => { + const today = moment() + const stamp = moment(timestamp) + const duration = moment.duration(today.diff(stamp)) + + if (duration.asDays() < 1) { + return `${duration.humanize()} ago` + } + return stamp.format('DD.MM.YYYY') + }, goBackToReviewers: ({ showModal, hideModal, collectionId }) => () => { showModal({ collectionId, @@ -111,9 +128,9 @@ export default compose( inviteReviewer, collectionId, }) => reviewer => () => { - console.log('show confirm resend', showModal) showModal({ - title: 'Resend confirmation', + title: 'Resend reviewer invite', + confirmText: 'Resend', onConfirm: () => { inviteReviewer( pick(reviewer, ['email', 'firstName', 'lastName', 'affiliation']), @@ -131,7 +148,8 @@ export default compose( collectionId, }) => invitationId => () => { showModal({ - title: 'Revoke confirmation', + title: 'Unassign Reviewer', + confirmText: 'Unassign', onConfirm: () => { revokeReviewer(invitationId, collectionId).then( goBackToReviewers, @@ -161,7 +179,11 @@ const AcceptedReviewer = ReviewerEmail.extend` margin-left: ${th('subGridUnit')}; ` -const StatusText = ReviewerEmail.extend`` +const StatusText = ReviewerEmail.extend` + text-transform: uppercase; +` + +const DateText = ReviewerEmail.extend`` const Column = styled.div` align-items: flex-start;