import { startConversation } from 'Actions/actions' import AnswerList from 'Components/AnswerList' import { ScrollToTop } from 'Components/utils/Scroll' import withColours from 'Components/utils/withColours' import withLanguage from 'Components/utils/withLanguage' import { compose } from 'ramda' import React, { Component } from 'react' import { Trans, withI18n } from 'react-i18next' import { connect } from 'react-redux' import { Redirect, withRouter } from 'react-router' import { Link } from 'react-router-dom' import { blockingInputControlsSelector, nextStepsSelector, noUserInputSelector, validInputEnteredSelector } from 'Selectors/analyseSelectors' import * as Animate from 'Ui/animate' import sitePaths from '../sites/mycompanyinfrance.fr/sitePaths' import { normalizeBasePath } from '../utils' import Conversation from './conversation/Conversation' import Distribution from './Distribution' import PageFeedback from './Feedback/PageFeedback' import PaySlip from './PaySlip' import QuickLink from './QuickLink' import ResultView from './ResultView' import './Simu.css' import TargetSelection from './TargetSelection' export default compose( withRouter, withColours, withI18n(), // Triggers rerender when the language changes connect( state => ({ blockingInputControls: blockingInputControlsSelector(state), conversationStarted: state.conversationStarted, validInputEntered: validInputEnteredSelector(state), arePreviousAnswers: state.conversationSteps.foldedSteps.length !== 0, nextSteps: state.conversationStarted && nextStepsSelector(state), userInput: noUserInputSelector(state) }), { startConversation } ), withLanguage )( class Simulation extends Component { state = { displayPreviousAnswers: false } render() { let { colours, conversationStarted, arePreviousAnswers, nextSteps, startConversation, blockingInputControls, displayHiringProcedures, match, validInputEntered, location } = this.props const displayConversation = conversationStarted && !blockingInputControls const simulationCompleted = !blockingInputControls && conversationStarted && !nextSteps.length const displayPreviousAnswers = arePreviousAnswers && this.state.displayPreviousAnswers const simulationHomePath = normalizeBasePath(match.path).replace( /\/simulation\/$/, '' ) return ( <> <div id="simu"> <QuickLink /> {location.pathname.endsWith('/simulation') && ( <> {!conversationStarted && <Redirect to={simulationHomePath} />} <Link to={simulationHomePath} style={{ position: 'absolute' }}> <i className="fa fa-arrow-left" aria-hidden="true" style={{ marginRight: '0.5rem' }} /> <Trans>Retour</Trans> </Link> <div className="change-answer-link" style={{ visibility: arePreviousAnswers ? 'visible' : 'hidden' }}> <button className="ui__ link-button" onClick={() => this.setState({ displayPreviousAnswers: true }) }> <Trans>Modifier mes réponses</Trans> </button> </div> {displayPreviousAnswers && ( <AnswerList onClose={() => this.setState({ displayPreviousAnswers: false }) } /> )} {simulationCompleted && ( <> <h1> <Trans i18nKey="simulation-end.title"> Plus de questions ! </Trans> </h1> <p> <Trans i18nKey="simulation-end.text"> Vous avez atteint l'estimation la plus précise. Vous pouvez maintenant concrétiser votre projet d'embauche. </Trans> </p> {displayHiringProcedures && ( <div style={{ textAlign: 'center' }}> <Link className="ui__ button" to={sitePaths().démarcheEmbauche}> <Trans i18nKey="simulation-end.cta"> Connaître les démarches </Trans> </Link> </div> )} <br /> </> )} {displayConversation && ( <> <ScrollToTop /> <Conversation textColourOnWhite={colours.textColourOnWhite} /> </> )} </> )} <TargetSelection colours={colours} /> {location.pathname.endsWith('/simulation') && ( <> {conversationStarted && ( <Animate.fromBottom> <ResultView /> <div style={{ textAlign: 'center' }} /> </Animate.fromBottom> )} </> )} {validInputEntered && ( <PageFeedback customMessage={ <Trans i18nKey="feedback.simulator"> Ce simulateur vous a plu ? </Trans> } customEventName="rate simulator" /> )} </div> {!location.pathname.endsWith('/simulation') && validInputEntered && ( <Animate.fromBottom> <div style={{ textAlign: 'center' }}> {arePreviousAnswers && conversationStarted && ( <button className="ui__ button" onClick={startConversation}> <Trans>Continuer la simulation</Trans> </button> )} </div> <h2> <Trans>A quoi servent mes cotisations ?</Trans> </h2> <Distribution /> {!(arePreviousAnswers && conversationStarted) && ( <> <h2> <Trans>Simulation personnalisée</Trans> </h2> <p> <Trans i18nKey="custom-simulation"> Il s'agit pour l'instant d'une <strong> première estimation</strong> sur la base d'un contrat générique. La législation française prévoit une multitude de cas particuliers et de règles spécifiques qui modifient considérablement les montant de l'embauche. </Trans> </p> <p style={{ textAlign: 'center' }}> <button className="ui__ button" onClick={startConversation}> <Trans>Faire une simulation personnalisée</Trans> </button> </p> </> )} <h2> <Trans>Fiche de paie</Trans> </h2> <PaySlip /> </Animate.fromBottom> )} </> ) } } )