import React, { useMemo, useEffect, useState } from 'react' import { MeasurementInput } from '../inputs/measurement.mjs' import { adult, doll, giant } from '@freesewing/models' import { CisFemaleIcon as WomenswearIcon, CisMaleIcon as MenswearIcon, } from 'shared/components/icons.mjs' import { useTranslation } from 'next-i18next' import { Setting } from '../menu/core-settings/setting.mjs' import { settings } from '../menu/core-settings/index.mjs' import { Tab, Tabs } from 'shared/components/mdx/tabs.mjs' const groups = { adult, doll, giant } const icons = { cisFemale: , cisMale: , } export const WorkbenchMeasurements = ({ app, design, gist, updateGist, gistReady }) => { const { t } = useTranslation(['app', 'cfp']) // Method to handle measurement updates const updateMeasurements = (value, m = false) => { if (m === false) { // Set all measurements updateGist('measurements', value) } else { // Set one measurement updateGist(['measurements', m], value) } } const [firstInvalid, setFirstInvalid] = useState(undefined) useEffect(() => { if (!gistReady) { return } for (const m of design.patternConfig?.measurements || []) { if (!gist?.measurements?.[m]) { setFirstInvalid(m) return } setFirstInvalid(undefined) } }, [gistReady]) // Save us some typing const inputProps = useMemo(() => ({ app, updateMeasurements, gist }), [app, gist]) const shortname = design.designConfig.data.name.replace('@freesewing/', '') return (

{shortname}: {t('measurements')}

{t('cfp:preloadMeasurements')}

{Object.keys(groups).map((group) => ( {Object.keys(icons).map((type) => (

{t(type)}

    {Object.keys(groups[group][type]).map((m) => (
  • ))}
))}
))}

{t('cfp:enterMeasurements')}

{design.patternConfig.measurements.length > 0 && ( <>

{t('requiredMeasurements')}

{design.patternConfig.measurements.map((m) => ( ))} )} {design.patternConfig.optionalMeasurements.length > 0 && ( <>

{t('optionalMeasurements')}

{design.patternConfig.optionalMeasurements.map((m) => ( ))} )}
) }