Advertisement
dfghgfhplkjbv

src/components/Footer/Subscribe.js

Mar 6th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. import React, { Component } from 'react'
  2. import axios from 'axios'
  3. import PropTypes from 'prop-types'
  4. import classNames from 'classnames'
  5. import styles from './Subscribe.module.scss'
  6. import { MAILCHIMP_INSTANCE, LIST_UNIQUE_ID, MAILCHIMP_API_KEY } from '../../../config'
  7. import { FormattedMessage } from 'react-intl'
  8.  
  9. class Subscribe extends Component {
  10. state = {
  11. email: '',
  12. status: null,
  13. detail: null,
  14. }
  15.  
  16. handleOnChange = (event) => {
  17. this.setState({ email: event.target.value })
  18. }
  19.  
  20. handleOnSubmit = (event) => {
  21. event.preventDefault()
  22.  
  23. let params = new URLSearchParams()
  24. params.append('email', this.state.email)
  25. params.append('mailchimpInstance', MAILCHIMP_INSTANCE)
  26. params.append('listUniqueId', LIST_UNIQUE_ID)
  27. params.append('mailchimpApiKey', MAILCHIMP_API_KEY)
  28.  
  29. this.setState(
  30. {
  31. status: 'sending',
  32. },
  33. () =>
  34. axios.post(`${process.env.MAILCHIMP_MIDDLEWARE_API_URL}/api/subscribe`, params).then(({ data }) => {
  35. const { status, detail } = data
  36. this.setState({
  37. status,
  38. detail,
  39. email: '',
  40. })
  41. }),
  42. )
  43. }
  44.  
  45. render() {
  46. const { className } = this.props
  47. const { status, detail } = this.state
  48.  
  49. return (
  50. <form className={classNames(className, styles.root)} onSubmit={this.handleOnSubmit}>
  51. <label>
  52. {status === 400 ? (
  53. detail
  54. ) : (
  55. <span>
  56. {status === 'subscribed' ? <FormattedMessage id="subscribed" /> : <FormattedMessage id="subscribe" />}
  57. </span>
  58. )}
  59. <p className={styles.spacer} />
  60. <input
  61. type="email"
  62. required
  63. placeholder="e-mail"
  64. value={this.state.email}
  65. onChange={this.handleOnChange}
  66. aria-label="subscribe"
  67. />
  68. {status === 'sending' ? <button className={styles.sending} /> : <button className={styles.submit} />}
  69. </label>
  70. </form>
  71. )
  72. }
  73. }
  74.  
  75. Subscribe.propTypes = {
  76. className: PropTypes.string,
  77. }
  78.  
  79. export default Subscribe
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement