import classNames from 'classnames' import Controls from 'Components/Controls' import InputSuggestions from 'Components/conversation/InputSuggestions' import withColours from 'Components/utils/withColours' import withLanguage from 'Components/utils/withLanguage' import withSitePaths from 'Components/utils/withSitePaths' import { encodeRuleName } from 'Engine/rules' import { compose, isEmpty, isNil, propEq } from 'ramda' import React, { Component, PureComponent } from 'react' import { withTranslation } 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, flatRulesSelector, nextStepsSelector, noUserInputSelector } from 'Selectors/analyseSelectors' import Animate from 'Ui/animate' import AnimatedTargetValue from 'Ui/AnimatedTargetValue' import { Progress } from '../sites/mycompanyinfrance.fr/layout/ProgressHeader/ProgressHeader' import CurrencyInput from './CurrencyInput/CurrencyInput' import QuickLinks from './QuickLinks' import './TargetSelection.css' const MAX_NUMBER_QUESTION = 18 export default compose( withTranslation(), withColours, reduxForm({ form: 'conversation', destroyOnUnmount: false }), withRouter, connect( state => ({ getTargetValue: dottedName => formValueSelector('conversation')(state, dottedName), analysis: analysisWithDefaultsSelector(state), flatRules: flatRulesSelector(state), progress: (100 * (MAX_NUMBER_QUESTION - nextStepsSelector(state))) / MAX_NUMBER_QUESTION, noUserInput: noUserInputSelector(state), conversationStarted: state.conversationStarted, activeInput: state.activeTargetInput, objectifs: state.simulation?.config.objectifs || [] }), dispatch => ({ setFormValue: (field, name) => dispatch(change('conversation', field, name)), setActiveInput: name => dispatch({ type: 'SET_ACTIVE_TARGET_INPUT', name }) }) ) )( class TargetSelection extends PureComponent { componentDidMount() { const props = this.props const targets = props.analysis ? props.analysis.targets : [] // Initialize defaultValue for target that can't be computed targets .filter( target => (!target.formule || isEmpty(target.formule)) && (!isNil(target.defaultValue) || !isNil(target.explanation?.defaultValue)) && !props.getTargetValue(target.dottedName) ) .forEach(target => { props.setFormValue( target.dottedName, !isNil(target.defaultValue) ? target.defaultValue : target.explanation?.defaultValue ) }) props.setActiveInput(null) } render() { let { colours, noUserInput, analysis, progress } = this.props return (
{!noUserInput && }
{this.renderOutputList()}
) } renderOutputList() { let { conversationStarted, activeInput, setActiveInput, analysis, match } = this.props, targets = analysis ? analysis.targets : [] return (
) } } ) let Header = withSitePaths(({ target, conversationStarted, sitePaths }) => { const ruleLink = sitePaths.documentation.index + '/' + encodeRuleName(target.dottedName) return ( {target.title || target.name} {!conversationStarted &&

{target['résumé']}

}
) }) let CurrencyField = withColours(props => { return ( ) }) let TargetInputOrValue = withLanguage( ({ target, targets, activeInput, setActiveInput, language, noUserInput }) => ( {activeInput === target.dottedName || !target.formule || isEmpty(target.formule) ? ( ) : ( )} ) ) const TargetValue = connect( null, dispatch => ({ setFormValue: (field, name) => dispatch(change('conversation', field, name)) }) )( class TargetValue extends Component { render() { let { targets, target } = 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.round(value) + '') if (activeInput) setFormValue(activeInput, '') setActiveInput(target.dottedName) } } } ) // let TargetInput = withLanguage( // ({ // target, // targets, // activeInput, // setActiveInput, // language, // setFormValue // }) => ( // // {!target.question ? ( // {target.nodeValue} // ) : activeInput === target.dottedName || !target.formule ? ( // { // if (target.dottedName !== activeInput) { // setActiveInput(target.dottedName) // } // }} // component={CurrencyField} // defaultValue={0} // autoFocus={target.formule} // className={classnames('targetInput', { // active: target.dottedName === activeInput // })} // language={language} // /> // ) : ( // // { // if (!target.question) return // if (target.nodeValue) // setFormValue( // target.dottedName, // Math.round(target.nodeValue) + '' // ) // const previousActiveTarget = targets.find( // t => t.dottedName === activeInput // ) // if ( // previousActiveTarget?.formule || // previousActiveTarget?.explanation?.formule // ) { // setFormValue(activeInput, '') // } // setActiveInput(target.dottedName) // }} // className={classnames('targetInput', { // active: target.dottedName === activeInput // })} // language={language} // value={Math.round(target.nodeValue) || ''} // /> // // // )} // // ) // )