import React, { Fragment } from 'react' import styled from 'styled-components' import { isEmpty, get, last } from 'lodash' import { Text, paddingHelper, ReviewerDetails, HERecommendation, ManuscriptHeader, ManuscriptAssignHE, ManuscriptMetadata, ManuscriptDetailsTop, ResponseToInvitation, ManuscriptEicDecision, } from 'pubsweet-component-faraday-ui' import ReviewerReportCard from './ReviewReportCard' import ReviewerReportForm from './ReviewerReportForm' import EditorialCommentCard from './EditorialCommentCard' const eicDecisions = [ { value: 'return-to-handling-editor', label: 'Return to Handling Editor' }, { value: 'publish', label: 'Publish' }, { value: 'reject', label: 'Reject' }, ] const messagesLabel = { 'return-to-handling-editor': 'Comments for Handling Editor', publish: 'Comments for Author', reject: 'Comments for Author', } const ManuscriptLayout = ({ history, assignHE, revokeHE, currentUser, getSignedUrl, editorInChief, handlingEditors, createRecommendation, editorialRecommendations, journal = {}, collection = {}, fragment = {}, changeForm, isFetching, formValues, heExpanded, onHEResponse, toggleAssignHE, onInviteReviewer, toggleHEResponse, heResponseExpanded, onReviewerResponse, onResendReviewerInvite, onRevokeReviewerInvite, toggleReviewerResponse, invitationsWithReviewers, reviewerResponseExpanded, pendingOwnRecommendation, toggleReviewerRecommendations, reviewerRecommendationExpanded, shouldReview, submittedOwnRecommendation, heAccepted, reviewerReports, onEditorialRecommendation, reviewerRecommendations, toggleReviewerDetails, reviewerDetailsExpanded, }) => ( <Root pb={30}> {!isEmpty(collection) && !isEmpty(fragment) ? ( <Fragment> <ManuscriptDetailsTop collection={collection} currentUser={currentUser} fragment={fragment} getSignedUrl={getSignedUrl} history={history} /> <ManuscriptHeader collection={collection} currentUser={currentUser} editorInChief={editorInChief} fragment={fragment} handlingEditors={handlingEditors} inviteHE={toggleAssignHE} isFetching={isFetching.editorsFetching} journal={journal} resendInvitation={assignHE} revokeInvitation={revokeHE} /> <ManuscriptMetadata currentUser={currentUser} fragment={fragment} getSignedUrl={getSignedUrl} /> {get(currentUser, 'permissions.canViewReports', true) && !!editorialRecommendations.length && ( <EditorialCommentCard journal={journal} reports={editorialRecommendations} /> )} {submittedOwnRecommendation && ( <ReviewerReportCard getSignedUrl={getSignedUrl} journal={journal} report={submittedOwnRecommendation} token={get(currentUser, 'token')} /> )} {shouldReview && ( <ReviewerReportForm changeForm={changeForm} expanded={reviewerRecommendationExpanded} formValues={get(formValues, 'reviewerReport', {})} modalKey="reviewer-report" project={collection} review={pendingOwnRecommendation} toggle={toggleReviewerRecommendations} token={get(currentUser, 'token')} version={fragment} /> )} {get(currentUser, 'isInvitedHE', false) && ( <ResponseToInvitation commentsOn="decline" expanded={heResponseExpanded} formValues={formValues.responseToInvitation} label="Do you agree to be the handling editor for this manuscript?" onResponse={onHEResponse} title="Respond to Editorial Invitation" toggle={toggleHEResponse} /> )} {get(currentUser, 'isInvitedToReview', false) && ( <ResponseToInvitation expanded={reviewerResponseExpanded} label="Do you agree to review this manuscript?" onResponse={onReviewerResponse} title="Respond to Invitation to Review" toggle={toggleReviewerResponse} /> )} <ManuscriptAssignHE assignHE={assignHE} currentUser={currentUser} expanded={heExpanded} handlingEditors={handlingEditors} isFetching={isFetching.editorsFetching} toggle={toggleAssignHE} /> {get(currentUser, 'permissions.canMakeDecision', false) && ( <ManuscriptEicDecision formValues={get(formValues, 'eicDecision')} messagesLabel={messagesLabel} mt={2} options={ get(collection, 'status', 'submitted') === 'submitted' ? [last(eicDecisions)] : eicDecisions } submitDecision={createRecommendation} /> )} {get(currentUser, 'permissions.canMakeHERecommendation', false) && ( <HERecommendation formValues={get(formValues, 'editorialRecommendation', {})} hasReviewerReports={reviewerRecommendations.length > 0} modalKey="heRecommendation" onRecommendationSubmit={onEditorialRecommendation} /> )} {get(currentUser, 'permissions.canViewReviewersDetails', false) && ( <ReviewerDetails currentUser={currentUser} expanded={reviewerDetailsExpanded} fragment={fragment} getSignedUrl={getSignedUrl} invitations={invitationsWithReviewers} journal={journal} mt={2} onInviteReviewer={onInviteReviewer} onResendReviewerInvite={onResendReviewerInvite} onRevokeReviewerInvite={onRevokeReviewerInvite} reviewerReports={reviewerReports} toggle={toggleReviewerDetails} /> )} </Fragment> ) : ( <Text>Loading...</Text> )} </Root> ) export default ManuscriptLayout // #region styles const Root = styled.div` overflow-y: visible; min-height: 70vh; ${paddingHelper}; ` // #endregion