1
0
Fork 0
freesewing/sites/shared/components/sets/curated-set-candidate.mjs

69 lines
2.3 KiB
JavaScript
Raw Normal View History

2023-06-20 20:19:31 +02:00
import { ChoiceButton } from 'shared/components/choice-button.mjs'
2023-05-08 09:31:37 +02:00
import { ChoiceLink } from 'shared/components/choice-link.mjs'
import { OkIcon, NoIcon, WarningIcon } from 'shared/components/icons.mjs'
import { useTranslation } from 'next-i18next'
import { capitalize } from 'shared/utils.mjs'
export const ns = ['sets']
const Title = ({ set, language }) => (
<div className="flex flex-row items-center gap-2">
<img
alt="img"
src={set.img}
className="shadow mask mask-squircle bg-neutral aspect-square w-12 h-12"
/>
<span>{set[`name${capitalize(language)}`]}</span>
</div>
)
2023-06-20 20:19:31 +02:00
export const CuratedSetLacksMeasies = ({ set, design, t, language, href, clickHandler }) => {
const inner = (
2023-05-08 09:31:37 +02:00
<div className="flex flex-row gap-2 items-center">
<WarningIcon className="w-6 h-6 shrink-0 text-error" />
<span>{t('setLacksMeasiesForDesign', { design: t(`designs:${design}.t`) })}</span>
</div>
2023-06-20 20:19:31 +02:00
)
const wrapProps = {
icon: <NoIcon className="w-10 h-10 text-error" />,
title: <Title {...{ set, language }} />,
}
if (clickHandler) wrapProps.onClick = clickHandler
else if (href) wrapProps.href = href
2023-05-08 09:31:37 +02:00
2023-06-20 20:19:31 +02:00
const Component = clickHandler ? ChoiceButton : ChoiceLink
return <Component {...wrapProps}></Component>
}
export const CuratedSetSummary = ({ set, language, href, clickHandler }) => {
const wrapProps = {
icon: <OkIcon className="w-10 h-10 text-success" />,
title: <Title {...{ set, language }} />,
}
if (clickHandler) wrapProps.onClick = clickHandler
else if (href) wrapProps.href = href
const Component = clickHandler ? ChoiceButton : ChoiceLink
return <Component {...wrapProps}></Component>
}
2023-05-08 09:31:37 +02:00
export const CuratedSetCandidate = ({ set, design, requiredMeasies = [], href }) => {
2023-05-08 09:31:37 +02:00
const { t, i18n } = useTranslation(['sets'])
const { language } = i18n
const setProps = { set, design, t, language, href }
2023-05-08 09:31:37 +02:00
// Quick check for required measurements
if (!set.measies || Object.keys(set.measies).length < requiredMeasies.length)
return <CuratedSetLacksMeasies {...setProps} />
// Proper check for required measurements
for (const m of requiredMeasies) {
if (!Object.keys(set.measies).includes(m)) return <CuratedSetLacksMeasies {...setProps} />
}
return <CuratedSetSummary {...setProps} />
}