import { hideControl, startConversation } from 'Actions/actions' import withLanguage from 'Components/utils/withLanguage' import { makeJsx } from 'Engine/evaluation' import { createMarkdownDiv } from 'Engine/marked' import { compose } from 'ramda' import React from 'react' import emoji from 'react-easy-emoji' import { connect } from 'react-redux' import './Controls.css' import withColours from './utils/withColours' function Controls({ blockingInputControls, controls, startConversation, hideControl, foldedSteps, colours, hiddenControls, language }) { /* TODO controls are not translated yet, since our translation system doesn't handle nested yaml properties of base.yaml */ if (language === 'en') return blockingInputControls?.[0]?.message == 'Entrez un salaire mensuel' ? ( <p className="blockingControl"> Enter a <b>monthly</b> salary. </p> ) : null return ( <div id="controlsBlock"> {blockingInputControls && ( <p className="blockingControl">{blockingInputControls[0].message}</p> )} {!blockingInputControls && ( <> <ul> {controls.map( ({ level, test, message, solution, evaluated }) => hiddenControls.includes(test) ? null : ( <li key={test} className="control" style={{ background: colours.lighterColour }}> {emoji(level == 'avertissement' ? '⚠️' : 'ℹ️')} <div className="controlText"> {message && createMarkdownDiv(message)} {!message && ( <span id="controlExplanation"> {makeJsx(evaluated)} </span> )} {solution && !foldedSteps.includes(solution.cible) && ( <div id="solution"> {/*emoji('💡')*/} <button key={solution.cible} className="ui__ link-button" onClick={() => startConversation(solution.cible)}> {solution.texte} </button> </div> )} </div> <button className="hide" aria-label="close" onClick={() => hideControl(test)}> × </button> </li> ) )} </ul> </> )} </div> ) } export default compose( connect( (state, props) => ({ foldedSteps: state.conversationSteps.foldedSteps, key: props.language, hiddenControls: state.hiddenControls }), dispatch => ({ startConversation: cible => dispatch(startConversation(cible)), hideControl: id => dispatch(hideControl(id)) }) ), withColours, withLanguage )(Controls)