2019-04-25 08:03:20 +02:00
|
|
|
import React, { useState } from "react";
|
|
|
|
import PropTypes from "prop-types";
|
|
|
|
import OptionGroup from "../OptionGroup";
|
|
|
|
import { FormattedMessage } from "react-intl";
|
2019-06-23 18:00:50 +02:00
|
|
|
import RightIcon from "@material-ui/icons/KeyboardArrowRight";
|
2019-04-25 08:03:20 +02:00
|
|
|
|
|
|
|
const PatternOptions = props => {
|
|
|
|
const [expanded, setExpanded] = useState([]);
|
|
|
|
const toggleGroup = group => {
|
|
|
|
let shown = expanded.slice(0);
|
|
|
|
let index = shown.indexOf(group);
|
|
|
|
if (index === -1) shown.push(group);
|
|
|
|
else shown.splice(index, 1);
|
|
|
|
setExpanded(shown);
|
|
|
|
};
|
|
|
|
|
2019-04-25 16:51:15 +02:00
|
|
|
const renderGroup = group => {
|
|
|
|
let open = true;
|
|
|
|
if (expanded.indexOf(group) === -1) open = false;
|
|
|
|
let output = [];
|
|
|
|
let children = null;
|
|
|
|
if (expanded.indexOf(group) !== -1)
|
|
|
|
children = (
|
2019-06-23 18:00:50 +02:00
|
|
|
<ul className="config l3">
|
2019-04-25 16:51:15 +02:00
|
|
|
<OptionGroup
|
2019-05-10 10:53:34 +02:00
|
|
|
noDocs={props.noDocs}
|
2019-04-25 16:51:15 +02:00
|
|
|
key={group + "-group"}
|
|
|
|
units={props.units}
|
2019-04-30 16:20:43 +02:00
|
|
|
config={props.config}
|
2019-07-03 07:54:04 +02:00
|
|
|
gist={props.gist}
|
2019-07-24 21:58:29 +02:00
|
|
|
recipe={props.recipe}
|
2019-04-30 16:20:43 +02:00
|
|
|
options={props.config.optionGroups[group]}
|
2019-04-25 16:51:15 +02:00
|
|
|
updateValue={props.updateValue}
|
2019-04-30 16:20:43 +02:00
|
|
|
raiseEvent={props.raiseEvent}
|
2019-04-25 16:51:15 +02:00
|
|
|
/>
|
|
|
|
</ul>
|
|
|
|
);
|
|
|
|
output.push(
|
|
|
|
<li className={open ? "expanded" : "collapsed"} key={group + "-ghead"}>
|
2019-06-23 18:00:50 +02:00
|
|
|
<span onClick={() => toggleGroup(group)}>
|
|
|
|
<RightIcon
|
2019-04-26 12:59:03 +02:00
|
|
|
className={"icon-col-exp " + (open ? "expanded" : "collapsed")}
|
|
|
|
/>
|
2019-04-25 16:51:15 +02:00
|
|
|
<FormattedMessage id={"optiongroups." + group} />
|
2019-06-23 18:00:50 +02:00
|
|
|
</span>
|
2019-04-25 16:51:15 +02:00
|
|
|
{children}
|
|
|
|
</li>
|
|
|
|
);
|
|
|
|
|
|
|
|
return output;
|
|
|
|
};
|
|
|
|
|
2019-04-25 08:03:20 +02:00
|
|
|
return (
|
2019-06-23 18:00:50 +02:00
|
|
|
<ul className="config l2">
|
2019-04-30 16:20:43 +02:00
|
|
|
{Object.keys(props.config.optionGroups).map(group => renderGroup(group))}
|
2019-04-25 16:51:15 +02:00
|
|
|
</ul>
|
2019-04-25 08:03:20 +02:00
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
PatternOptions.propTypes = {
|
2019-04-30 16:20:43 +02:00
|
|
|
config: PropTypes.object.isRequired,
|
|
|
|
raiseEvent: PropTypes.func
|
2019-04-25 08:03:20 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
PatternOptions.defaultProps = {};
|
|
|
|
|
|
|
|
export default PatternOptions;
|