import { startConversation } from 'Actions/actions' import ScrollToTop from 'Components/utils/ScrollToTop' import withColours from 'Components/utils/withColours' import React, { Component } from 'react' import { Trans, translate } from 'react-i18next' import { connect } from 'react-redux' import { Link } from 'react-router-dom' import { animated, Spring } from 'react-spring' import { blockingInputControlsSelector, nextStepsSelector, noUserInputSelector } from 'Selectors/analyseSelectors' import * as Animate from 'Ui/animate' import AnswerList from './AnswerList' import Conversation from './conversation/Conversation' import Distribution from './Distribution' import PaySlip from './PaySlip' import QuickLink from './QuickLink' import ResultView from './ResultView' import './Simu.css' import TargetSelection from './TargetSelection' @withColours @translate() // Triggers rerender when the language changes @connect( state => ({ noUserInput: noUserInputSelector(state), blockingInputControls: blockingInputControlsSelector(state), conversationStarted: state.conversationStarted, arePreviousAnswers: state.conversationSteps.foldedSteps.length !== 0, nextSteps: state.conversationStarted && nextStepsSelector(state) }), { startConversation } ) export default class Simu extends Component { state = { displayPreviousAnswers: false } render() { let { colours, conversationStarted, noUserInput, arePreviousAnswers, nextSteps, startConversation, blockingInputControls } = this.props const firstValidInputEntered = !conversationStarted && !blockingInputControls && !noUserInput const displayConversation = conversationStarted && !blockingInputControls const simulationCompleted = !blockingInputControls && conversationStarted && !nextSteps.length const displayPreviousAnswers = arePreviousAnswers && this.state.displayPreviousAnswers return ( <> <div id="simu"> {arePreviousAnswers && ( <div className="change-answer-link"> <button className="ui__ link-button" onClick={() => this.setState({ displayPreviousAnswers: true })}> <Trans> Modifier mes réponses</Trans> </button> </div> )} <Spring to={{ height: firstValidInputEntered ? 'auto' : 0, opacity: firstValidInputEntered ? 1 : 0 }} native> {styles => ( <animated.div className="ui__ button-container" style={{ ...styles, display: 'flex', overflow: 'hidden', flexWrap: 'wrap', fontSize: '110%', justifyContent: 'space-evenly' }}> <QuickLink /> </animated.div> )} </Spring> {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> <div style={{ textAlign: 'center' }}> <Link className="ui__ button" to="/hiring-process"> <Trans i18nKey="simulation-end.cta"> Connaître les démarches </Trans> </Link> </div> </> )} <div id="focusZone"> {displayConversation && ( <> <ScrollToTop /> <Conversation textColourOnWhite={colours.textColourOnWhite} /> </> )} <TargetSelection colours={colours} /> </div> {conversationStarted && ( <Animate.fromBottom> <ResultView /> </Animate.fromBottom> )} {displayPreviousAnswers && ( <AnswerList onClose={() => this.setState({ displayPreviousAnswers: false })} /> )} </div> {firstValidInputEntered && ( <Animate.fromBottom> <h2> <Trans>A quoi servent mes cotisations ?</Trans> </h2> <Distribution /> <h2> <Trans>Estimer mes coûts réels</Trans> </h2> <p> <Trans i18nk="estimate-real-costs"> Il s'agit d'une <strong>estimation brut</strong> sur la base d'un contrat générique pré-établi. La législation française prévoit une multitude de cas particuliers et des règles spécifiques qui peuvent modifier considérablement les coûts d'embauche. </Trans> </p> <p style={{ textAlign: 'center' }}> <button className="ui__ button" onClick={startConversation}> <Trans>Estimer mes coûts réels</Trans> </button> </p> <h2> <Trans>Fiche de paie</Trans> </h2> <PaySlip /> </Animate.fromBottom> )} </> ) } }