Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
EmailNotifications.js 1.66 KiB
import React from 'react'
import { compose, withHandlers } from 'recompose'
import {
  Row,
  Item,
  Label,
  OpenModal,
  ActionLink,
  ShadowedBox,
  withFetching,
} from 'pubsweet-component-faraday-ui'

const subbedTitle = `Unsubscribe from emails`
const subbedSubtitle = `Are you sure you want to unsubscribe from emails?`
const unsubbedTitle = `Subscribe to emails`
const unsubbedSubtitle = `Are you sure you want to subscribe to emails?`

const EmailNotifications = ({ isFetching, isSubscribed, setSubscription }) => (
  <ShadowedBox mt={2}>
    <Row alignItems="center">
      <Item>
        <Label>Email Notifications </Label>
      </Item>
      <Item justify="flex-end">
        <OpenModal
          isFetching={isFetching}
          onConfirm={setSubscription(!isSubscribed)}
          subtitle={isSubscribed ? subbedSubtitle : unsubbedSubtitle}
          title={isSubscribed ? subbedTitle : unsubbedTitle}
        >
          {showModal => (
            <ActionLink onClick={showModal}>
              {isSubscribed ? 'Unsubscribe' : 'Re-subscribe'}
            </ActionLink>
          )}
        </OpenModal>
      </Item>
    </Row>
  </ShadowedBox>
)

export default compose(
  withFetching,
  withHandlers({
    setSubscription: ({
      token,
      userId,
      setFetching,
      changeEmailSubscription,
    }) => value => ({ hideModal, setModalError }) => {
      setFetching(true)
      changeEmailSubscription(userId, value, token)
        .then(() => {
          setFetching(false)
          hideModal()
        })
        .catch(() => {
          setFetching(false)
          setModalError('Oops! Something went wrong...')
        })
    },
  }),
)(EmailNotifications)