Navigation d'une simulation à une page /règle

pull/138/head
mama 2017-12-07 20:00:36 +01:00
parent c91c13dc1a
commit 4fa19a3f8c
2 changed files with 40 additions and 11 deletions

View File

@ -0,0 +1,14 @@
#toSimulation {
background: #333350;
margin: 0 auto 1em;
display: block;
width: 20em;
color: white;
font-size: 180%;
text-align: center;
padding: .2em .6em;
}
#toSimulation i {
margin: 0 .6em
}

View File

@ -4,17 +4,30 @@ import Rule from 'Components/rule/Rule'
import { analyse } from 'Engine/traverse'
import { head, path } from 'ramda'
import { decodeRuleName, nameLeaf, findRuleByName } from 'Engine/rules.js'
import {encodeRuleName} from 'Engine/rules'
import {pipe, pluck, join, map} from 'ramda'
import { Link } from 'react-router-dom'
import {animateScroll} from 'react-scroll'
import './PageRule.css'
@connect(state => ({
situationGate: state.situationGate,
parsedRules: state.parsedRules
parsedRules: state.parsedRules,
analysis: state.analysis
}))
export default class RulePage extends Component {
nameFromParams = path(['match', 'params', 'name'])
componentWillMount() {
this.setRule(this.nameFromParams(this.props))
}
componentDidMount(){
animateScroll.scrollToTop({duration: 300})
}
componentWillReceiveProps(nextProps) {
if (this.nameFromParams(nextProps) !== this.nameFromParams(this.props)) {
this.setRule(this.nameFromParams(nextProps))
}
}
setRule(name) {
let ruleName = nameLeaf(decodeRuleName(name)),
rule = findRuleByName(this.props.parsedRules, ruleName)
@ -24,17 +37,19 @@ export default class RulePage extends Component {
.targets
)
}
// Est-ce nécessaire ? Pour naviguer dans les Rules ?
// componentWillReceiveProps(nextProps) {
// let get = R.path(['match', 'params', 'name'])
// if (get(nextProps) !== get(this.props)) {
// this.setRule(get(nextProps))
// this.setState({ example: null, showValues: true })
// }
// }
render() {
if (!this.rule) return <Redirect to="/404" />
return <Rule rule={this.rule} />
let targets = path(['analysis', 'targets'], this.props)
return (<>
{targets && <BackToSimulation targets={targets}/> }
<Rule rule={this.rule} />
</>)
}
}
let BackToSimulation = ({targets}) =>
<Link id="toSimulation" to={'/simu/' + pipe(pluck('name'), map(encodeRuleName), join('+'))(targets)}>
<i className="fa fa-arrow-circle-left" aria-hidden="true"></i>Reprendre la simulation
</Link>