import { freeSewingConfig as conf } from 'shared/config/freesewing.config.mjs' // Hooks import { useState, useContext, useEffect } from 'react' import { useTranslation } from 'next-i18next' import { useAccount } from 'shared/hooks/use-account.mjs' import { useBackend } from 'shared/hooks/use-backend.mjs' import { useToast } from 'shared/hooks/use-toast.mjs' // Context import { NavigationContext } from 'shared/context/navigation-context.mjs' // Components import Markdown from 'react-markdown' import { Spinner } from 'shared/components/spinner.mjs' import { Error404, ns as ns404 } from 'shared/components/errors/404.mjs' import { PatternPreview } from 'shared/components/pattern/preview.mjs' import { SettingsIcon, DownloadIcon, TrashIcon, OkIcon, NoIcon, DesignIcon, MeasieIcon, } from 'shared/components/icons.mjs' import { capitalize } from 'shared/utils.mjs' import Link from 'next/link' import Timeago from 'react-timeago' import { PageLink } from 'shared/components/page-link.mjs' import { Popout } from 'shared/components/popout/index.mjs' import { EditRow } from 'shared/components/account/patterns.mjs' export const ns = [...ns404, 'toast'] export const ManagePattern = ({ id = false }) => { // Context const { addPages } = useContext(NavigationContext) // State const [pattern, setPattern] = useState({}) const [error, setError] = useState(false) // Hooks const { account, token } = useAccount() const backend = useBackend(token) const { t, i18n } = useTranslation(ns) const { language } = i18n const toast = useToast() // async effect helper const loadPattern = async () => { const result = await backend.getPattern(id) if (result.success) { if (result.data.pattern) { setPattern(result.data.pattern) addPages([ [ ['patterns', '' + result.data.pattern.id], { t: result.data.pattern.name, s: `patterns/${pattern.id}` }, ], ]) } } else { if (result.response.response.status === 404) setError(404) } } // Effect useEffect(() => { if (id && Number(id) !== pattern.id) loadPattern() }, [id, pattern.id]) if (error === 404) return if (!pattern.id) return let measurements = {} if (pattern.set) measurements = pattern.set.measies else if (pattern.cset) measurements = pattern.cset.measies // Helper method to toggle public setting const togglePublic = async () => { const pub = !pattern.public const result = await backend.updatePattern(pattern.id, { public: pub }) if (result.success) { if (result.data.pattern) { setPattern(result.data.pattern) toast.for.settingsSaved() } } } // Helper method to re-fetch pattern from backend const refresh = () => loadPattern() return (
}> {pattern.design} }> {pattern.cset ? pattern.cset[`name${capitalize(language)}`] : pattern.set?.name}
{pattern.notes ? ( <>

{t('notes')}

{pattern.notes}
) : null} {pattern.userId === account.id ? ( <>

{t('update')}

{/* Name is always shown */} {pattern.name} {/* img: Control level determines whether or not to show this */} {pattern.id && account.control >= conf.account.patterns.img ? ( ) : null} {/* notes: Control level determines whether or not to show this */} {account.control >= conf.account.patterns.notes ? ( {pattern.notes} ) : null} ) : null}
Fix pattern overflow
img {t('draftPattern')} {t('exportPattern')} {account.control > 2 ? ( ) : null} {account.control > 2 ? (
  • {t('permalink')}: {pattern.public ? ( ) : ( )}
  • {t('created')}:
  • {t('updated')}:
) : null}
) }