From 18f9e93cc0074f91cee7caa29c82c3e5ac638200 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Fri, 28 Jan 2022 13:39:07 +0100 Subject: [PATCH] feat(lab): Paperless and render settings --- .../components/workbench/default-settings.js | 5 +- .../components/workbench/draft/index.js | 10 +- .../workbench/draft/text-on-path/index.js | 7 +- .../menu/core-settings/core-setting-bool.js | 54 +++++++++++ .../core-settings/core-setting-sa-bool.js | 61 ++++++++++++ .../menu/core-settings/core-setting-sa-mm.js | 75 +++++++++++++++ .../workbench/menu/core-settings/index.js | 18 ++++ .../workbench/menu/core-settings/setting.js | 93 +++++++++---------- .../components/wrappers/workbench.js | 1 + 9 files changed, 269 insertions(+), 55 deletions(-) create mode 100644 packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-bool.js create mode 100644 packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-bool.js create mode 100644 packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-mm.js diff --git a/packages/freesewing.shared/components/workbench/default-settings.js b/packages/freesewing.shared/components/workbench/default-settings.js index 3faf00621d2..cfaaa3d2a32 100644 --- a/packages/freesewing.shared/components/workbench/default-settings.js +++ b/packages/freesewing.shared/components/workbench/default-settings.js @@ -1,11 +1,14 @@ const defaultSettings = { sa: 0, + saBool: false, + saMm: 10, complete: true, paperless: false, units: 'metric', locale: 'en', margin: 2, - debug: true, + renderer: 'react', + embed: true, } export default defaultSettings diff --git a/packages/freesewing.shared/components/workbench/draft/index.js b/packages/freesewing.shared/components/workbench/draft/index.js index 4908587694d..42b751a9019 100644 --- a/packages/freesewing.shared/components/workbench/draft/index.js +++ b/packages/freesewing.shared/components/workbench/draft/index.js @@ -2,11 +2,17 @@ import React, { useState } from 'react' import Svg from './svg' import Defs from './defs' import Part from './part' +import theme from 'pkgs/plugin-theme/src/index.js' const LabDraft = ({ app, pattern, gist, updateGist }) => { - const patternInstance = new pattern(gist).draft() - const patternProps = patternInstance.getRenderProps() + const patternInstance = new pattern(gist) + if (gist?.renderer === 'svg') return
+ + const patternProps = patternInstance.draft().getRenderProps() + console.log(patternProps) + return ( diff --git a/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js b/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js index 8972c7f31da..29eb91d25c0 100644 --- a/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js +++ b/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js @@ -1,6 +1,6 @@ const TextOnPath = (props) => { const text = [] - // Handle translation + // Handle translation (and spaces) let translated = '' for (let string of props.path.attributes.getAsArray('data-text')) { translated += props.app.t(string, false, props.locale).replace(/"/g, '"') + ' ' @@ -16,7 +16,10 @@ const TextOnPath = (props) => { return ( - {translated} + ) diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-bool.js b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-bool.js new file mode 100644 index 00000000000..e5aa79caaae --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-bool.js @@ -0,0 +1,54 @@ +import { useState } from 'react' +import { linkClasses } from 'shared/components/navigation/primary.js' + +const CoreSettingBool = props => { + const val = props.gist[props.setting] + const dflt = props.dflt + + const [value, setValue] = useState(val) + + const toggle = (evt) => { + props.updateGist([props.setting], !value) + setValue(!value) + } + + return ( +
  • + +
  • + ) +} + +export default CoreSettingBool diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-bool.js b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-bool.js new file mode 100644 index 00000000000..9cb1a87a969 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-bool.js @@ -0,0 +1,61 @@ +import { useState } from 'react' +import { linkClasses } from 'shared/components/navigation/primary.js' + +const CoreSettingSaBool = props => { + const val = props.gist.saBool || false + + const [value, setValue] = useState(val) + + const toggle = () => { + props.setGist({ + ...props.gist, + saBool: !value, + sa: value ? 0 : props.gist.saMm + }) + setValue(!value) + } + + return ( +
  • + +
  • + ) +} + +export default CoreSettingSaBool diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-mm.js b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-mm.js new file mode 100644 index 00000000000..941bdfa1aeb --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-sa-mm.js @@ -0,0 +1,75 @@ +import { useState } from 'react' +import { formatMm } from 'shared/utils.js' +import ClearIcon from 'shared/components/icons/clear.js' +import EditIcon from 'shared/components/icons/edit.js' + +const CoreSettingMm = props => { + const { dflt, min, max } = props + const val = props.gist?.[props.setting] + + const [value, setValue] = useState(val) + + const handleChange = evt => { + const newVal = parseFloat(evt.target.value) + + setValue(newVal) + if (props.gist.sa) props.setGist({ + ...props.gist, + saMm: newVal, + sa: newVal, + }) + else props.updateGist(['saMm'], newVal) + } + const reset = () => { + setValue(dflt) + props.updateGist(['saMm'], dflt) + } + + + return ( +
    +

    + {props.app.t(`settings.sa.description`)} +

    +
    + + + +
    + +
    + + +
    +
    + ) +} + +export default CoreSettingMm diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/index.js b/packages/freesewing.shared/components/workbench/menu/core-settings/index.js index 057b0464ec5..6dd73e60aa6 100644 --- a/packages/freesewing.shared/components/workbench/menu/core-settings/index.js +++ b/packages/freesewing.shared/components/workbench/menu/core-settings/index.js @@ -3,6 +3,17 @@ import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' import Setting from './setting.js' const settings = { + paperless: { + dflt: false, + }, + saBool: { + dflt: false, + }, + saMm: { + min: 0, + max: 25, + dflt: 10, + }, locale: { list: ['de', 'en', 'es', 'fr', 'nl'], }, @@ -14,6 +25,13 @@ const settings = { max: 25, dflt: 2, }, + renderer: { + list: ['react', 'svg'], + titles: { + react: ' (React)', + svg: '@freesewing/core (SVG)' + } + }, } const CoreSettings = props => { diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js b/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js index dcd27118a4a..f1a4fdc9ccc 100644 --- a/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js +++ b/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js @@ -3,9 +3,19 @@ import PctDegOption from 'shared/components/workbench/inputs/design-option-pct-d import CountOption from 'shared/components/workbench/inputs/design-option-count' import ListSetting from './core-setting-list' import MmSetting from './core-setting-mm' +import BoolSetting from './core-setting-bool.js' +import SaBoolSetting from './core-setting-sa-bool.js' +import SaMmSetting from './core-setting-sa-mm.js' import { formatMm, formatPercentage, optionType } from 'shared/utils.js' const settings = { + paperless: props => { + return ( + + {props.app.t(`app.${props.gist.paperless ? 'yes' : 'no'}`)} + + ) + }, locale: props => { return ( @@ -27,10 +37,20 @@ const settings = { }} /> ) }, + saMm: props => { + return ( + + ) + }, + renderer: props => ( + + {props.config.titles[props.gist.renderer]} + + ), } -const Tmp = props =>

    not yet

    - const inputs = { locale: props => , margin: props => , + saMm: props => , + renderer: props => ({ + key, + title: props.config.titles[key] + }))} + />, } const Setting = props => { + + if (props.setting === 'saBool') return + if (props.setting === 'paperless') return + const Input = inputs[props.setting] const Value = settings[props.setting] - const toggleBoolean = () => { - const dflt = props.pattern.config.options[props.option].bool - const current = props.gist?.options?.[props.option] - if (typeof current === 'undefined') - props.updateGist(['options', props.option], !dflt) - else props.unsetGist(['options', props.option]) - } - - if (props.setting === 'bool') return ( -
  • - -
  • - - ) - return (
  • @@ -123,9 +110,15 @@ const Setting = props => { `}> <>° - - { props.app.t(`settings.${props.setting}.title`) } - + {props.setting === 'saMm' + ? ( + <> + {props.app.t(`settings.sa.title`)} + [ {props.app.t(`app.size`)} ] + + ) + : {props.app.t(`settings.${props.setting}.title`)} + }
  • diff --git a/packages/freesewing.shared/components/wrappers/workbench.js b/packages/freesewing.shared/components/wrappers/workbench.js index 1e5439d145b..bd3206c7a44 100644 --- a/packages/freesewing.shared/components/wrappers/workbench.js +++ b/packages/freesewing.shared/components/wrappers/workbench.js @@ -80,6 +80,7 @@ const WorkbenchWrapper = ({ app, pattern }) => { gist={gist} updateGist={updateGist} unsetGist={unsetGist} + setGist={setGist} /> }