diff --git a/packages/component-manuscript/src/components/ManuscriptHeader.js b/packages/component-manuscript/src/components/ManuscriptHeader.js index caa38eb70f31265b39428a8227d36c032f68fd46..19735221355a3c92462c483faba1513c812d4403 100644 --- a/packages/component-manuscript/src/components/ManuscriptHeader.js +++ b/packages/component-manuscript/src/components/ManuscriptHeader.js @@ -30,10 +30,13 @@ const ManuscriptDetails = ({ version, project, journal }) => { <Row> <LeftDetails flex={3}> <StatusLabel>{mapStatusToLabel(project)}</StatusLabel> - <DateParser timestamp={get(version, 'submitted')}> + <DateParser + durationThreshold={0} + timestamp={get(version, 'submitted')} + > {(timestamp, days) => ( <DateField> - {timestamp} ({days}) + {timestamp} ({days} ago) </DateField> )} </DateParser> diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js index 649d4119022c0bffd507300f7bb8868c3267933d..d61e01938d49d3bf22592247899c1b5f7d6af9cc 100644 --- a/packages/component-manuscript/src/components/ReviewerReportForm.js +++ b/packages/component-manuscript/src/components/ReviewerReportForm.js @@ -34,12 +34,11 @@ import { FilePicker, } from 'pubsweet-components-faraday/src/components/Files' -import { FormItems } from 'pubsweet-components-faraday/src/components/UIComponents' - import { withModal, ConfirmationModal, } from 'pubsweet-component-modal/src/components' + import { selectError, selectFetching, @@ -53,7 +52,6 @@ import { parseReviewResponseToForm, } from './utils' -const { CustomValidatedField } = FormItems const guidelinesLink = 'https://about.hindawi.com/authors/peer-review-at-hindawi/' @@ -97,6 +95,7 @@ const ReviewerReportForm = ({ /> </Row> <Spacing /> + <Spacing /> <Row left> <Label>Report</Label> {!fileFetching.review ? ( @@ -116,30 +115,32 @@ const ReviewerReportForm = ({ </Row> <Row> <FullWidth> - <CustomValidatedField> - <ValidatedField - component={TextAreaField} - name="public" - validate={isEmpty(formValues.files) ? [required] : []} - /> - </CustomValidatedField> + <ValidatedField + component={TextAreaField} + name="public" + validate={isEmpty(formValues.files) ? [required] : []} + /> </FullWidth> </Row> {formValues.files && ( - <Row left> - {formValues.files.map(file => ( - <FileItem - compact - id={file.id} - key={file.id} - {...file} - removeFile={removeFile} - /> - ))} - </Row> + <Fragment> + <Spacing /> + <Row left> + {formValues.files.map(file => ( + <FileItem + compact + id={file.id} + key={file.id} + {...file} + removeFile={removeFile} + /> + ))} + </Row> + </Fragment> )} {formValues.hasConfidential ? ( <Fragment> + <Spacing /> <Row> <Label> Note for the editorial team <i>Not shared with the author</i> @@ -153,13 +154,11 @@ const ReviewerReportForm = ({ </Row> <Row> <FullWidth> - <CustomValidatedField> - <ValidatedField - component={TextAreaField} - name="confidential" - validate={[required]} - /> - </CustomValidatedField> + <ValidatedField + component={TextAreaField} + name="confidential" + validate={[required]} + /> </FullWidth> </Row> </Fragment> diff --git a/packages/component-modal/src/components/withModal.js b/packages/component-modal/src/components/withModal.js index 18f16ebcb917ffc7242b4242c6676fb8a127c771..35bb923623393be380a2af970af01ada1733a88e 100644 --- a/packages/component-modal/src/components/withModal.js +++ b/packages/component-modal/src/components/withModal.js @@ -23,12 +23,13 @@ const withModal = mapperFn => BaseComponent => compose(connect(mapState, mapDispatch))(baseProps => { const { modalComponent: Component, overlayColor } = mapperFn(baseProps) const { + modalKey, + showModal, hideModal, modalProps, modalError, + setModalError, modalsVisibility, - modalKey, - showModal, ...rest } = baseProps return ( diff --git a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js index eb201ac3b5ed9a70ff97f57f435f8710d1b37bd2..31422da54264f232d1cf04b0f3f4ecb5034c5f80 100644 --- a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js +++ b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js @@ -6,7 +6,7 @@ import { compose } from 'recompose' import { connect } from 'react-redux' import styled from 'styled-components' import { actions } from 'pubsweet-client' -import { th, Icon, Spinner } from '@pubsweet/ui' +import { th, Icon, ErrorText, Spinner } from '@pubsweet/ui' import { selectFetching, @@ -61,7 +61,7 @@ class AssignHEModal extends React.Component { render() { const { searchInput } = this.state - const { editors, hideModal, isFetching } = this.props + const { editors, hideModal, isFetching, modalError } = this.props const filteredEditors = this.filterEditors(editors) return ( <RootModal> @@ -105,6 +105,7 @@ class AssignHEModal extends React.Component { ))} </ModalContent> </ScrollContainer> + <CustomError>{modalError}</CustomError> </RootModal> ) } @@ -125,6 +126,11 @@ export default compose( )(AssignHEModal) // #region styled-components +const CustomError = ErrorText.extend` + font-family: ${th('fontReading')}; + margin: ${th('subGridUnit')} 0; +` + const SubtitleRow = styled.div` display: flex; justify-content: space-between; diff --git a/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js b/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js index 82907e31d9d00c1fa355324265aaa4bf4b110b61..380e50fc3f4e0b23a723884097a956f2efc694d3 100644 --- a/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js +++ b/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js @@ -28,10 +28,10 @@ const DeclineModal = compose( value={reason} /> <div data-test="he-buttons"> - <Button onClick={hideModal}>Cancel</Button> - <Button onClick={onConfirm(reason)} primary> + <DecisionButton onClick={hideModal}>Cancel</DecisionButton> + <DecisionButton onClick={onConfirm(reason)} primary> Decline - </Button> + </DecisionButton> </div> </DeclineRoot> )) @@ -119,6 +119,8 @@ const DecisionButton = styled(Button)` background-color: ${({ primary }) => primary ? th('colorPrimary') : th('backgroundColorReverse')}; height: calc(${th('subGridUnit')} * 5); + margin-left: ${th('gridUnit')}; + padding: 0; text-align: center; ` @@ -158,7 +160,5 @@ const DeclineRoot = styled.div` } ` -const Root = styled.div` - margin-left: ${th('gridUnit')}; -` +const Root = styled.div`` // #endregion diff --git a/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js b/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js index 6dece3361cd054c3615dd6df96e0be77ae086e92..7037dbebfdfebb3884315b8f9fb030920100eb61 100644 --- a/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js +++ b/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js @@ -97,6 +97,8 @@ const DecisionButton = styled(Button)` color: ${({ primary }) => primary ? th('colorTextReverse') : th('colorPrimary')}); height: calc(${th('subGridUnit')} * 5); + margin-left: ${th('gridUnit')}; + padding: 0; text-align: center; ` // #endregion diff --git a/packages/components-faraday/src/components/MakeDecision/DecisionForm.js b/packages/components-faraday/src/components/MakeDecision/DecisionForm.js index ad282d0f6068fb6965ddafad30ec70d080d722e5..3e0d8958388f13599cf12488f898e101b9f6745e 100644 --- a/packages/components-faraday/src/components/MakeDecision/DecisionForm.js +++ b/packages/components-faraday/src/components/MakeDecision/DecisionForm.js @@ -142,6 +142,7 @@ export default compose( dispatch, { showModal, + hideModal, fragmentId, collectionId, getCollections, @@ -150,8 +151,11 @@ export default compose( ) => { const recommendation = parseFormValues(values) createRecommendation(collectionId, fragmentId, recommendation).then(r => { - getCollections() showModal({ + onCancel: () => { + getCollections() + hideModal() + }, title: 'Decision submitted', cancelText: 'OK', }) diff --git a/packages/components-faraday/src/components/Reviewers/ReviewerForm.js b/packages/components-faraday/src/components/Reviewers/ReviewerForm.js index 465ed9dcb2ae9e3c37e138ca3f8e3fee5aefc84a..0a26dbfc5feb7a55a1fd1c4572af780ea6912a56 100644 --- a/packages/components-faraday/src/components/Reviewers/ReviewerForm.js +++ b/packages/components-faraday/src/components/Reviewers/ReviewerForm.js @@ -96,6 +96,7 @@ export default compose( const FormButton = styled(Button)` height: calc(${th('subGridUnit')} * 5); margin: ${th('subGridUnit')}; + padding: 0; ` const Err = styled.span` diff --git a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js index b9cb3ea8d8832a43d6e14f8ac172f5b8a84e6fc2..b24ca003545996abc6a5b6859e3218842601e13b 100644 --- a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js +++ b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js @@ -54,9 +54,11 @@ const TR = ({ <StatusText> {`${r.status === 'accepted' ? 'Agreed' : r.status}`} </StatusText> - <DateParser timestamp={r.respondedOn}> - {timestamp => <DateText>{`: ${timestamp}`}</DateText>} - </DateParser> + {r.respondedOn && ( + <DateParser timestamp={r.respondedOn}> + {timestamp => <DateText>{`: ${timestamp}`}</DateText>} + </DateParser> + )} </td> <DateParser timestamp={submittedOn}> {timestamp => <td>{timestamp}</td>} diff --git a/packages/components-faraday/src/redux/editors.js b/packages/components-faraday/src/redux/editors.js index 63cb3b837d2b43150e4487bcc0cb65fd60327e9d..34f1423cc9a8757350d1bdbd850411b20b65b161 100644 --- a/packages/components-faraday/src/redux/editors.js +++ b/packages/components-faraday/src/redux/editors.js @@ -38,7 +38,7 @@ export const assignHandlingEditor = (email, collectionId) => dispatch => { }, err => { dispatch(editorsDone()) - return err + throw err }, ) } diff --git a/packages/components-faraday/src/redux/recommendations.js b/packages/components-faraday/src/redux/recommendations.js index a85e13f8c34818166263789e08c10df7d76ff3be..3314f901decb5254b8c5d943163c7b3dbd3517d7 100644 --- a/packages/components-faraday/src/redux/recommendations.js +++ b/packages/components-faraday/src/redux/recommendations.js @@ -21,9 +21,9 @@ export const recommendationsError = error => ({ error, }) -export const getRecommendationsSuccess = recommendations => ({ +export const getRecommendationsSuccess = recommendation => ({ type: GET_RECOMMENDATIONS_SUCCESS, - payload: { recommendations }, + payload: { recommendation }, }) export const createRecommendationSuccess = recommendation => ({ @@ -61,7 +61,7 @@ export const createRecommendation = ( recommendation, ).then( r => { - dispatch(getRecommendationsSuccess([r])) + dispatch(getRecommendationsSuccess(r)) return r }, err => { @@ -88,7 +88,7 @@ export const updateRecommendation = ( recommendation, ).then( r => { - dispatch(getRecommendationsSuccess([r])) + dispatch(getRecommendationsSuccess(r)) return r }, err => { @@ -97,6 +97,7 @@ export const updateRecommendation = ( const errorMessage = get(JSON.parse(error), 'error') dispatch(recommendationsError(errorMessage)) } + throw err }, ) } @@ -134,7 +135,9 @@ export default (state = initialState, action = {}) => { ...state, fetching: false, error: null, - recommendations: action.payload.recommendations, + recommendations: state.recommendations + ? [...state.recommendations, action.payload.recommendation] + : action.payload.recommendation, } case UPDATE_RECOMMENDATION_SUCCESS: case CREATE_RECOMMENDATION_SUCCESS: