From 44de907aadd1fc5fe8023cb6f3ed16c485b84396 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Fri, 6 Sep 2019 13:54:30 +0200 Subject: [PATCH] :lipstick: Fixed styling in DraftConfigurator for pattern options 3 levels deep --- config/changelog.yaml | 3 + .../DraftConfigurator/OptionGroup/index.js | 142 +++++++++--------- .../src/components/_draft-configurator.scss | 19 ++- 3 files changed, 89 insertions(+), 75 deletions(-) diff --git a/config/changelog.yaml b/config/changelog.yaml index c93e04cd301..61c4672c019 100644 --- a/config/changelog.yaml +++ b/config/changelog.yaml @@ -7,11 +7,14 @@ Unreleased: Deprecated: Removed: Fixed: + css-theme: + - Updated styles for DraftConfigurator component for pattern options 3 levels deep components: - "[#104](https://github.com/freesewing/freesewing.org/issues/104): Changed `onDragEnd` to `onChangeCommitted` in slider element (change in material-ui API when slider came out of beta)" - Workbench now also lets you preload a `withBreasts` set of measurements + - DraftConfigurator now properly styles pattern options 3 levels deep create-freesewing-pattern: - Added missing `file-saver` dependency Security: diff --git a/packages/components/src/DraftConfigurator/OptionGroup/index.js b/packages/components/src/DraftConfigurator/OptionGroup/index.js index 073b41a3571..1452f937159 100644 --- a/packages/components/src/DraftConfigurator/OptionGroup/index.js +++ b/packages/components/src/DraftConfigurator/OptionGroup/index.js @@ -1,104 +1,104 @@ -import React from "react"; -import PropTypes from "prop-types"; -import Pct from "../PatternOptionPercentage"; -import Deg from "../PatternOptionDegree"; -import Mm from "../PatternOptionMillimeter"; -import Bool from "../PatternOptionBool"; -import List from "../PatternOptionList"; -import Count from "../PatternOptionCount"; -import optionType from "@freesewing/utils/optionType"; -import optionDefault from "@freesewing/utils/optionDefault"; -import { FormattedMessage } from "react-intl"; -import { injectIntl } from "react-intl"; +import React from 'react' +import PropTypes from 'prop-types' +import Pct from '../PatternOptionPercentage' +import Deg from '../PatternOptionDegree' +import Mm from '../PatternOptionMillimeter' +import Bool from '../PatternOptionBool' +import List from '../PatternOptionList' +import Count from '../PatternOptionCount' +import optionType from '@freesewing/utils/optionType' +import optionDefault from '@freesewing/utils/optionDefault' +import { FormattedMessage } from 'react-intl' +import { injectIntl } from 'react-intl' +import RightIcon from '@material-ui/icons/KeyboardArrowRight' const OptionGroup = props => { const renderOption = (name, sub = false) => { - let option = props.config.options[name]; - let type = optionType(option); - let stringKey = `options.${props.config.name}.${name}.`; + let option = props.config.options[name] + let type = optionType(option) + let stringKey = `options.${props.config.name}.${name}.` let extraProps = { name, dflt: optionDefault(name, props.config.options[name], props.recipe), units: props.units, updateValue: props.updateValue, raiseEvent: props.raiseEvent, - title: , - desc: , + title: , + desc: , intl: props.intl, pattern: props.config.name, key: name, noDocs: props.noDocs - }; - if ( - typeof props.gist !== "undefined" && - typeof props.gist.settings !== "undefined" && - typeof props.gist.settings.options !== "undefined" && - typeof props.gist.settings.options[name] !== "undefined" - ) - extraProps.value = props.gist.settings.options[name]; - else extraProps.value = null; - - let noyes = [ - , - - ]; - switch (type) { - case "pct": - return ; - break; - case "deg": - return ; - break; - case "mm": - return ; - break; - case "bool": - return ; - break; - case "list": - return ; - break; - case "count": - return ; - break; - default: - throw new Error("Unsupported option type: " + type); } - }; + if ( + typeof props.gist !== 'undefined' && + typeof props.gist.settings !== 'undefined' && + typeof props.gist.settings.options !== 'undefined' && + typeof props.gist.settings.options[name] !== 'undefined' + ) + extraProps.value = props.gist.settings.options[name] + else extraProps.value = null + + let noyes = [, ] + switch (type) { + case 'pct': + return + break + case 'deg': + return + break + case 'mm': + return + break + case 'bool': + return + break + case 'list': + return + break + case 'count': + return + break + default: + throw new Error('Unsupported option type: ' + type) + } + } return ( {props.options.map(name => { //let key = name; - let output = []; - if (typeof name === "object") { + let output = [] + if (typeof name === 'object') { //key = Object.keys(name).pop(); // Subgroup for (let subGroup of Object.keys(name)) { + let children = [] + for (let option of name[subGroup]) children.push(renderOption(option, true)) output.push( - - - - ); - let children = []; - for (let option of name[subGroup]) - children.push(renderOption(option, true)); - output.push(
    {children}
); +
  • + + + + +
      {children}
    +
  • + ) } - } else output.push(renderOption(name)); + } else output.push(renderOption(name)) - return output; + return output })}
    - ); -}; + ) +} OptionGroup.propTypes = { config: PropTypes.object.isRequired, options: PropTypes.array.isRequired, - units: PropTypes.oneOf(["metric", "imperial"]).isRequired -}; + units: PropTypes.oneOf(['metric', 'imperial']).isRequired +} -OptionGroup.defaultProps = {}; +OptionGroup.defaultProps = {} -export default injectIntl(OptionGroup); +export default injectIntl(OptionGroup) diff --git a/packages/css-theme/src/components/_draft-configurator.scss b/packages/css-theme/src/components/_draft-configurator.scss index 747057672ff..a45ec9a9854 100644 --- a/packages/css-theme/src/components/_draft-configurator.scss +++ b/packages/css-theme/src/components/_draft-configurator.scss @@ -40,15 +40,18 @@ div.collapsed { display: none; } ul.config.l2 > li > div, -ul.config.l3 > li > div { +ul.config.l3 > li > div, +ul.config.l4 > li > div { padding: 0.25rem 1.5rem 0.25rem 1.5rem; } -ul.config.l3 > li > div.expanded { +ul.config.l3 > li > div.expanded, +ul.config.l4 > li > div.expanded { margin: 0 0 2rem 0; padding: 0.75 0.5rem 1.5rem; } ul.config.l2 > li > div:hover, -ul.config.l3 > li > div:hover { +ul.config.l3 > li > div:hover, +ul.config.l4 > li > div:hover { cursor: pointer; background: $oc-gray-4; } @@ -63,7 +66,15 @@ div.expanded div.MuiSlider-container { overflow: initial; } ul.config p { @include body-font;} -ul.config.l4 li { padding-left: 0.75rem; } + +/* level 4 */ +ul.config.l3 li span.subheading { + padding-left: 2rem; + font-weight: bold; +} +ul.config.l4 > li > div { padding-left: 2.5rem; } + + span.dflt, span.custom { padding: 2px 4px;