diff --git a/web/src/components/IdeContainer/IdeContainer.js b/web/src/components/IdeContainer/IdeContainer.js index 7a8a45d..1f6a79c 100644 --- a/web/src/components/IdeContainer/IdeContainer.js +++ b/web/src/components/IdeContainer/IdeContainer.js @@ -1,4 +1,4 @@ -import { useContext } from 'react' +import { useContext, useRef, useEffect } from 'react' import { Mosaic, MosaicWindow } from 'react-mosaic-component' import { IdeContext } from 'src/components/IdeToolbarNew' import IdeEditor from 'src/components/IdeEditor' @@ -14,16 +14,31 @@ const ELEMENT_MAP = { const IdeContainer = () => { const { state, dispatch } = useContext(IdeContext) + const viewerDOM = useRef(null) + + useEffect(handleViewerSizeUpdate, [viewerDOM]) + + function handleViewerSizeUpdate() { + if (viewerDOM !== null && viewerDOM.current) { + const { width, height } = viewerDOM.current.getBoundingClientRect() + console.log({width, height}) + dispatch({ type: 'setViewerSize', payload: { message: { width, height } }}) + } + } return (
( - { ELEMENT_MAP[id] } + {(id === 'Viewer') + ?
{ ELEMENT_MAP[id] }
+ : ELEMENT_MAP[id] + }
)} value={state.layout} - onChange={newLayout => dispatch({ type: 'updateLayout', payload: { message: newLayout } })} + onChange={newLayout => dispatch({ type: 'setLayout', payload: { message: newLayout } })} + onRelease={handleViewerSizeUpdate} />
) } diff --git a/web/src/components/IdeViewer/IdeViewer.js b/web/src/components/IdeViewer/IdeViewer.js index d8a27e5..5023055 100644 --- a/web/src/components/IdeViewer/IdeViewer.js +++ b/web/src/components/IdeViewer/IdeViewer.js @@ -137,22 +137,20 @@ const IdeViewer = () => { const indigo300 = '#A5B4FC' const indigo900 = '#312E81' return ( -
-
+
+
+ {state.isLoading && ( +
+
+
+ )} {image && (
- +
)} {state.isLoading && ( diff --git a/web/src/helpers/cadPackages/openScadController.js b/web/src/helpers/cadPackages/openScadController.js index 630bf82..a7e95fb 100644 --- a/web/src/helpers/cadPackages/openScadController.js +++ b/web/src/helpers/cadPackages/openScadController.js @@ -17,11 +17,12 @@ let lastCameraSettings = { } export const render = async ({ code, settings }) => { + console.log('from render', settings) const body = JSON.stringify({ settings: { size: { - x: 500, - y: 500, + x: settings.viewerSize?.width, + y: settings.viewerSize?.height, }, camera: settings.camera || lastCameraSettings, }, diff --git a/web/src/helpers/hooks/useIdeState.js b/web/src/helpers/hooks/useIdeState.js index 15723f1..bb81d72 100644 --- a/web/src/helpers/hooks/useIdeState.js +++ b/web/src/helpers/hooks/useIdeState.js @@ -66,11 +66,16 @@ export const useIdeState = () => { ...state, ideType: payload.message, } - case 'updateLayout': + case 'setLayout': return { ...state, layout: payload.message, } + case 'setViewerSize': + return { + ...state, + viewerSize: payload.message, + } case 'setLoading': return { ...state, @@ -88,7 +93,10 @@ export const useIdeState = () => { cadPackages[state.ideType] .render({ code: payload.code, - settings: { camera: payload.camera }, + settings: { + camera: payload.camera, + viewerSize: state.viewerSize, + }, }) .then(({ objectData, message, isError }) => { if (isError) {