Skip to content
Snippets Groups Projects
ReviewerReportForm.js 4.3 KiB
Newer Older
import React, { Fragment } from 'react'
import { reduxForm } from 'redux-form'
import styled from 'styled-components'
import { th } from '@pubsweet/ui-toolkit'
import { required } from 'xpub-validators'
import { compose, withHandlers, withStateHandlers } from 'recompose'
import { withModal } from 'pubsweet-component-modal/src/components'
import { Button, FilePicker, Menu, ValidatedField } from '@pubsweet/ui'

import {
  Row,
  Item,
  Label,
  FileItem,
  Textarea,
  ActionLink,
  MultiAction,
  ContextualBox,
  ItemOverrideAlert,
  withFetching,
} from 'pubsweet-component-faraday-ui/src'

const options = [
  { value: 'a', label: 'a' },
  { value: 'b', label: 'b' },
  { value: 'c', label: 'c' },
  { value: 'd', label: 'd' },
]

const testFiles = [
  {
    id:
      '8dca903a-05b9-45ab-89b9-9cb99a9a29c6/02db6c5e-2938-45ac-a5ee-67ae63919bb2',
    name: 'Supplementary File 1.jpg',
    size: 59621,
    originalName: 'Supplementary File 1.jpg',
  },
  {
    id:
      '8dca903a-05b9-45ab-89b9-9cb99a9a29c6/5e69e3d9-7f9d-4e8d-b649-6e6a45658d75',
    name: 'Supplementary File 2.docx',
    size: 476862,
    originalName: 'Supplementary File 2.docx',
  },
]

const ReviewerReportForm = ({
  file,
  addFile,
  expanded,
  toggleMenu,
  handleSubmit,
}) => (
  <ContextualBox label="Your report" startExpanded>
    <Root>
      <Row>
        <ItemOverrideAlert vertical>
          <Label required>Recommendation</Label>
          <ValidatedField
            component={input => <Menu {...input} options={options} />}
            name="recommendation"
            validate={[required]}
          />
        </ItemOverrideAlert>
      </Row>

      <Row alignItems="center" justify="space-between" mt={1}>
        <Item>
          <Label required>Your report</Label>
          <FilePicker onUpload={addFile}>
            <ActionLink icon="plus">UPLOAD FILE</ActionLink>
          </FilePicker>
        </Item>

        <Item justify="flex-end">
          <ActionLink to="https://about.hindawi.com/authors/peer-review-at-hindawi/">
            Hindawi Reviewer Guidelines
          </ActionLink>
        </Item>
      </Row>

      <Row mb={1}>
        <ItemOverrideAlert vertical>
          <ValidatedField
            component={Textarea}
            name="message"
            validate={[required]}
          />
        </ItemOverrideAlert>
      </Row>

      <Row justify="flex-start">
        <Item flex={0}>
          <FileItem item={file} />
        </Item>
      </Row>

      <Row alignItems="center">
        {expanded ? (
          <Fragment>
            <Item>
              <Label>Confidential note for the Editorial Team</Label>
            </Item>
            <Item justify="flex-end">
              <ActionLink icon="x" onClick={toggleMenu}>
                Remove
              </ActionLink>
            </Item>
          </Fragment>
        ) : (
          <Item>
            <ActionLink onClick={toggleMenu}>
              Add Confidential note for the Editorial Team
            </ActionLink>
          </Item>
        )}
      </Row>

      {expanded && (
        <Row>
          <ItemOverrideAlert pr={2} vertical>
            <ValidatedField component={Textarea} name="note" />
          </ItemOverrideAlert>
        </Row>
      )}

      <Row justify="flex-end" mt={2}>
        <Button onClick={handleSubmit} primary size="medium">
          Submit report
        </Button>
      </Row>
    </Root>
  </ContextualBox>
)

export default compose(
  withFetching,
  withModal(() => ({
    modalComponent: MultiAction,
  })),
  withStateHandlers(
    { expanded: false, file: testFiles[0] },
    {
      toggleMenu: ({ expanded }) => () => ({ expanded: !expanded }),
    },
  ),
  withHandlers({
    addFile: () => file => {},
  }),
  reduxForm({
    form: 'reviewer-report',
    onSubmit: (
      values,
      dispatch,
      { showModal, setFetching, onSubmitReport },
    ) => {
      showModal({
        title: 'Ready to Submit your Report?',
        subtitle: `Once submitted, the report can't be modified.`,
        onConfirm: modalProps =>
          onSubmitReport(values, { ...modalProps, setFetching }),
        confirmText: 'Submit report',
        cancelText: 'Not yet',
      })
    },
  }),
)(ReviewerReportForm)

// #region styles
const Root = styled.div`
  background-color: ${th('colorBackgroundHue2')};
  padding: calc(${th('gridUnit')} * 2);
`
// #endregion