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 (
{targets
.map(target => target.explanation || target)
.filter(target => {
return (
target.isApplicable !== false &&
(target.question || target.nodeValue)
)
})
.map(target => (
-
{!target.question && (
)}
{activeInput === target.dottedName &&
!conversationStarted && (
this.props.setFormValue(
target.dottedName,
'' + value
)
}
rulePeriod={target.période}
colouredBackground={true}
/>
)}
))}
)
}
}
)
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) || ''}
// />
//
//
// )}
//
// )
// )