import React, { Component } from 'react' import { rules, findRuleByName } from 'Engine/rules' import { reject, curry, pipe, equals, filter, contains, length } from 'ramda' import { Link } from 'react-router-dom' import './TargetSelection.css' import BlueButton from './BlueButton' export let salaries = ['salaire net', 'salaire de base', 'salaire total'] export default class TargetSelection extends Component { state = { targets: [] } render() { let { targets } = this.state, ready = targets.length > 0 return ( <section id="targetSelection"> <h1>Que voulez-vous calculer ?</h1> {this.renderOutputList()} <div id="action"> <p style={{ color: this.props.themeColours.textColourOnWhite }}> Vous pouvez faire plusieurs choix </p> <Link to={'/simu/' + targets.join('+')}> <BlueButton disabled={!ready}>Valider</BlueButton> </Link> </div> </section> ) } renderOutputList() { let popularTargets = [...salaries, 'aides employeur différées'].map( curry(findRuleByName)(rules) ), { targets } = this.state, textColourOnWhite = this.props.themeColours.textColourOnWhite, // You can't select 3 salaries, as one must be an input in the next step optionDisabled = name => contains('salaire', name) && pipe( reject(equals(name)), filter(contains('salaire')), length, equals(2) )(targets), optionIsChecked = s => targets.includes(s.name) return ( <div> <div id="targets"> {popularTargets.map(s => ( <div key={s.name}> <input id={s.name} type="checkbox" disabled={optionDisabled(s.name)} checked={optionIsChecked(s)} onChange={() => this.setState({ targets: targets.find(t => t === s.name) ? reject(t => t === s.name, targets) : [...targets, s.name] }) } /> <label htmlFor={s.name} key={s.name} style={ optionIsChecked(s) ? { color: textColourOnWhite } : {} } > {optionIsChecked(s) ? ( <i className="fa fa-check-square-o fa-2x" style={{ color: textColourOnWhite }} /> ) : ( <i className="fa fa-square-o fa-2x" style={{ color: '#4b4b66' }} /> )} <div> <span className="optionTitle">{s.title || s.name}</span> <p style={ optionIsChecked(s) ? { color: textColourOnWhite } : { color: '#4b4b66' } } > {s['résumé']} </p> </div> </label> </div> ))} </div> </div> ) } }