diff --git a/packages/freesewing.shared/components/workbench/menu.js b/packages/freesewing.shared/components/workbench/menu.js deleted file mode 100644 index 8243b17aa6e..00000000000 --- a/packages/freesewing.shared/components/workbench/menu.js +++ /dev/null @@ -1,114 +0,0 @@ -import { useState } from 'react' -import Link from 'next/link' -import orderBy from 'lodash.orderby' -import OptionsIcon from 'shared/components/icons/options.js' -import SettingsIcon from 'shared/components/icons/settings.js' -import MenuIcon from 'shared/components/icons/menu.js' -import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' - -// Component that renders a sublevel of navigation -const ModeButtons = props => props.children.length === 0 - ? null - : ( - - ) - -const groupMaker = (t, setMode, pattern) => ({ - modes: { - icon: , - title: t('app.modes'), - children: [ - { - name: 'measurements', - title: t('app.measurements'), - onClick: () => setMode('measurements') - }, - { - name: 'draft', - title: t('app.draftPattern', { pattern: pattern.config.name }), - onClick: () => setMode('draft') - }, - { - name: 'test', - title: t('app.testPattern', { pattern: pattern.config.name }), - onClick: () => setMode('test') - }, - { - name: 'export', - title: t('app.export'), - onClick: () => setMode('export') - }, - ] - }, - toggles: { - icon: , - title: `${t('cfp.turnOn')} / ${t('cfp.turnOff')}`, - }, - options: { - icon: , - title: t('app.designOptions'), - }, - settings: { - icon: , - title: t('app.settings') - }, -}) - -const WorkbenchMenu = props => { - const groups = groupMaker(props.app.t, props.setMode, props.pattern) - return ( - - ) -} - -export default WorkbenchMenu diff --git a/packages/freesewing.shared/components/workbench/menu/design-options/index.js b/packages/freesewing.shared/components/workbench/menu/design-options/index.js new file mode 100644 index 00000000000..34d27542653 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/design-options/index.js @@ -0,0 +1,32 @@ +import OptionsIcon from 'shared/components/icons/options.js' +import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' +import OptionGroup from './option-group' + +const DesignOptions = props => { + + return ( +
+ + + + {props.app.t('app.designOptions')} + + + +
    + {Object.keys(props.pattern.config.optionGroups).map(group => ( + + ))} +
+
+ ) +} + +export default DesignOptions diff --git a/packages/freesewing.shared/components/workbench/menu/design-options/option-group.js b/packages/freesewing.shared/components/workbench/menu/design-options/option-group.js new file mode 100644 index 00000000000..b60323afd19 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/design-options/option-group.js @@ -0,0 +1,49 @@ +import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' +import Option from './option' +import OptionSubGroup from './option-sub-group' + +const OptionGroup = props => { + const config = props.config || props.pattern.config.optionGroups[props.group] + return ( +
  • +
    + +
    + + <>° + + + { props.app.t(`optiongroups.${props.group}`) } + +
    + +
    +
      + {config.map(option => typeof option === 'string' + ?
    +
    +
  • + ) +} + +export default OptionGroup diff --git a/packages/freesewing.shared/components/workbench/menu/design-options/option-sub-group.js b/packages/freesewing.shared/components/workbench/menu/design-options/option-sub-group.js new file mode 100644 index 00000000000..1dfdbec9a80 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/design-options/option-sub-group.js @@ -0,0 +1,47 @@ +import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' +import Option from './option' + +const OptionSubGroup = props => { + return Object.keys(props.sub).map(name => ( +
  • +
    + +
    + + <>° + + + { props.app.t(`optiongroups.${name}`) } + +
    + +
    +
      + {props.sub[name].map(option => typeof option === 'string' + ?
    +
    +
  • + )) +} + +export default OptionSubGroup diff --git a/packages/freesewing.shared/components/workbench/menu/design-options/option.js b/packages/freesewing.shared/components/workbench/menu/design-options/option.js new file mode 100644 index 00000000000..298e8c9e32d --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/design-options/option.js @@ -0,0 +1,41 @@ +import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' + +const Option = props => { + return ( +
  • +
    + +
    + + <>° + + + { props.app.t(`options.${props.pattern.config.name}.${props.option}.title`) } + +
    + +
    + fixme +
    +
  • + ) +} + + //props.pattern.config.optionsgroups[props.group].map(option => ( +export default Option diff --git a/packages/freesewing.shared/components/workbench/menu/index.js b/packages/freesewing.shared/components/workbench/menu/index.js new file mode 100644 index 00000000000..2ce8d73cc0b --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/index.js @@ -0,0 +1,13 @@ +import ModesMenu from './modes.js' +import DesignOptions from './design-options' + +const WorkbenchMenu = props => { + return ( + + ) +} + +export default WorkbenchMenu diff --git a/packages/freesewing.shared/components/workbench/menu/modes.js b/packages/freesewing.shared/components/workbench/menu/modes.js new file mode 100644 index 00000000000..db00223d163 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/menu/modes.js @@ -0,0 +1,80 @@ +import MenuIcon from 'shared/components/icons/menu.js' +import OptionsIcon from 'shared/components/icons/options.js' +import { linkClasses, Chevron } from 'shared/components/navigation/primary.js' + +const Modes = props => { + const entries = [ + { + name: 'measurements', + title: props.app.t('app.measurements'), + onClick: () => props.setMode('measurements') + }, + { + name: 'draft', + title: props.app.t('app.draftPattern', { pattern: props.pattern.config.name }), + onClick: () => props.setMode('draft') + }, + { + name: 'test', + title: props.app.t('app.testPattern', { pattern: props.pattern.config.name }), + onClick: () => props.setMode('test') + }, + { + name: 'export', + title: props.app.t('app.export'), + onClick: () => props.setMode('export') + }, + ] + + return ( +
    + + + + {props.app.t('app.modes')} + + + +
      + {entries.map(entry => ( +
    • + +
    • + ))} +
    +
    + ) +} + +export default Modes diff --git a/packages/freesewing.shared/components/wrappers/workbench.js b/packages/freesewing.shared/components/wrappers/workbench.js index 7ca841e658e..11f16e33841 100644 --- a/packages/freesewing.shared/components/wrappers/workbench.js +++ b/packages/freesewing.shared/components/wrappers/workbench.js @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react' import useLocalStorage from 'shared/hooks/useLocalStorage.js' import Layout from 'shared/components/layouts/default' -import Menu from 'shared/components/workbench/menu.js' +import Menu from 'shared/components/workbench/menu/index.js' import Measurements, { Input } from 'shared/components/workbench/measurements/index.js' import LabDraft from 'shared/components/workbench/draft/index.js' import set from 'lodash.set'