diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 277860ce91040a4793ecca2054db30e56c09bdfc..adffec4aefe2ad44100423497bc6a8acc6fd21fa 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -59,8 +59,23 @@ export const getHERecommendation = (state, collectionId, fragmentId) => { export const canMakeDecision = (state, collection) => { const status = get(collection, 'status') - if (!status || status === 'rejected') return false + if (!status || status === 'rejected' || status === 'published') return false const isEIC = currentUserIs(state, 'adminEiC') return isEIC && status } + +const editorialStatuses = [ + 'rejected', + 'published', + 'pendingApproval', + 'revisionRequested', +] + +export const canSeeEditorialComments = (state, collectionId) => { + const collection = state.collections.find(c => c.id === collectionId) + const isStaff = currentUserIs(state, 'staff') + if (!isStaff) return false + if (!editorialStatuses.includes(collection.status)) return false + return true +} diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js index 22a30f30ba801668a28205b819c60c136575fae4..e807da9675123c86d5f897df8c54846ec5139677 100644 --- a/packages/component-manuscript/src/components/ManuscriptPage.js +++ b/packages/component-manuscript/src/components/ManuscriptPage.js @@ -28,6 +28,7 @@ import { import ManuscriptLayout from './ManuscriptLayout' import { parseSearchParams, redirectToError } from './utils' +import { canSeeEditorialComments } from '../../../component-faraday-selectors' export default compose( setDisplayName('ManuscriptPage'), @@ -48,6 +49,10 @@ export default compose( version: selectFragment(state, match.params.version), project: selectCollection(state, match.params.project), editorialRecommendations: selectEditorialRecommendations(state), + canSeeEditorialComments: canSeeEditorialComments( + state, + match.params.project, + ), }), { replace, diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js index 5b7fa5a43bd670979268afedf48de276dce39c3a..8022eea61cba058d8924d326b3962bb040df35bd 100644 --- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js +++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js @@ -102,10 +102,13 @@ const DashboardCard = ({ <Bottom> <LeftDetails flex={3}> <Status>{mapStatusToLabel(project)}</Status> - <DateParser timestamp={get(version, 'submitted')}> + <DateParser + durationThreshold={0} + timestamp={get(version, 'submitted')} + > {(timestamp, daysAgo) => ( <DateField> - {timestamp} ({daysAgo}) + {timestamp} ({daysAgo} ago) </DateField> )} </DateParser> diff --git a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js index 8dfad00eeb82e02604cbb60fb805c42b87fd5e54..3b69d0fb2a5563e425abeaf9cdd985fc910d6105 100644 --- a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js +++ b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js @@ -52,7 +52,7 @@ const TR = ({ </DateParser> <td> <StatusText> - {`${r.status === 'accepted' ? 'Agreed: ' : r.status}`} + {`${r.status === 'accepted' ? 'Agreed: ' : `${r.status}: `}`} </StatusText> <DateParser timestamp={r.respondedOn}> {timestamp => <DateText>{timestamp}</DateText>} diff --git a/packages/components-faraday/src/components/UIComponents/DateParser.js b/packages/components-faraday/src/components/UIComponents/DateParser.js index 5ff1623f3983cb4b2d603f21c6eac96d15139be2..b883807368f6e6e767ea39e1ca57853c987722a4 100644 --- a/packages/components-faraday/src/components/UIComponents/DateParser.js +++ b/packages/components-faraday/src/components/UIComponents/DateParser.js @@ -1,5 +1,6 @@ import moment from 'moment' import { compose, withProps, withHandlers } from 'recompose' +import { string, instanceOf, number, oneOfType } from 'prop-types' const getDuration = timestamp => { const today = moment() @@ -7,17 +8,20 @@ const getDuration = timestamp => { return moment.duration(today.diff(stamp)) } -const DateParser = ({ children, timestamp, daysAgo }) => - children(timestamp, daysAgo) +const D = ({ children, timestamp, daysAgo }) => children(timestamp, daysAgo) -export default compose( +const DateParser = compose( withHandlers({ - renderTimestamp: ({ timestamp, dateFormat = 'DD.MM.YYYY' }) => () => { + renderTimestamp: ({ + timestamp, + durationThreshold = 1, + dateFormat = 'DD.MM.YYYY', + }) => () => { if (!timestamp) return '' const duration = getDuration(timestamp) - if (duration.asDays() < 1) { - return `${duration.humanize()}` + if (duration.asDays() < durationThreshold) { + return `${duration.humanize()} ago` } return moment(timestamp).format(dateFormat) }, @@ -31,4 +35,12 @@ export default compose( daysAgo: renderDaysAgo(), timestamp: renderTimestamp(), })), -)(DateParser) +)(D) + +DateParser.propTypes = { + dateFormat: string, + durationThreshold: number, + timestamp: oneOfType([string, number, instanceOf(Date)]), +} + +export default DateParser diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js index 88f4b83d333383179fffa23d9403a76e319c2502..948dd93e25476745ef93e4db143ff99f79ff8cec 100644 --- a/packages/xpub-faraday/config/authsome-mode.js +++ b/packages/xpub-faraday/config/authsome-mode.js @@ -244,7 +244,7 @@ const authsomeMode = async (userId, operation, object, context) => { const user = await context.models.User.find(userId) // Admins and editor in chiefs can do anything - if (user && (user.admin === true || user.editorInChief === true)) return true + if (user && (user.admin || user.editorInChief)) return true if (user) { return authenticatedUser(user, operation, object, context)