/* eslint camelcase: "off" */ import { h, Component } from 'preact'; import PropTypes from 'prop-types'; import Navigation from './Navigation'; import { getContentOfToken, updateOnboarding } from '../utilities'; /* eslint-disable camelcase */ class EmailTermsConditionsForm extends Component { constructor(props) { super(props); this.handleChange = this.handleChange.bind(this); this.onSubmit = this.onSubmit.bind(this); this.checkRequirements = this.checkRequirements.bind(this); this.state = { checked_code_of_conduct: false, checked_terms_and_conditions: false, email_newsletter: true, email_digest_periodic: true, message: '', textShowing: null, }; } componentDidMount() { updateOnboarding('emails, COC and T&C form'); } onSubmit() { if (!this.checkRequirements()) return; const csrfToken = getContentOfToken('csrf-token'); fetch('/onboarding_checkbox_update', { method: 'PATCH', headers: { 'X-CSRF-Token': csrfToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ user: this.state }), credentials: 'same-origin', }).then(response => { if (response.ok) { localStorage.setItem('shouldRedirectToOnboarding', false); const { next } = this.props; next(); } }); } checkRequirements() { const { checked_code_of_conduct, checked_terms_and_conditions, } = this.state; if (!checked_code_of_conduct) { this.setState({ message: 'You must agree to our Code of Conduct before continuing!', }); return false; } if (!checked_terms_and_conditions) { this.setState({ message: 'You must agree to our Terms and Conditions before continuing!', }); return false; } return true; } handleChange(event) { const { name } = event.target; this.setState(currentState => ({ [name]: !currentState[name], })); } handleShowText(event, id) { event.preventDefault(); this.setState({ textShowing: document.getElementById(id).innerHTML }); } backToSlide() { this.setState({ textShowing: null }); } render() { const { message, checked_code_of_conduct, checked_terms_and_conditions, email_newsletter, email_digest_periodic, textShowing, } = this.state; const { prev } = this.props; if (textShowing) { return (