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
- : (
-
- {props.children.map(mode => (
- -
-
-
- ))}
-
- )
-
-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'