import {_testFinish, LoadingScreenPlugin, ThreeViewer} from 'threepipe' // @ts-expect-error no need react here import React from 'react' // @ts-expect-error no need react-dom here import ReactDOM from 'react-dom' function ThreeViewerComponent({src, env}: {src: string, env: string}) { const canvasRef = React.useRef(null) React.useEffect(() => { const viewer = new ThreeViewer({canvas: canvasRef.current, plugins: [LoadingScreenPlugin], }) // Load an environment map const envPromise = viewer.setEnvironmentMap(env) const modelPromise = viewer.load(src, { autoCenter: true, autoScale: true, }) Promise.all([envPromise, modelPromise]).then(([env, model])=>{ console.log('Loaded', model, env, viewer) }) return () => { viewer.dispose() } }, []) return ( // @ts-expect-error react ts error <canvas id="three-canvas" style={{width: 800, height: 600}} ref={canvasRef} /> ) } async function init() { ReactDOM.render( <ThreeViewerComponent src={'https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf'} env={'https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr'} />, document.getElementById('root') ) } init().finally(_testFinish)