1
0
Fork 0

🚧 Progress on React components

This commit is contained in:
Joost De Cock 2019-04-26 12:59:03 +02:00
parent 3d9192a5ae
commit ea87274eb2
10 changed files with 270 additions and 107 deletions

View file

@ -0,0 +1,89 @@
import React, { useState } from "react";
import PropTypes from "prop-types";
import { gistDefaults } from "../utils";
import { patternInfo, patternList } from "@freesewing/patterns";
import { FormattedMessage } from "react-intl";
import List from "@material-ui/core/List";
import DraftSettingSa from "../DraftSettingSa";
import DraftSettingMargin from "../DraftSettingMargin";
import DraftSettingComplete from "../DraftSettingComplete";
import DraftSettingPaperless from "../DraftSettingPaperless";
import DraftSettingUnits from "../DraftSettingUnits";
import DraftSettingLanguage from "../DraftSettingLanguage";
import DraftSettingOnly from "../DraftSettingOnly";
import DownIcon from "@material-ui/icons/KeyboardArrowDown";
const DraftActions = 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);
};
let paperSizes = ["A4", "Letter", "A3", "Tabloid", "A2", "A1", "A0"];
let groups = {
saveDraft: [
<li>
<FormattedMessage id="app.saveDraftToYourAccount" />
</li>,
<li>
<FormattedMessage id="app.saveGistAsJSON" />
</li>,
<li>
<FormattedMessage id="app.saveGistAsYAML" />
</li>,
<li>
<FormattedMessage id="app.saveSvg" />
</li>
],
exportDraft: [
<li>
<FormattedMessage id="app.exportDraft" />: PDF
</li>,
paperSizes.map(size => (
<li>
<FormattedMessage id="app.exportTiledPdf" />: {size}
</li>
))
]
};
return (
<ul className="nav l2">
{Object.keys(groups).map(group => {
let open = true;
if (expanded.indexOf(group) === -1) open = false;
let children = null;
if (open) children = groups[group].map(component => component);
return (
<React.Fragment>
<li
className={open ? "expanded" : "collapsed"}
key={group + "-ghead"}
>
<h3 onClick={() => toggleGroup(group)}>
<DownIcon
className={
"icon-col-exp " + (open ? "expanded" : "collapsed")
}
/>
<FormattedMessage id={"app." + group} />
</h3>
</li>
{children}
</React.Fragment>
);
})}
</ul>
);
};
DraftActions.propTypes = {};
DraftActions.defaultProps = {};
export default DraftActions;

View file

@ -0,0 +1,31 @@
import React from "react";
import { storiesOf } from "@storybook/react";
import DraftSettings from ".";
const props = {
triggerAction: (type, data) =>
console.log(`Action of type ${type} triggered, data passed is`, data),
updateValue: (type, data) =>
console.log(`Update ${type} with new value`, data),
gist: {
settings: {
options: {}
}
},
languages: {
de: "German",
en: "English",
es: "Spanish",
fr: "French",
nl: "Dutch"
},
language: "en"
};
storiesOf("DraftActions", module)
.add("Simon metric", () => (
<DraftSettings pattern="simon" gist={false} units="metric" {...props} />
))
.add("Trayvon imperial", () => (
<DraftSettings pattern="trayvon" gist={false} units="imperial" {...props} />
));

View file

@ -5,6 +5,7 @@ import OptionPreamble from "../OptionPreamble";
const DraftSettingLanguage = props => {
const [value, setValue] = useState(props.dflt);
const [expanded, setExpanded] = useState(false);
const update = (name, newValue, evt) => {
props.updateValue(props.name, newValue);
@ -16,8 +17,22 @@ const DraftSettingLanguage = props => {
props.updateValue(props.name, props.dflt);
};
const toggleExpanded = () => setExpanded(!expanded);
const option = (
<FormFieldList
name={props.name}
value={value}
dflt={props.dflt}
onChange={update}
label={"po-list-" + props.name}
updateValue={update}
list={props.languages}
/>
);
return (
<div className={"pattern-option list"}>
<li>
<OptionPreamble
dflt={props.dflt}
value={value}
@ -26,23 +41,17 @@ const DraftSettingLanguage = props => {
id={"po-list-" + props.name}
displayValue={props.languages[value]}
reset={reset}
toggleExpanded={toggleExpanded}
expanded={expanded}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: props.name
})
}
option={option}
/>
<FormFieldList
name={props.name}
value={value}
dflt={props.dflt}
onChange={update}
label={"po-list-" + props.name}
updateValue={update}
list={props.languages}
/>
</div>
</li>
);
};

View file

@ -8,6 +8,7 @@ import OptionPreamble from "../OptionPreamble";
const DraftSettingOnly = props => {
const [value, setValue] = useState(props.dflt);
const [parts, setParts] = useState([]);
const [expanded, setExpanded] = useState(false);
const update = (name, newValue, evt) => {
setValue(newValue);
@ -26,38 +27,28 @@ const DraftSettingOnly = props => {
setParts(newValue);
};
const toggleExpanded = () => setExpanded(!expanded);
const list = {
dflt: props.labels.dflt,
custom: props.labels.custom
};
return (
<div className={"pattern-option list"}>
<OptionPreamble
dflt="dflt"
value={value}
desc={props.desc}
title={props.title}
id="po-list-only"
displayValue={props.labels[value]}
reset={reset}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: "only"
})
}
/>
<FormFieldList
name="only"
value={value}
dflt={props.dflt}
onChange={update}
label="po-list-only"
updateValue={update}
list={list}
/>
{value === "custom" ? (
let option = (
<FormFieldList
name="only"
value={value}
dflt={props.dflt}
onChange={update}
label="po-list-only"
updateValue={update}
list={list}
/>
);
if (value === "custom")
option = (
<React.Fragment>
{option}
<FormFieldChecks
checks={props.parts}
name="parts"
@ -68,10 +59,30 @@ const DraftSettingOnly = props => {
updateValue={updateCustom}
list={list}
/>
) : (
""
)}
</div>
</React.Fragment>
);
return (
<li>
<OptionPreamble
dflt="dflt"
value={value}
desc={props.desc}
title={props.title}
id="po-list-only"
displayValue={props.labels[value]}
reset={reset}
toggleExpanded={toggleExpanded}
expanded={expanded}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: "only"
})
}
option={option}
/>
</li>
);
};

View file

@ -9,6 +9,7 @@ const DraftSettingSa = props => {
const [value, setValue] = useState("dflt");
const [saValue, setSaValue] = useState(defaultSa[props.units]);
const [customValue, setCustomValue] = useState(10);
const [expanded, setExpanded] = useState(false);
const update = (name, newValue, evt) => {
switch (newValue) {
@ -35,6 +36,7 @@ const DraftSettingSa = props => {
setSaValue(defaultSa[props.units]);
props.updateValue("sa", defaultSa[props.units]);
};
const toggleExpanded = () => setExpanded(!expanded);
const updateCustom = (name, newValue, evt) => {
newValue = roundMm(newValue);
@ -56,33 +58,21 @@ const DraftSettingSa = props => {
custom: props.labels.custom
};
return (
<div className={"pattern-option list"}>
<OptionPreamble
dflt={"dflt"}
value={value}
desc={props.desc}
title={props.title}
id="po-list-sa"
displayValue={formatMm(saValue, props.units)}
reset={reset}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: "sa"
})
}
/>
<FormFieldList
name="sa"
value={value}
dflt={"dflt"}
onChange={update}
label="po-bool-sa"
updateValue={update}
list={list}
/>
{value === "custom" ? (
let option = (
<FormFieldList
name="sa"
value={value}
dflt={"dflt"}
onChange={update}
label="po-bool-sa"
updateValue={update}
list={list}
/>
);
if (value === "custom")
option = (
<React.Fragment>
{option}
<FormFieldSlider
name="customSa"
value={saValue}
@ -93,10 +83,30 @@ const DraftSettingSa = props => {
max={25.4}
step={sliderStep[props.units]}
/>
) : (
""
)}
</div>
</React.Fragment>
);
return (
<li>
<OptionPreamble
dflt={"dflt"}
value={value}
desc={props.desc}
title={props.title}
id="po-list-sa"
displayValue={formatMm(saValue, props.units)}
reset={reset}
toggleExpanded={toggleExpanded}
expanded={expanded}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: "sa"
})
}
option={option}
/>
</li>
);
};

View file

@ -4,6 +4,7 @@ import OptionPreamble from "../OptionPreamble";
const DraftSettingUnits = props => {
const [value, setValue] = useState(props.dflt);
const [expanded, setExpanded] = useState(false);
const update = (name, newValue, evt) => {
props.updateValue(props.name, newValue);
@ -15,8 +16,22 @@ const DraftSettingUnits = props => {
props.updateValue(props.name, props.dflt);
};
const toggleExpanded = () => setExpanded(!expanded);
let option = (
<FormFieldList
name="units"
value={value}
dflt={props.dflt}
onChange={update}
label="po-bool-units"
updateValue={update}
list={props.list}
/>
);
return (
<div className={"pattern-option list"}>
<li>
<OptionPreamble
dflt={props.dflt}
value={value}
@ -25,23 +40,17 @@ const DraftSettingUnits = props => {
id="po-list-units"
displayValue={props.list[value]}
reset={reset}
toggleExpanded={toggleExpanded}
expanded={expanded}
showHelp={() =>
props.triggerAction("showHelp", {
type: "draftSetting",
value: "units"
})
}
option={option}
/>
<FormFieldList
name="units"
value={value}
dflt={props.dflt}
onChange={update}
label="po-bool-units"
updateValue={update}
list={props.list}
/>
</div>
</li>
);
};

View file

@ -4,9 +4,6 @@ import { gistDefaults } from "../utils";
import { patternInfo, patternList } from "@freesewing/patterns";
import { FormattedMessage } from "react-intl";
import List from "@material-ui/core/List";
import ListSubheader from "@material-ui/core/ListSubheader";
import CollapsedIcon from "@material-ui/icons/KeyboardArrowDown";
import ExpandedIcon from "@material-ui/icons/ArrowRight";
import DraftSettingSa from "../DraftSettingSa";
import DraftSettingMargin from "../DraftSettingMargin";
import DraftSettingComplete from "../DraftSettingComplete";
@ -14,6 +11,7 @@ import DraftSettingPaperless from "../DraftSettingPaperless";
import DraftSettingUnits from "../DraftSettingUnits";
import DraftSettingLanguage from "../DraftSettingLanguage";
import DraftSettingOnly from "../DraftSettingOnly";
import DownIcon from "@material-ui/icons/KeyboardArrowDown";
const DraftSettings = props => {
const [expanded, setExpanded] = useState([]);
@ -104,27 +102,24 @@ const DraftSettings = props => {
{Object.keys(groups).map(group => {
let open = true;
if (expanded.indexOf(group) === -1) open = false;
let children = null;
if (open) children = groups[group].map(component => component);
return (
<React.Fragment key={group + "-ghead"}>
<ListSubheader
className="optiongroup-heading"
className={
(open ? "expanded" : "collapsed") + " optiongroup-heading"
}
onClick={() => toggleGroup(group)}
<React.Fragment>
<li
className={open ? "expanded" : "collapsed"}
key={group + "-ghead"}
>
<h3>
{open ? (
<CollapsedIcon className="collapse-icon" />
) : (
<ExpandedIcon className="collapse-icon" />
)}
<h3 onClick={() => toggleGroup(group)}>
<DownIcon
className={
"icon-col-exp " + (open ? "expanded" : "collapsed")
}
/>
<FormattedMessage id={"optiongroups." + group} />
</h3>
</ListSubheader>
{expanded.indexOf(group) === -1
? null
: groups[group].map(component => component)}
</li>
{children}
</React.Fragment>
);
})}

View file

@ -13,6 +13,7 @@ import CollapsedIcon from "@material-ui/icons/ArrowDropDown";
import ExpandedIcon from "@material-ui/icons/ArrowRight";
import PatternOptions from "../PatternOptions";
import DraftSettings from "../DraftSettings";
import DraftActions from "../DraftActions";
const GistConfigurator = props => {
console.log(languages);
@ -60,6 +61,12 @@ const GistConfigurator = props => {
languages={languages[props.intl.locale]}
/>
</li>
<li>
<h2>
<FormattedMessage id="app.save" />
</h2>
<DraftActions />
</li>
</ul>
);
};

View file

@ -9,7 +9,6 @@ import { optionType, defaultGist, gistDefaults } from "../utils";
import { patternInfo, patternList } from "@freesewing/patterns";
import { FormattedMessage } from "react-intl";
import List from "@material-ui/core/List";
import ListSubheader from "@material-ui/core/ListSubheader";
import DownIcon from "@material-ui/icons/KeyboardArrowDown";
const PatternOptions = props => {
@ -48,7 +47,9 @@ const PatternOptions = props => {
output.push(
<li className={open ? "expanded" : "collapsed"} key={group + "-ghead"}>
<h3 onClick={() => toggleGroup(group)}>
<DownIcon className={"icon-col-exp "+ (open ? "expanded" : "collapsed")}/>
<DownIcon
className={"icon-col-exp " + (open ? "expanded" : "collapsed")}
/>
<FormattedMessage id={"optiongroups." + group} />
</h3>
{children}