diff --git a/packages/freesewing.lab/hooks/useApp.js b/packages/freesewing.lab/hooks/useApp.js
index c3b3ab980ad..c8bc39e18d0 100644
--- a/packages/freesewing.lab/hooks/useApp.js
+++ b/packages/freesewing.lab/hooks/useApp.js
@@ -141,6 +141,7 @@ function useApp(full = true) {
// Translation
t,
+ languages: Object.keys(strings),
}
}
diff --git a/packages/freesewing.shared/components/workbench/default-settings.js b/packages/freesewing.shared/components/workbench/default-settings.js
new file mode 100644
index 00000000000..3faf00621d2
--- /dev/null
+++ b/packages/freesewing.shared/components/workbench/default-settings.js
@@ -0,0 +1,11 @@
+const defaultSettings = {
+ sa: 0,
+ complete: true,
+ paperless: false,
+ units: 'metric',
+ locale: 'en',
+ margin: 2,
+ debug: true,
+}
+
+export default defaultSettings
diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-list.js b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-list.js
new file mode 100644
index 00000000000..04d2b4cbe69
--- /dev/null
+++ b/packages/freesewing.shared/components/workbench/menu/core-settings/core-setting-list.js
@@ -0,0 +1,48 @@
+import { useState } from 'react'
+
+const CoreSettingList = props => {
+ const { dflt, list } = props
+ const val = props.gist?.settings?.[props.setting]
+
+ const [value, setValue] = useState(val)
+
+ const handleChange = (newVal) => {
+ if (newVal === dflt) reset()
+ else {
+ setValue(newVal)
+ props.updateGist(['settings', props.setting], newVal)
+ }
+ }
+
+ return (
+
+
+ {props.app.t(`settings.${props.setting}.description`)}
+
+
+
+ {props.list.map(entry => (
+
+ ))}
+
+
+
+ )
+}
+
+export default CoreSettingList
diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/index.js b/packages/freesewing.shared/components/workbench/menu/core-settings/index.js
new file mode 100644
index 00000000000..c5f76e2fdb9
--- /dev/null
+++ b/packages/freesewing.shared/components/workbench/menu/core-settings/index.js
@@ -0,0 +1,39 @@
+import SettingsIcon from 'shared/components/icons/settings.js'
+import { linkClasses, Chevron } from 'shared/components/navigation/primary.js'
+import Setting from './setting.js'
+
+const settings = {
+ locale: {
+ dflt: 'en',
+ list: ['de', 'en', 'es', 'fr', 'nl'],
+ },
+}
+
+const CoreSettings = props => {
+
+ return (
+
+
+
+
+ {props.app.t('app.settings')}
+
+
+
+
+ {Object.keys(settings).map(setting => (
+
+ ))}
+
+
+ )
+}
+
+export default CoreSettings
diff --git a/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js b/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js
new file mode 100644
index 00000000000..150e616c706
--- /dev/null
+++ b/packages/freesewing.shared/components/workbench/menu/core-settings/setting.js
@@ -0,0 +1,169 @@
+import { linkClasses, Chevron } from 'shared/components/navigation/primary.js'
+import PctDegOption from 'shared/components/workbench/inputs/design-option-pct-deg'
+import CountOption from 'shared/components/workbench/inputs/design-option-count'
+import ListSetting from './core-setting-list'
+import { formatMm, formatPercentage, optionType } from 'shared/utils.js'
+
+const settings = {
+ locale: props => {
+ return (
+
+ {props.app.t(`i18n.${props.gist.settings.locale}`)}
+
+ )
+ },
+ pct: props => {
+ const val = (typeof props.gist?.options?.[props.option] === 'undefined')
+ ? props.pattern.config.options[props.option].pct/100
+ : props.gist.options[props.option]
+ return (
+
+ {formatPercentage(val)}
+ {props.pattern.config.options[props.option]?.toAbs
+ ? ' | ' +formatMm(props.pattern.config.options[props.option]?.toAbs(val, props.gist))
+ : null
+ }
+
+ )
+ },
+ bool: props => {
+ const dflt = props.pattern.config.options[props.option].bool
+ const current = props.gist?.options?.[props.option]
+ return (
+
+ {props.gist?.options?.[props.option]
+ ? props.app.t('app.yes')
+ : props.app.t('app.no')
+ }
+
+ )
+ },
+ count: props => {
+ const dflt = props.pattern.config.options[props.option].count
+ const current = props.gist?.options?.[props.option]
+ return (dflt==current || typeof current === 'undefined')
+ ? {dflt}
+ : {current}
+ },
+ deg: props => {
+ const dflt = props.pattern.config.options[props.option].deg
+ const current = props.gist?.options?.[props.option]
+ return (dflt==current || typeof current === 'undefined')
+ ? {dflt}°
+ : {current}°
+ },
+ mm: props => {
+ return No mm val yet
+ },
+ constant: props => {
+ return No constant val yet
+ },
+}
+
+const Tmp = props => not yet
+
+const inputs = {
+ locale: props => ({
+ key,
+ title: props.app.t(`i18n.${key}`)
+ }))}
+ />,
+}
+
+
+const Setting = props => {
+ 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 (
+
+
+
+
+
+ <>°>
+
+
+ { props.app.t(`settings.${props.setting}.title`) }
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Setting
diff --git a/packages/freesewing.shared/components/workbench/menu/index.js b/packages/freesewing.shared/components/workbench/menu/index.js
index 2ce8d73cc0b..6482e517c74 100644
--- a/packages/freesewing.shared/components/workbench/menu/index.js
+++ b/packages/freesewing.shared/components/workbench/menu/index.js
@@ -1,11 +1,17 @@
import ModesMenu from './modes.js'
import DesignOptions from './design-options'
+import CoreSettings from './core-settings'
const WorkbenchMenu = props => {
return (
)
}
diff --git a/packages/freesewing.shared/components/wrappers/workbench.js b/packages/freesewing.shared/components/wrappers/workbench.js
index 007899e99a1..05b7a73bd69 100644
--- a/packages/freesewing.shared/components/wrappers/workbench.js
+++ b/packages/freesewing.shared/components/wrappers/workbench.js
@@ -6,21 +6,20 @@ import Measurements, { Input } from 'shared/components/workbench/measurements/in
import LabDraft from 'shared/components/workbench/draft/index.js'
import set from 'lodash.set'
import unset from 'lodash.unset'
+import defaultSettings from 'shared/components/workbench/default-settings.js'
+
// Generates a default pattern gist to start from
-const defaultGist = (pattern, language='en') => ({
+const defaultGist = (pattern, language='en') => {
+ const gist = {
design: pattern.config.name,
version: pattern.config.version,
- settings: {
- sa: 0,
- complete: true,
- paperless: false,
- units: 'metric',
- locale: language,
- margin: 2,
- debug: true,
+ settings: defaultSettings
}
-})
+ if (language) gist.settings.locale = language
+
+ return gist
+}
const hasRequiredMeasurements = (pattern, gist) => {
for (const m of pattern.config.measurements) {