diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 0b9b1ab4d1a1b56a7e0753fb96eb1db46d2ae11b..6e1c18975f59a435cf3ae86e109456ba78b6ed3b 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -16,7 +16,7 @@ const canMakeRecommendationStatuses = [ export const canMakeRecommendation = (state, collection, fragment = {}) => { if (fragment.id !== last(collection.fragments)) return false const isHE = isHEToManuscript(state, collection.id) - const status = get(collection, 'status') + const status = get(collection, 'status', 'draft') return isHE && canMakeRecommendationStatuses.includes(status) } @@ -74,7 +74,7 @@ export const getHERecommendation = (state, collectionId, fragmentId) => { const canMakeDecisionStatuses = ['submitted', 'pendingApproval'] export const canMakeDecision = (state, collection, fragment = {}) => { if (fragment.id !== last(collection.fragments)) return false - const status = get(collection, 'status') + const status = get(collection, 'status', 'draft') const isEIC = currentUserIs(state, 'adminEiC') return isEIC && canMakeDecisionStatuses.includes(status) @@ -84,7 +84,7 @@ const canEditManuscriptStatuses = ['draft', 'technicalChecks', 'inQA'] export const canEditManuscript = (state, collection, fragment = {}) => { const isAdmin = currentUserIs(state, 'isAdmin') if (!isAdmin || fragment.id !== last(collection.fragments)) return false - const status = get(collection, 'status') + const status = get(collection, 'status', 'draft') return canEditManuscriptStatuses.includes(status) } @@ -93,7 +93,7 @@ const canOverrideTechnicalChecksStatuses = ['technicalChecks', 'inQA'] export const canOverrideTechnicalChecks = (state, collection) => { const isAdmin = currentUserIs(state, 'isAdmin') if (!isAdmin) return false - const status = get(collection, 'status') + const status = get(collection, 'status', 'draft') return canOverrideTechnicalChecksStatuses.includes(status) } diff --git a/packages/component-faraday-ui/src/ManuscriptDetailsTop.js b/packages/component-faraday-ui/src/ManuscriptDetailsTop.js deleted file mode 100644 index beb249fab4ffb295d9d9cf8c7530c255981a1897..0000000000000000000000000000000000000000 --- a/packages/component-faraday-ui/src/ManuscriptDetailsTop.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' -import { get } from 'lodash' -import { - Row, - Item, - Text, - ActionLink, - IconButton, - DownloadZipFiles, - PreviewFile, - ManuscriptVersion, -} from 'pubsweet-component-faraday-ui' -import { DateParser } from '@pubsweet/ui' - -const ManuscriptDetailsTop = ({ - history, - getSignedUrl, - collection = {}, - fragment = {}, -}) => ( - <Row alignItems="center" mb={1}> - <Item justify="flex-start"> - <ActionLink icon="arrow-left" onClick={() => history.push('/')}> - Dashboard - </ActionLink> - </Item> - <Item justify="flex-end"> - <PreviewFile - file={get(fragment, 'files.manuscripts[0]', {})} - getSignedUrl={getSignedUrl} - /> - <DownloadZipFiles - archiveName={`ID-${collection.customId}`} - collectionId={collection.id} - fragmentId={fragment.id} - > - <IconButton icon="download" iconSize={2} mr={3} secondary /> - </DownloadZipFiles> - <DateParser durationThreshold={0} timestamp={fragment.submitted || ''}> - {timestamp => <Text mr={1}>Updated on {timestamp}</Text>} - </DateParser> - <ManuscriptVersion collection={collection} fragment={fragment} /> - </Item> - </Row> -) - -export default ManuscriptDetailsTop diff --git a/packages/component-faraday-ui/src/gridItems/Item.js b/packages/component-faraday-ui/src/gridItems/Item.js index 282ec34e78496dc3e5296fb1039c4a8bf9792ff6..b289d76c7d788765aa18763dd635ef0c2cde5f8d 100644 --- a/packages/component-faraday-ui/src/gridItems/Item.js +++ b/packages/component-faraday-ui/src/gridItems/Item.js @@ -11,7 +11,7 @@ export default styled.div.attrs({ flex: ${({ flex }) => (isNumber(flex) ? flex : 1)}; flex-direction: ${({ vertical }) => (vertical ? 'column' : 'row')}; justify-content: ${({ justify }) => justify || 'initial'}; - align-items: ${({ alignItems }) => alignItems || 'center'}; + align-items: ${({ alignItems }) => alignItems || 'initial'}; ${marginHelper}; ` diff --git a/packages/component-faraday-ui/src/index.js b/packages/component-faraday-ui/src/index.js index a8aafac48494030749f72d2e58619cf3108deb46..e2c492c80004fe712913042d4e91c7a4a84fd282 100644 --- a/packages/component-faraday-ui/src/index.js +++ b/packages/component-faraday-ui/src/index.js @@ -23,10 +23,10 @@ export { default as WizardAuthors } from './WizardAuthors' export { default as WizardFiles } from './WizardFiles' export { default as PreviewFile } from './PreviewFile' export { default as DownloadZipFiles } from './DownloadZipFiles' +export { default as ManuscriptVersion } from './ManuscriptVersion' // Manuscript Details -export { default as ManuscriptVersion } from './ManuscriptVersion' -export { default as ManuscriptDetailsTop } from './ManuscriptDetailsTop' +export * from './manuscriptDetails' export * from './styledHelpers' diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js new file mode 100644 index 0000000000000000000000000000000000000000..5ffa60c3dbc7dc64255862afefaab56ab1227258 --- /dev/null +++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js @@ -0,0 +1,114 @@ +import React from 'react' +import { get } from 'lodash' +import { connect } from 'react-redux' +import { DateParser } from '@pubsweet/ui' +import { withRouter } from 'react-router-dom' +import { compose, withHandlers } from 'recompose' +import { + canMakeDecision, + canMakeRecommendation, + canEditManuscript, + canOverrideTechnicalChecks, +} from 'pubsweet-component-faraday-selectors/src' + +import { + Row, + Item, + Text, + ActionLink, + IconButton, + DownloadZipFiles, + PreviewFile, + ManuscriptVersion, +} from 'pubsweet-component-faraday-ui' + +const ManuscriptDetailsTop = ({ + history, + getSignedUrl, + collection = {}, + fragment = {}, + goToEdit, + canEditManuscript, + goToTechnicalCheck, + canOverrideTechChecks, +}) => ( + <Row alignItems="center" mb={1}> + <Item alignItems="center" justify="flex-start"> + <ActionLink icon="arrow-left" onClick={() => history.push('/')}> + Dashboard + </ActionLink> + </Item> + <Item alignItems="center" justify="flex-end"> + {canOverrideTechChecks && ( + <IconButton + data-test-id={`button-qa-manuscript-${fragment.id}`} + icon="check-square" + iconSize={2} + mr={1} + onClick={goToTechnicalCheck(collection)} + secondary + title="Technical Checks" + /> + )} + {canEditManuscript && ( + <IconButton + data-test-id={`button-edit-manuscript-${fragment.id}`} + icon="edit" + iconSize={2} + mr={2} + onClick={goToEdit(collection, fragment)} + secondary + title="Edit Manuscript" + /> + )} + <PreviewFile + file={get(fragment, 'files.manuscripts[0]', {})} + getSignedUrl={getSignedUrl} + /> + <DownloadZipFiles + archiveName={`ID-${collection.customId}`} + collectionId={collection.id} + fragmentId={fragment.id} + > + <IconButton icon="download" iconSize={2} mr={3} secondary /> + </DownloadZipFiles> + <DateParser durationThreshold={0} timestamp={fragment.submitted || ''}> + {timestamp => <Text mr={1}>Updated on {timestamp}</Text>} + </DateParser> + <ManuscriptVersion collection={collection} fragment={fragment} /> + </Item> + </Row> +) + +export default compose( + withRouter, + connect((state, { collection, fragment }) => ({ + canMakeDecision: canMakeDecision(state, collection, fragment), + canMakeRecommendation: canMakeRecommendation(state, collection, fragment), + canEditManuscript: canEditManuscript(state, collection, fragment), + canOverrideTechChecks: canOverrideTechnicalChecks(state, collection), + })), + withHandlers({ + goToEdit: ({ history }) => (collection, fragment) => () => { + history.push( + `/projects/${collection.id}/versions/${fragment.id}/submit`, + { + editMode: true, + }, + ) + }, + goToTechnicalCheck: ({ history }) => collection => () => { + const { + status, + id, + customId, + technicalChecks: { token = '' }, + } = collection + const stage = status === 'technicalChecks' ? 'eqs' : 'eqa' + history.push({ + pathname: `/${stage}-decision`, + search: `?collectionId=${id}&customId=${customId}&token=${token}`, + }) + }, + }), +)(ManuscriptDetailsTop) diff --git a/packages/component-faraday-ui/src/ManuscriptDetailsTop.md b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.md similarity index 100% rename from packages/component-faraday-ui/src/ManuscriptDetailsTop.md rename to packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.md diff --git a/packages/component-faraday-ui/src/manuscriptDetails/index.js b/packages/component-faraday-ui/src/manuscriptDetails/index.js new file mode 100644 index 0000000000000000000000000000000000000000..624245e73e1a08239472c700fb5436d94eb8d8f7 --- /dev/null +++ b/packages/component-faraday-ui/src/manuscriptDetails/index.js @@ -0,0 +1 @@ +export { default as ManuscriptDetailsTop } from './ManuscriptDetailsTop' diff --git a/packages/components-faraday/src/components/index.js b/packages/components-faraday/src/components/index.js index fc041eee217e057b7d9fc089069fdd4181f0d893..eb71acbe38555f901d46dc242c1e83b45b384ee6 100644 --- a/packages/components-faraday/src/components/index.js +++ b/packages/components-faraday/src/components/index.js @@ -1,6 +1,5 @@ import { Decision } from './MakeDecision' import * as Components from './UIComponents' -import { Recommendation } from './MakeRecommendation' export { FormItems } from './UIComponents' export { default as withVersion } from './Dashboard/withVersion.js' @@ -9,5 +8,4 @@ export { default as ChangePasswordPage } from './UserProfile/ChangePasswordPage' export { Decision } export { Components } -export { Recommendation } export { DateParser } from './UIComponents' diff --git a/packages/styleguide/styleguide.config.js b/packages/styleguide/styleguide.config.js index c53042e291fd363295cd38a85d44141fa8cb0be1..859cc8debcf6bf80d6ba3f96ab1f523c633d4452 100644 --- a/packages/styleguide/styleguide.config.js +++ b/packages/styleguide/styleguide.config.js @@ -17,6 +17,11 @@ module.exports = { sectionDepth: 1, components: ['../component-faraday-ui/src/gridItems/[A-Z]*.js'], }, + { + name: 'Manuscript Details', + sectionDepth: 1, + components: ['../component-faraday-ui/src/manuscriptDetails/[A-Z]*.js'], + }, ], skipComponentsWithoutExample: true, pagePerSection: true,