
When measurments are missing, the useEffect hook will rerender to show the measurements page. However, before that happens there's a brief flash of the (failed) draft because it errors without the measurements. This prevents that by passing down whether or not all required measurements are available, and if not the draft returns null
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
import SvgWrapper from './svg-wrapper'
|
|
import Error from './error.js'
|
|
import Robot from 'shared/components/robot/index.js'
|
|
|
|
const LabDraft = props => {
|
|
const { app, draft, design, gist, updateGist, unsetGist, showInfo, feedback, hasRequiredMeasurements } = props
|
|
|
|
if (!draft || !hasRequiredMeasurements) return null
|
|
|
|
// Render as SVG
|
|
if (gist?.renderer === 'svg') {
|
|
let svg
|
|
try { svg = draft.render() }
|
|
catch(error) {
|
|
console.log('Failed to render design', error)
|
|
return <Error error={error} {...props} />
|
|
}
|
|
return <div dangerouslySetInnerHTML={{ __html: svg }} />
|
|
}
|
|
|
|
// Render as React
|
|
let patternProps = {}
|
|
try { patternProps = draft.getRenderProps() }
|
|
catch(error) {
|
|
console.log('Failed to get render props for design', error)
|
|
return <Error error={error} {...props} />
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{(!patternProps || patternProps.events.error.length > 0)
|
|
? <Error {...{ draft, patternProps, updateGist }} />
|
|
: null
|
|
}
|
|
<SvgWrapper {...{ draft, patternProps, gist, updateGist, unsetGist, showInfo, app, feedback }} />
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default LabDraft
|