import React, { useState } from 'react' import Svg from './Svg' import Defs from './Defs' import Part from './Part' import Develop from './Develop' const PatternSvg = props => ( ) const Pattern = props => { const { pattern = 'examples', patterns = {}, children=null, options = {}, measurements = { head: 390}, part = '', sample, svgOnly=false, allowDevelop=true } = props const [develop, setDevelop] = useState(false) const [focus, setFocus] = useState(null) // Don't continue if there's no pattern if (!pattern || !patterns[pattern]) return
{JSON.stringify(props,null,4)}//null /* Helper method to handle user clicks */ const raiseEvent = (type, data) => { if (type === 'clearFocusAll') 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) } setFocus(f) } /* Handle various elements with focus */ 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++ } } /* Set up settings object */ const settings = { options: { ...options }, measurements: { ...measurements }, ...props.settings } // Support for options_ prefix for (const [key, val] of Object.entries(props)) { if (key.slice(0,8) === 'options_') settings.options[key.slice(8)] = (val === 'true') ? true : (val === 'false') ? false : val if (key.slice(0,9) === 'settings_') settings[key.slice(9)] = (val === 'true') ? true : (val === 'false') ? false : val } if (part !== '') settings.only = [part] const patternInstance = new patterns[pattern](settings) if (sample) patternInstance.sample() else patternInstance.draft() const patternProps = patternInstance.getRenderProps() return svgOnly ?