Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ReviewerForm.js 2.40 KiB
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