import classNames from 'classnames' import InputSuggestions from 'Components/conversation/InputSuggestions' import withColours from 'Components/utils/withColours' import withLanguage from 'Components/utils/withLanguage' import { encodeRuleName, findRuleByDottedName } from 'Engine/rules' import { propEq } from 'ramda' import React, { Component } from 'react' import emoji from 'react-easy-emoji' import { Trans, translate } from 'react-i18next' import { connect } from 'react-redux' import { withRouter } from 'react-router' import { Link } from 'react-router-dom' import { change, Field, formValueSelector, reduxForm } from 'redux-form' import { analysisWithDefaultsSelector, blockingInputControlsSelector, flatRulesSelector, noUserInputSelector } from 'Selectors/analyseSelectors' import { mainTargetNames } from '../config' import { normalizeBasePath } from '../utils' import AnimatedTargetValue from './AnimatedTargetValue' import Controls from './Controls' import CurrencyInput from './CurrencyInput/CurrencyInput' import ProgressCircle from './ProgressCircle' import './TargetSelection.css' let salaries = [ 'contrat salarié . salaire . total', 'contrat salarié . salaire . brut de base', 'contrat salarié . salaire . net à payer' ] let displayedTargetNames = [...salaries, 'contrat salarié . aides employeur'] export let popularTargetNames = [ ...displayedTargetNames, 'contrat salarié . rémunération . net imposable' ] @translate() @reduxForm({ form: 'conversation', destroyOnUnmount: false }) @withRouter @connect( state => ({ getTargetValue: dottedName => formValueSelector('conversation')(state, dottedName), analysis: analysisWithDefaultsSelector(state), blockingInputControls: blockingInputControlsSelector(state), flatRules: flatRulesSelector(state), noUserInput: noUserInputSelector(state), conversationStarted: state.conversationStarted, activeInput: state.activeTargetInput }), dispatch => ({ setFormValue: (field, name) => dispatch(change('conversation', field, name)), setActiveInput: name => dispatch({ type: 'SET_ACTIVE_TARGET_INPUT', name }) }) ) class TargetSelection extends Component { render() { let { colours, noUserInput, blockingInputControls, analysis: { controls } } = this.props return (
{noUserInput && (

Entrez un salaire mensuel

)}
{this.renderOutputList()}
) } renderOutputList() { let displayedTargets = mainTargetNames.map(target => findRuleByDottedName(this.props.flatRules, target) ), { conversationStarted, activeInput, setActiveInput, analysis, noUserInput, blockingInputControls, match } = this.props, targets = analysis ? analysis.targets : [] return (
) } } let Header = ({ target, conversationStarted, isActiveInput, blockingInputControls, match }) => { const ruleLink = normalizeBasePath(match.path).replace(/simulation\/$/, '') + 'règle/' + encodeRuleName(target.dottedName) return ( {conversationStarted && !blockingInputControls && ( )} {!conversationStarted && target.dottedName.includes('net après impôt') && (
Janvier 2019
)} {target.title || target.name} {!conversationStarted &&

{target['résumé']}

}
) } let CurrencyField = withColours(props => { return ( ) }) let TargetInputOrValue = withLanguage( ({ target, targets, activeInput, setActiveInput, language, noUserInput, blockingInputControls }) => ( {activeInput === target.dottedName ? ( ) : ( )} {target.dottedName.includes('rémunération . total') && } ) ) @connect( null, dispatch => ({ setFormValue: (field, name) => dispatch(change('conversation', field, name)) }) ) class TargetValue extends Component { render() { let { targets, target, noUserInput, blockingInputControls } = this.props let targetWithValue = targets && targets.find(propEq('dottedName', target.dottedName)), value = targetWithValue && targetWithValue.nodeValue return (
) } showField(value) { let { target, setFormValue, activeInput, setActiveInput } = this.props return () => { if (!target.question) return if (value != null) setFormValue(target.dottedName, Math.floor(value) + '') if (activeInput) setFormValue(activeInput, '') setActiveInput(target.dottedName) } } } @withColours @withRouter @connect(state => ({ analysis: analysisWithDefaultsSelector(state) })) class AidesGlimpse extends Component { render() { let targets = this.props.analysis.targets, aides = targets && targets.find(t => t.dottedName === 'contrat salarié . aides employeur') if (!aides || !aides.nodeValue) return null return (
{' '} - {' '} d'aides {emoji(aides.icon)}
) } } export default TargetSelection