2023-08-26 16:13:11 +02:00
|
|
|
// Dependencies
|
|
|
|
import { nsMerge } from 'shared/utils.mjs'
|
2023-06-20 02:57:44 -05:00
|
|
|
import { ns as authNs } from 'shared/components/wrappers/auth/index.mjs'
|
2023-08-26 16:13:11 +02:00
|
|
|
import { designMeasurements } from 'shared/utils.mjs'
|
|
|
|
// Hooks
|
|
|
|
import { useTranslation } from 'next-i18next'
|
|
|
|
import { useLoadingStatus } from 'shared/hooks/use-loading-status.mjs'
|
|
|
|
// Components
|
|
|
|
import { SetPicker, ns as setsNs } from 'shared/components/account/sets.mjs'
|
2023-06-20 02:57:44 -05:00
|
|
|
import { Tabs, Tab } from 'shared/components/mdx/tabs.mjs'
|
|
|
|
import { MeasiesEditor } from './editor.mjs'
|
2023-07-23 18:42:06 +02:00
|
|
|
import { Popout } from 'shared/components/popout/index.mjs'
|
2023-08-26 16:13:11 +02:00
|
|
|
|
|
|
|
export const ns = nsMerge(authNs, setsNs)
|
2023-06-20 14:27:00 -05:00
|
|
|
|
2023-08-26 18:23:22 +02:00
|
|
|
const tabNames = ['account:chooseASet', 'editCurrentMeasies']
|
2023-06-15 18:33:30 +02:00
|
|
|
|
2023-06-20 13:56:38 -05:00
|
|
|
export const MeasiesView = ({ design, Design, settings, update, missingMeasurements, setView }) => {
|
2023-07-26 16:48:34 -06:00
|
|
|
const { t } = useTranslation(['workbench'])
|
2023-08-26 16:13:11 +02:00
|
|
|
const { setLoadingStatus, LoadingStatus } = useLoadingStatus()
|
2023-06-20 14:27:00 -05:00
|
|
|
|
2023-06-20 02:57:44 -05:00
|
|
|
const tabs = tabNames.map((n) => t(n)).join(',')
|
2023-06-20 17:30:18 +02:00
|
|
|
|
2023-06-20 20:19:31 +02:00
|
|
|
const loadMeasurements = (set) => {
|
2023-06-20 14:27:00 -05:00
|
|
|
update.settings([
|
|
|
|
[['measurements'], designMeasurements(Design, set.measies)],
|
|
|
|
[['units'], set.imperial ? 'imperial' : 'metric'],
|
|
|
|
])
|
2023-06-20 13:56:38 -05:00
|
|
|
setView('draft')
|
2023-08-26 16:13:11 +02:00
|
|
|
setLoadingStatus([true, 'appliedMeasies', true, true])
|
2023-06-20 20:19:31 +02:00
|
|
|
}
|
|
|
|
|
2023-06-20 02:57:44 -05:00
|
|
|
return (
|
2023-08-26 16:13:11 +02:00
|
|
|
<div className="max-w-7xl mx-auto my-6">
|
|
|
|
<LoadingStatus />
|
|
|
|
<h1 className="m-auto text-center">{t('account:measurements')}</h1>
|
2023-06-20 17:30:18 +02:00
|
|
|
{missingMeasurements ? (
|
2023-08-26 16:13:11 +02:00
|
|
|
<Popout note dense noP>
|
|
|
|
<h5>{t('weLackSomeMeasies', { nr: missingMeasurements.length })}</h5>
|
|
|
|
<ol className="list list-inside ml-4 list-decimal">
|
|
|
|
{missingMeasurements.map((m, i) => (
|
|
|
|
<li key={i}>{t(`measurements:${m}`)}</li>
|
|
|
|
))}
|
|
|
|
</ol>
|
|
|
|
<p className="text-lg">{t('youCanPickOrEnter')}</p>
|
2023-06-20 17:30:18 +02:00
|
|
|
</Popout>
|
|
|
|
) : (
|
2023-08-26 16:13:11 +02:00
|
|
|
<Popout note compact ense oP>
|
|
|
|
<span className="text-lg">{t('measiesOk')}</span>
|
2023-06-20 17:30:18 +02:00
|
|
|
</Popout>
|
|
|
|
)}
|
2023-06-20 02:57:44 -05:00
|
|
|
<Tabs tabs={tabs}>
|
2023-06-20 13:56:38 -05:00
|
|
|
<Tab key="choose">
|
|
|
|
<SetPicker design={design} clickHandler={loadMeasurements} />
|
|
|
|
</Tab>
|
2023-06-20 02:57:44 -05:00
|
|
|
<Tab key="edit">
|
|
|
|
<MeasiesEditor {...{ Design, settings, update }} />
|
|
|
|
</Tab>
|
|
|
|
</Tabs>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|