import React, { Component } from 'react' import HoverDecorator from './HoverDecorator' import 'whatwg-fetch' import { connect } from 'react-redux' import './Satisfaction.css' import ReactPiwik from './Tracker' @connect(state => ({ sessionId: state.sessionId, textColourOnWhite: state.themeColours.textColourOnWhite })) export default class Satisfaction extends Component { state = { answer: false, message: null, address: null, messageSent: false } sendSatisfaction(answer) { let { message, address } = this.state if (document.location.hostname != 'localhost') { fetch('https://embauche.beta.gouv.fr/retour-syso', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ fields: { satisfait: answer || '', message: (message || '') + (address ? '(envoyé par ' + address + ')' : ''), date: new Date().toISOString(), id: this.props.sessionId, url: document.location.href.toString() } }) }).then(response => { console.log(response) if (!response.ok) return console.log('Erreur dans la récolte de la satisfaction') //eslint-disable-line no-console if (message) return this.setState({ messageSent: true }) this.setState({ answer }) }) } else { console.log('!!!!!!!! Les retours ne sont pas envoyés en localhost !') if (message) this.setState({ messageSent: true }) this.setState({ answer }) } } render() { let { answer, message, address, messageSent } = this.state, validMessage = (typeof message == 'string' && message.length > 4) || (typeof address == 'string' && address.length > 4), onSmileyClick = s => { // Pour l'instant on double le flux avec Piwik ReactPiwik.push(['trackEvent', 'feedback', 'smiley', s]) this.sendSatisfaction(s) } if (!answer) return ( <div id="satisfaction"> <p>Vous êtes satisfait du simulateur ?</p> <p> <Smiley text=":)" hoverColor="#16a085" themeColour={this.props.textColourOnWhite} clicked={onSmileyClick} /> <Smiley text=":|" hoverColor="#f39c12" themeColour={this.props.textColourOnWhite} clicked={onSmileyClick} /> </p> </div> ) let messagePlaceholder = { ':)': 'Envoyez-nous un commentaire !', ':|': "Qu'est-ce qui n'a pas été ?" }[answer] let feedback = ( <div> <input type="text" value={this.state.address || ''} onChange={e => this.setState({ address: e.target.value })} placeholder="adresse@courriel.com (optionnel)" /> <textarea value={this.state.message || ''} onChange={e => this.setState({ message: e.target.value })} placeholder={messagePlaceholder} /> </div> ) return ( <div id="satisfaction"> {!messageSent && feedback} <button id="sendMessage" style={{ color: this.props.textColourOnWhite }} disabled={!validMessage || messageSent} onClick={() => this.sendSatisfaction()} > {messageSent ? ( <i id="messageSent" className="fa fa-check" aria-hidden="true" style={{ color: this.props.textColourOnWhite }} /> ) : ( <span> <i className="fa fa-paper-plane" aria-hidden="true" /> <span className="text">envoyer</span> </span> )} </button> <p> Pour recevoir une réponse, laissez-nous votre adresse ou{' '} <a href={ 'mailto:contact@embauche.beta.gouv.fr?subject=Suggestion pour le simulateur ' + this.props.simu } > envoyez-nous directement un mail{' '} <i className="fa fa-envelope-open-o" aria-hidden="true" style={{ margin: '0 .3em' }} /> </a> </p> </div> ) } } @HoverDecorator export class Smiley extends Component { render() { return ( <button onClick={() => this.props.clicked(this.props.text)} className="satisfaction-smiley" style={ this.props.hover ? { background: this.props.hoverColor, color: 'white', borderColor: 'transparent' } : { color: this.props.themeColour, borderColor: this.props.themeColour } } > {this.props.text} </button> ) } }