'use strict'; import React from 'react'; import classnames from 'classnames'; import { AclInformationText } from '../../constants/acl_information_text'; import { replaceSubstringAtIndex, sanitize, intersectLists } from '../../utils/general_utils'; import { getLangText } from '../../utils/lang_utils'; let AclInformation = React.createClass({ propTypes: { verbs: React.PropTypes.arrayOf(React.PropTypes.string), aim: React.PropTypes.string.isRequired, aclObject: React.PropTypes.object, // Must be inserted from the outside buttonListSize: React.PropTypes.number.isRequired }, getDefaultProps() { return { buttonListSize: 400 }; }, getInitialState() { return { isVisible: false }; }, onOff() { if(!this.state.isVisible) { this.setState({ isVisible: true }); } else { this.setState({ isVisible: false }); } }, getInfoText(title, info, example){ const aim = this.props.aim; if(aim) { if(aim === 'form') { return (
{replaceSubstringAtIndex(info.slice(2), 's ', ' ')} {' ' + example}
); } else if(aim === 'button') { return ({title} {info + ' '} {example}
); } } else { console.log('Aim is required when you want to place information text'); } }, produceInformationBlock() { const { titles, informationSentences, exampleSentences } = AclInformationText; const { verbs, aim } = this.props; const availableInformations = intersectLists(verbs, Object.keys(titles)); // sorting is not needed, as `this.props.verbs` takes care of sorting already // So we assume a user of `AclInformationButton` puts an ordered version of // `verbs` into `propTypes` let verbsToDisplay = []; if(aim === 'form' && availableInformations.length > 0) { verbsToDisplay = verbsToDisplay.concat(verbs); } else if(aim === 'button' && this.props.aclObject) { const { aclObject } = this.props; const sanitizedAclObject = sanitize(aclObject, (val) => !val); verbsToDisplay = verbsToDisplay.concat(intersectLists(verbs, Object.keys(sanitizedAclObject))); } return verbsToDisplay.map((verb) => { const title = titles[verb]; const informationSentence = informationSentences[verb]; const exampleSentence = exampleSentences[verb]; if (title && informationSentence && exampleSentence) { return this.getInfoText(getLangText(title), getLangText(informationSentence), getLangText(exampleSentence)); } }); }, getButton() { return this.props.aim === 'button' ? : null; }, render() { const { aim, buttonListSize, verbs } = this.props; const { isVisible } = this.state; /* Lets just fucking get this widget out... */ const aclInformationSize = buttonListSize - 30; return ( {this.getButton()}