import R from 'ramda' import React, {Component} from 'react' import Helmet from 'react-helmet' import {reduxForm, formValueSelector, reset} from 'redux-form' import {connect} from 'react-redux' import {Redirect, Link, withRouter} from 'react-router-dom' import classNames from 'classnames' import {START_CONVERSATION} from '../actions' import Aide from './Aide' import {createMarkdownDiv} from 'Engine/marked' import {rules, findRuleByName, decodeRuleName} from 'Engine/rules' import './conversation/conversation.css' import './Simulateur.css' import {capitalise0} from '../utils' import Satisfaction from './Satisfaction' let situationSelector = formValueSelector('conversation') @withRouter @reduxForm({form: 'conversation', destroyOnUnmount: false}) @connect( state => ({ situation: variableName => situationSelector(state, variableName), foldedSteps: state.foldedSteps, unfoldedSteps: state.unfoldedSteps, themeColours: state.themeColours, analysedSituation: state.analysedSituation, }), dispatch => ({ startConversation: rootVariable => dispatch({type: START_CONVERSATION, rootVariable}), resetForm: () => dispatch(reset('conversation')) }) ) export default class extends React.Component { componentWillMount() { let { match: { params: { name: encodedName } } } = this.props, name = decodeRuleName(encodedName), existingConversation = this.props.foldedSteps.length > 0 this.encodedName = encodedName this.name = name this.rule = findRuleByName(rules, name) // C'est ici que la génération du formulaire, et donc la traversée des variables commence if (!existingConversation) this.props.startConversation(name) } render(){ if (!this.rule.formule) return let started = !this.props.match.params.intro, {foldedSteps, unfoldedSteps, situation} = this.props, sim = path => R.path(R.unless(R.is(Array), R.of)(path))(this.rule.simulateur || {}), reinitalise = () => { this.props.resetForm(this.name) this.props.startConversation(this.name) }, title = sim('titre') || capitalise0(this.rule['titre'] || this.rule['nom']) return (
{title} {sim('sous-titre') && }

{title}

{sim('sous-titre') &&
{sim('sous-titre')}
} {sim(['introduction', 'notes']) &&
{sim(['introduction', 'notes']).map( ({icône, texte, titre}) =>
{texte}
)}
} { // Tant que le bouton 'C'est parti' n'est pas cliqué, on affiche l'intro !started ?
{createMarkdownDiv(sim(['introduction', 'motivation'])) ||

Simulez cette règle en quelques clics

}

N'hésitez pas à nous écrire ! La loi française est très ciblée, et donc complexe. Nous pouvons la rendre plus transparente.

: (
{ !R.isEmpty(foldedSteps) &&

Vos réponses

{foldedSteps .map(step => ( ))}
}
{ !R.isEmpty(unfoldedSteps) && do { let step = R.head(unfoldedSteps) ; }}
{unfoldedSteps.length == 0 && }
)}
) } } class Conclusion extends Component { render() { return (

Votre simulation est terminée !

N'hésitez pas à modifier vos réponses, ou cliquez sur vos résultats pour comprendre le calcul.

) } }