import React, { useState } from 'react' import PropTypes from 'prop-types' import Draft from '../../Draft' import Design from '../Design' import DraftConfigurator from '../../DraftConfigurator' import { FormattedMessage } from 'react-intl' import Prism from 'prismjs' import fileSaver from 'file-saver' import theme from '@freesewing/plugin-theme' const DraftPattern = props => { const [design, setDesign] = useState(true) const [focus, setFocus] = useState(null) const raiseEvent = (type, data) => { if (type === 'clearFocusAll') { props.updateGist(false, 'settings', 'only') return setFocus(null) } let f = {} if (focus !== null) f = { ...focus } if (typeof f[data.part] === 'undefined') f[data.part] = { paths: [], points: [], coords: [] } if (type === 'point') f[data.part].points.push(data.name) else if (type === 'path') f[data.part].paths.push(data.name) else if (type === 'coords') f[data.part].coords.push(data.coords) else if (type === 'clearFocus') { let i = focus[data.part][data.type].indexOf(data.name) f[data.part][data.type].splice(i, 1) } else if (type === 'part') props.updateGist(data, 'settings', 'only') setFocus(f) } const svgToFile = svg => { const blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8' }) fileSaver.saveAs(blob, 'freesewing-' + props.config.name + '.svg') } if (props.svgExport) { svgToFile( new props.Pattern({ ...props.gist.settings, embed: false }) .use(theme) .draft() .render() ) props.setSvgExport(false) } const styles = { paragraph: { padding: '0 1rem' } } let pattern = new props.Pattern(props.gist.settings) pattern.draft() let patternProps = pattern.getRenderProps() let focusCount = 0 if (focus !== null) { for (let p of Object.keys(focus)) { for (let i in focus[p].points) focusCount++ for (let i in focus[p].paths) focusCount++ for (let i in focus[p].coords) focusCount++ } } let gist = Prism.highlight( JSON.stringify(props.gist, null, 2), Prism.languages.javascript, 'javascript' ) return (