diff --git a/web/src/components/IdeToolbarNew/IdeToolbarNew.js b/web/src/components/IdeToolbarNew/IdeToolbarNew.js index 9aee054..6289117 100644 --- a/web/src/components/IdeToolbarNew/IdeToolbarNew.js +++ b/web/src/components/IdeToolbarNew/IdeToolbarNew.js @@ -6,10 +6,16 @@ export const IdeContext = createContext() const IdeToolbarNew = () => { const [state, dispatch] = useIdeState() + function setIdeType(ide) { dispatch({ type: 'setIdeType', payload: { message: ide } }) } + return (
hi I'm the toolbar
+
diff --git a/web/src/components/IdeViewer/IdeViewer.js b/web/src/components/IdeViewer/IdeViewer.js index ae0cb3c..b4d912e 100644 --- a/web/src/components/IdeViewer/IdeViewer.js +++ b/web/src/components/IdeViewer/IdeViewer.js @@ -9,7 +9,8 @@ const IdeViewer = () => {
I should be showing an{' '} {state.objectData?.type}{' '} - right now + right now with the data{' '} + {state.objectData?.data}{' '}
) diff --git a/web/src/helpers/cadPackages/index.js b/web/src/helpers/cadPackages/index.js new file mode 100644 index 0000000..ab938ae --- /dev/null +++ b/web/src/helpers/cadPackages/index.js @@ -0,0 +1,7 @@ +import openScad from './openScadController' +import openCascade from './newCascadeController' + +export const cadPackages = { + openScad, + openCascade, +} \ No newline at end of file diff --git a/web/src/helpers/cadPackages/newCascadeController.js b/web/src/helpers/cadPackages/newCascadeController.js new file mode 100644 index 0000000..5367fc3 --- /dev/null +++ b/web/src/helpers/cadPackages/newCascadeController.js @@ -0,0 +1,35 @@ +// Rename this file to remove "new" once Cascade integration is complete + +export const render = async ({ code, settings }) => { + return new Promise((resolve, reject) => { + setTimeout(() => { + const shouldReject = Math.random() < 0.7 + if (shouldReject) { + resolve({ + objectData: { + type: 'stl', + data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies + }, + message: { + type: 'message', + message: `bodies rendered by: ${code}`, + }, + }) + } else { + reject({ + message: { + type: 'error', + message: 'unable to parse line: x', + }, + }) + } + }, 700) + }) +} + +const openCascade = { + render, + // More functions to come +} + +export default openCascade \ No newline at end of file diff --git a/web/src/helpers/openScadController.js b/web/src/helpers/cadPackages/openScadController.js similarity index 65% rename from web/src/helpers/openScadController.js rename to web/src/helpers/cadPackages/openScadController.js index 3727a1c..b685069 100644 --- a/web/src/helpers/openScadController.js +++ b/web/src/helpers/cadPackages/openScadController.js @@ -1,12 +1,12 @@ -export const renderOpenScad = async ({ code, settings }) => { +export const render = async ({ code, settings }) => { return new Promise((resolve, reject) => { setTimeout(() => { const shouldReject = Math.random() < 0.7 if (shouldReject) { resolve({ objectData: { - type: Math.random() > 0.6 ? 'stl' : 'jpg', - data: 'some binary', + type: 'jpg', + data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies }, message: { type: 'message', @@ -24,3 +24,11 @@ export const renderOpenScad = async ({ code, settings }) => { }, 700) }) } + + +const openScad = { + render, + // more functions to come +} + +export default openScad \ No newline at end of file diff --git a/web/src/helpers/hooks/useIdeState.js b/web/src/helpers/hooks/useIdeState.js index 8a34956..21e2728 100644 --- a/web/src/helpers/hooks/useIdeState.js +++ b/web/src/helpers/hooks/useIdeState.js @@ -1,9 +1,9 @@ import { useReducer } from 'react' -import { renderOpenScad } from 'src/helpers/openScadController' +import { cadPackages } from 'src/helpers/cadPackages' export const useIdeState = () => { const initialState = { - ideType: 'openscad', + ideType: 'openScad', consoleMessages: [ { type: 'error', message: 'line 15 is being very naughty' }, { type: 'message', message: '5 bodies produced' }, @@ -36,14 +36,19 @@ export const useIdeState = () => { ? [...state.consoleMessages, payload.message] : payload.message, } + case 'setIdeType': + return { + ...state, + ideType: payload.message, + } } } - function dispatchMiddleware(dispatch) { + function dispatchMiddleware(dispatch, state) { return ({ type, payload }) => { switch (type) { case 'render': - renderOpenScad({ code: payload.code }) + cadPackages[state.ideType].render({ code: payload.code }) .then(({ objectData, message }) => dispatch({ type: 'healthyRender', @@ -65,5 +70,5 @@ export const useIdeState = () => { } const [state, dispatch] = useReducer(reducer, initialState) - return [state, dispatchMiddleware(dispatch)] + return [state, dispatchMiddleware(dispatch, state)] }