-
Alexandru Munteanu authored7f0bfe19
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
import React from 'react'
import { connect } from 'react-redux'
import styled from 'styled-components'
import { th, Button } from '@pubsweet/ui'
import { compose, withHandlers } from 'recompose'
import { reduxForm, change as changeForm, initialize } from 'redux-form'
import { ReviewersSelect } from './'
import { ValidatedTextField } from '../AuthorList/FormItems'
import { inviteReviewer } from '../../redux/reviewers'
// const emailRegex = new RegExp(
// /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, //eslint-disable-line
// )
// const emailValidator = value =>
// emailRegex.test(value) ? undefined : 'Invalid email'
const ReviewerForm = ({ clearForm, selectReviewer, handleSubmit }) => (
<Root>
<Row>
<ReviewersSelect onSelect={selectReviewer} />
<ValidatedTextField isRequired label="Last name*" name="lastName" />
</Row>
<Row>
<ValidatedTextField label="First name" name="firstName" />
<ValidatedTextField label="Affiliation" name="affiliation" />
</Row>
<ButtonsContainer>
<FormButton onClick={clearForm}>Clear</FormButton>
<FormButton onClick={handleSubmit} primary>
Send
</FormButton>
</ButtonsContainer>
</Root>
)
export default compose(
connect(null, { changeForm, initialize, inviteReviewer }),
reduxForm({
form: 'inviteReviewer',
onSubmit: (values, dispatch, { inviteReviewer }) => {},
}),
withHandlers({
selectReviewer: ({ changeForm, initialize }) => reviewer => () => {
Object.entries(reviewer).forEach(([key, value]) => {
changeForm('inviteReviewer', key, value)
})
},
clearForm: ({ reset }) => () => {
reset()
},
}),
)(ReviewerForm)
// #region styled-components
const FormButton = styled(Button)`
height: calc(${th('subGridUnit')} * 5);
margin: ${th('subGridUnit')};
`
const ButtonsContainer = styled.div`
display: flex;
justify-content: flex-end;
margin: ${th('subGridUnit')} auto 0;
width: 100%;
`
const Row = styled.div`
align-items: center;
display: flex;
flex-direction: row;
`
const Root = styled.div`
align-self: stretch;
border: ${th('borderDefault')};
display: flex;
flex-direction: column;
margin-bottom: ${th('gridUnit')};
padding: ${th('subGridUnit')} calc(${th('subGridUnit')} * 3)
calc(${th('subGridUnit')} * 3) calc(${th('subGridUnit')} * 3);
`
// #endregion