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

feat(invite-reviewers): integrate with new endpoints

parent 348d9f30
No related branches found
No related tags found
No related merge requests found
import React from 'react' import React from 'react'
import { Icon, Button, th } from '@pubsweet/ui' import { Icon, Button, th } from '@pubsweet/ui'
import { compose, withHandlers } from 'recompose'
import styled, { css, withTheme } from 'styled-components' import styled, { css, withTheme } from 'styled-components'
import { compose, withHandlers, lifecycle, withState } from 'recompose'
import { import {
withModal, withModal,
ConfirmationModal, ConfirmationModal,
} from 'pubsweet-component-modal/src/components' } from 'pubsweet-component-modal/src/components'
import { ReviewerForm, ReviewersList } from './' import { ReviewerForm, ReviewersList } from './'
import { getCollectionUsers } from '../../redux/reviewers'
const InviteReviewers = ({ showInviteModal }) => ( const InviteReviewers = ({ showInviteModal }) => (
<AssignButton onClick={showInviteModal}>Invite reviewers</AssignButton> <AssignButton onClick={showInviteModal}>Invite reviewers</AssignButton>
) )
const InviteReviewersModal = withTheme( const InviteReviewersModal = compose(
({ theme, hideModal, onConfirm, showModal, collectionId }) => ( withTheme,
withState('fetching', 'setFetching', false),
withState('reviewers', 'setReviewers', []),
withHandlers({
getReviewers: ({ collectionId, setReviewers }) => () => {
getCollectionUsers(collectionId).then(setReviewers)
},
}),
lifecycle({
componentDidMount() {
const { getReviewers } = this.props
getReviewers()
},
}),
)(
({
theme,
hideModal,
onConfirm,
showModal,
collectionId,
reviewers,
getReviewers,
}) => (
<Root> <Root>
<CloseIcon data-test="icon-modal-hide" onClick={hideModal}> <CloseIcon data-test="icon-modal-hide" onClick={hideModal}>
<Icon color={theme.colorPrimary}>x</Icon> <Icon color={theme.colorPrimary}>x</Icon>
...@@ -23,10 +47,14 @@ const InviteReviewersModal = withTheme( ...@@ -23,10 +47,14 @@ const InviteReviewersModal = withTheme(
<Title>Invite Reviewers</Title> <Title>Invite Reviewers</Title>
<Subtitle>Invite reviewer</Subtitle> <Subtitle>Invite reviewer</Subtitle>
<ReviewerForm collectionId={collectionId} /> <ReviewerForm collectionId={collectionId} getReviewers={getReviewers} />
<Subtitle>Reviewers Info</Subtitle> <Subtitle>Reviewers Info</Subtitle>
<ReviewersList collectionId={collectionId} showModal={showModal} /> <ReviewersList
collectionId={collectionId}
reviewers={reviewers}
showModal={showModal}
/>
</Root> </Root>
), ),
) )
...@@ -46,10 +74,11 @@ export default compose( ...@@ -46,10 +74,11 @@ export default compose(
modalComponent: ModalSwitcher, modalComponent: ModalSwitcher,
}), }),
withHandlers({ withHandlers({
showInviteModal: ({ showModal, hideModal, project }) => () => { showInviteModal: ({ showModal, hideModal, project, reviewers }) => () => {
showModal({ showModal({
type: 'invite-reviewers', type: 'invite-reviewers',
collectionId: project.id, collectionId: project.id,
reviewers,
onConfirm: () => { onConfirm: () => {
hideModal() hideModal()
}, },
......
...@@ -3,11 +3,11 @@ import { get, pick } from 'lodash' ...@@ -3,11 +3,11 @@ import { get, pick } from 'lodash'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import styled from 'styled-components' import styled from 'styled-components'
import { th, Button } from '@pubsweet/ui' import { th, Button } from '@pubsweet/ui'
import { compose, withHandlers, lifecycle } from 'recompose' import { compose, withHandlers } from 'recompose'
import { reduxForm, change as changeForm, initialize } from 'redux-form' import { reduxForm, change as changeForm, initialize } from 'redux-form'
import { ReviewersSelect } from './' import { ReviewersSelect } from './'
import { inviteReviewer, getCollectionUsers } from '../../redux/reviewers' import { inviteReviewer } from '../../redux/reviewers'
import { ValidatedTextField } from '../AuthorList/FormItems' import { ValidatedTextField } from '../AuthorList/FormItems'
const ReviewerForm = ({ clearForm, selectReviewer, handleSubmit, users }) => ( const ReviewerForm = ({ clearForm, selectReviewer, handleSubmit, users }) => (
...@@ -34,20 +34,25 @@ export default compose( ...@@ -34,20 +34,25 @@ export default compose(
state => ({ state => ({
users: get(state, 'users.users') || [], users: get(state, 'users.users') || [],
}), }),
{ changeForm, initialize, inviteReviewer, getCollectionUsers }, { changeForm, initialize, inviteReviewer },
), ),
reduxForm({ reduxForm({
form: 'inviteReviewer', form: 'inviteReviewer',
onSubmit: (values, dispatch, { inviteReviewer, collectionId }) => { onSubmit: (
values,
dispatch,
{ inviteReviewer, collectionId, getReviewers, reset },
) => {
const reviewerData = pick(values, [ const reviewerData = pick(values, [
'email', 'email',
'firstName', 'firstName',
'lastName', 'lastName',
'affiliation', 'affiliation',
]) ])
inviteReviewer(reviewerData, collectionId).then(r => inviteReviewer(reviewerData, collectionId).then(() => {
console.log('l-am invitat -> ', r), reset()
) getReviewers()
})
}, },
}), }),
withHandlers({ withHandlers({
...@@ -60,14 +65,6 @@ export default compose( ...@@ -60,14 +65,6 @@ export default compose(
reset() reset()
}, },
}), }),
lifecycle({
componentDidMount() {
const { getCollectionUsers, collectionId } = this.props
getCollectionUsers(collectionId).then(r =>
console.log('get collection users', r),
)
},
}),
)(ReviewerForm) )(ReviewerForm)
// #region styled-components // #region styled-components
......
...@@ -66,8 +66,8 @@ const ReviewersList = ({ ...@@ -66,8 +66,8 @@ const ReviewersList = ({
}) => ( }) => (
<Root> <Root>
<ScrollContainer> <ScrollContainer>
{reviewers.map((r, index, arr) => ( {reviewers.map((r, index) => (
<ReviewerItem isLast={index === arr.length - 1} key={r.email}> <ReviewerItem key={r.invitationId}>
<Column flex={3}> <Column flex={3}>
<div> <div>
<ReviewerName>{r.name}</ReviewerName> <ReviewerName>{r.name}</ReviewerName>
...@@ -79,11 +79,11 @@ const ReviewersList = ({ ...@@ -79,11 +79,11 @@ const ReviewersList = ({
</Column> </Column>
<Column> <Column>
<StatusText>{r.status}</StatusText> <StatusText>{r.status}</StatusText>
<StatusText>{r.lastUpdated}</StatusText> <StatusText>{r.timestamp}</StatusText>
</Column> </Column>
<ResendRevoke <ResendRevoke
showConfirmResend={showConfirmResend(r)} showConfirmResend={showConfirmResend(r)}
showConfirmRevoke={showConfirmRevoke(r.status)} showConfirmRevoke={showConfirmRevoke(r.invitationId)}
/> />
</ReviewerItem> </ReviewerItem>
))} ))}
...@@ -172,7 +172,7 @@ const Column = styled.div` ...@@ -172,7 +172,7 @@ const Column = styled.div`
const ReviewerItem = styled.div` const ReviewerItem = styled.div`
align-items: center; align-items: center;
border-bottom: ${({ isLast }) => (isLast ? 'none' : th('borderDefault'))}; border-bottom: ${th('borderDefault')};
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: ${th('subGridUnit')} calc(${th('subGridUnit')} * 2); padding: ${th('subGridUnit')} calc(${th('subGridUnit')} * 2);
......
...@@ -4,15 +4,14 @@ const initialState = { ...@@ -4,15 +4,14 @@ const initialState = {
fetching: false, fetching: false,
} }
export const getCollectionUsers = collectionId => dispatch => export const getCollectionUsers = collectionId =>
apiGet(`/collections/${collectionId}/invitations`) apiGet(`/collections/${collectionId}/invitations?role=reviewer`)
export const inviteReviewer = (reviewerData, collectionId) => dispatch => { export const inviteReviewer = (reviewerData, collectionId) => dispatch =>
create(`/collections/${collectionId}/invitations`, { create(`/collections/${collectionId}/invitations`, {
...reviewerData, ...reviewerData,
role: 'reviewer', role: 'reviewer',
}) })
}
export const revokeReviewer = (invitationId, collectionId) => dispatch => export const revokeReviewer = (invitationId, collectionId) => dispatch =>
remove(`/collections/${collectionId}/invitations/${invitationId}`) remove(`/collections/${collectionId}/invitations/${invitationId}`)
......
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