Skip to content
Snippets Groups Projects
Commit 84ee35a3 authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

feat(invite-reviewers): format date

parent 11a62ba4
No related branches found
No related tags found
No related merge requests found
...@@ -20,10 +20,8 @@ const mapDispatch = modalKey => (dispatch, propss) => ({ ...@@ -20,10 +20,8 @@ const mapDispatch = modalKey => (dispatch, propss) => ({
const mapDispatch2 = (dispatch, props) => ({ const mapDispatch2 = (dispatch, props) => ({
hideModal: () => dispatch(hideModal()), hideModal: () => dispatch(hideModal()),
showModal: (modalProps = {}) => { showModal: (modalProps = {}) =>
console.log('showing modal dispatch', modalProps, props) dispatch(showModal(props.modalKey, modalProps)),
dispatch(showModal(props.modalKey, modalProps))
},
setModalError: errorMessage => dispatch(setModalError(errorMessage)), setModalError: errorMessage => dispatch(setModalError(errorMessage)),
}) })
......
...@@ -25,6 +25,7 @@ const DashboardCard = ({ ...@@ -25,6 +25,7 @@ const DashboardCard = ({
theme, theme,
currentUser, currentUser,
renderHandlingEditorRow, renderHandlingEditorRow,
canInviteReviewers,
...rest ...rest
}) => { }) => {
const { submitted, title, type } = parseVersion(version) const { submitted, title, type } = parseVersion(version)
...@@ -139,11 +140,13 @@ const DashboardCard = ({ ...@@ -139,11 +140,13 @@ const DashboardCard = ({
<HEText>Handling Editor</HEText> <HEText>Handling Editor</HEText>
{renderHandlingEditorRow()} {renderHandlingEditorRow()}
</LeftDetails> </LeftDetails>
{canInviteReviewers() && (
<InviteReviewers
modalKey={`invite-reviewers-${project.id}`}
project={project}
/>
)}
</Bottom> </Bottom>
<InviteReviewers
modalKey={`invite-reviewers-${project.id}`}
project={project}
/>
</DetailsView> </DetailsView>
)} )}
</Card> </Card>
...@@ -158,6 +161,12 @@ export default compose( ...@@ -158,6 +161,12 @@ export default compose(
modalComponent: ConfirmationModal, modalComponent: ConfirmationModal,
}), }),
withHandlers({ 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 }) => () => { renderHandlingEditorRow: ({ currentUser, project }) => () => {
const status = get(project, 'status') || 'draft' const status = get(project, 'status') || 'draft'
const isAdmin = get(currentUser, 'admin') const isAdmin = get(currentUser, 'admin')
......
...@@ -38,32 +38,28 @@ const InviteReviewersModal = compose( ...@@ -38,32 +38,28 @@ const InviteReviewersModal = compose(
collectionId, collectionId,
reviewers, reviewers,
getReviewers, getReviewers,
}) => { }) => (
console.log('InviteReviewersModal ->', showModal) <Root>
return ( <CloseIcon data-test="icon-modal-hide" onClick={hideModal}>
<Root> <Icon color={theme.colorPrimary}>x</Icon>
<CloseIcon data-test="icon-modal-hide" onClick={hideModal}> </CloseIcon>
<Icon color={theme.colorPrimary}>x</Icon>
</CloseIcon>
<Title>Invite Reviewers</Title> <Title>Invite Reviewers</Title>
<Subtitle>Invite reviewer</Subtitle> <Subtitle>Invite reviewer</Subtitle>
<ReviewerForm collectionId={collectionId} getReviewers={getReviewers} /> <ReviewerForm collectionId={collectionId} getReviewers={getReviewers} />
<Subtitle>Reviewers Info</Subtitle> <Subtitle>Reviewers Info</Subtitle>
<ReviewersList <ReviewersList
collectionId={collectionId} collectionId={collectionId}
reviewers={reviewers} reviewers={reviewers}
showModal={showModal} showModal={showModal}
/> />
</Root> </Root>
) ),
},
) )
const ModalSwitcher = ({ type, ...rest }) => { const ModalSwitcher = ({ type, ...rest }) => {
console.log('modal switcher', type, rest)
switch (type) { switch (type) {
case 'invite-reviewers': case 'invite-reviewers':
return <InviteReviewersModal {...rest} /> return <InviteReviewersModal {...rest} />
......
import React from 'react' import React from 'react'
import moment from 'moment'
import { pick } from 'lodash' import { pick } from 'lodash'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { th, Icon } from '@pubsweet/ui' import { th, Icon } from '@pubsweet/ui'
...@@ -47,14 +48,16 @@ const defaultReviewers = [ ...@@ -47,14 +48,16 @@ const defaultReviewers = [
] ]
const ResendRevoke = withTheme( const ResendRevoke = withTheme(
({ theme, showConfirmResend, showConfirmRevoke }) => ( ({ theme, showConfirmResend, showConfirmRevoke, status }) => (
<ActionButtons> <ActionButtons>
<div onClick={showConfirmResend}> <div onClick={showConfirmResend}>
<Icon color={theme.colorPrimary}>refresh-cw</Icon> <Icon color={theme.colorPrimary}>refresh-cw</Icon>
</div> </div>
<div onClick={showConfirmRevoke}> {status === 'pending' && (
<Icon color={theme.colorPrimary}>x-circle</Icon> <div onClick={showConfirmRevoke}>
</div> <Icon color={theme.colorPrimary}>x-circle</Icon>
</div>
)}
</ActionButtons> </ActionButtons>
), ),
) )
...@@ -63,6 +66,7 @@ const ReviewersList = ({ ...@@ -63,6 +66,7 @@ const ReviewersList = ({
reviewers = defaultReviewers, reviewers = defaultReviewers,
showConfirmResend, showConfirmResend,
showConfirmRevoke, showConfirmRevoke,
renderTimestamp,
}) => ( }) => (
<Root> <Root>
<ScrollContainer> <ScrollContainer>
...@@ -79,12 +83,15 @@ const ReviewersList = ({ ...@@ -79,12 +83,15 @@ const ReviewersList = ({
</Column> </Column>
<Column> <Column>
<StatusText>{r.status}</StatusText> <StatusText>{r.status}</StatusText>
<StatusText>{r.timestamp}</StatusText> <DateText>{renderTimestamp(r.timestamp)}</DateText>
</Column> </Column>
<ResendRevoke {r.status !== 'accepted' && (
showConfirmResend={showConfirmResend(r)} <ResendRevoke
showConfirmRevoke={showConfirmRevoke(r.invitationId)} showConfirmResend={showConfirmResend(r)}
/> showConfirmRevoke={showConfirmRevoke(r.invitationId)}
status={r.status}
/>
)}
</ReviewerItem> </ReviewerItem>
))} ))}
</ScrollContainer> </ScrollContainer>
...@@ -94,6 +101,16 @@ const ReviewersList = ({ ...@@ -94,6 +101,16 @@ const ReviewersList = ({
export default compose( export default compose(
connect(null, { inviteReviewer, revokeReviewer }), connect(null, { inviteReviewer, revokeReviewer }),
withHandlers({ 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 }) => () => { goBackToReviewers: ({ showModal, hideModal, collectionId }) => () => {
showModal({ showModal({
collectionId, collectionId,
...@@ -111,9 +128,9 @@ export default compose( ...@@ -111,9 +128,9 @@ export default compose(
inviteReviewer, inviteReviewer,
collectionId, collectionId,
}) => reviewer => () => { }) => reviewer => () => {
console.log('show confirm resend', showModal)
showModal({ showModal({
title: 'Resend confirmation', title: 'Resend reviewer invite',
confirmText: 'Resend',
onConfirm: () => { onConfirm: () => {
inviteReviewer( inviteReviewer(
pick(reviewer, ['email', 'firstName', 'lastName', 'affiliation']), pick(reviewer, ['email', 'firstName', 'lastName', 'affiliation']),
...@@ -131,7 +148,8 @@ export default compose( ...@@ -131,7 +148,8 @@ export default compose(
collectionId, collectionId,
}) => invitationId => () => { }) => invitationId => () => {
showModal({ showModal({
title: 'Revoke confirmation', title: 'Unassign Reviewer',
confirmText: 'Unassign',
onConfirm: () => { onConfirm: () => {
revokeReviewer(invitationId, collectionId).then( revokeReviewer(invitationId, collectionId).then(
goBackToReviewers, goBackToReviewers,
...@@ -161,7 +179,11 @@ const AcceptedReviewer = ReviewerEmail.extend` ...@@ -161,7 +179,11 @@ const AcceptedReviewer = ReviewerEmail.extend`
margin-left: ${th('subGridUnit')}; margin-left: ${th('subGridUnit')};
` `
const StatusText = ReviewerEmail.extend`` const StatusText = ReviewerEmail.extend`
text-transform: uppercase;
`
const DateText = ReviewerEmail.extend``
const Column = styled.div` const Column = styled.div`
align-items: flex-start; align-items: flex-start;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment