From 661797b9a3d230bedc3039f068d930aeac4c57bb Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 4 Mar 2021 23:06:07 -0500 Subject: [PATCH 1/2] Showing state being passed into `useIdeState` dispatch middleware to change ideType. --- .../components/IdeToolbarNew/IdeToolbarNew.js | 6 ++++ web/src/components/IdeViewer/IdeViewer.js | 3 +- web/src/helpers/cadPackages/index.js | 7 ++++ .../cadPackages/newCascadeController.js | 35 +++++++++++++++++++ .../{ => cadPackages}/openScadController.js | 13 +++++-- web/src/helpers/hooks/useIdeState.js | 15 +++++--- 6 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 web/src/helpers/cadPackages/index.js create mode 100644 web/src/helpers/cadPackages/newCascadeController.js rename web/src/helpers/{ => cadPackages}/openScadController.js (71%) 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..a8f158d --- /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), + }, + 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 71% rename from web/src/helpers/openScadController.js rename to web/src/helpers/cadPackages/openScadController.js index 3727a1c..4a57b89 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), }, message: { type: 'message', @@ -24,3 +24,10 @@ export const renderOpenScad = async ({ code, settings }) => { }, 700) }) } + + +const openScad = { + render, +} + +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)] } -- 2.39.5 From fe8cc63c3b84475d0d98d2e30ddf72f9f92bd155 Mon Sep 17 00:00:00 2001 From: Frank Noirot Date: Thu, 4 Mar 2021 23:34:19 -0500 Subject: [PATCH 2/2] added comments to get a proper commit in --- web/src/helpers/cadPackages/newCascadeController.js | 2 +- web/src/helpers/cadPackages/openScadController.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/web/src/helpers/cadPackages/newCascadeController.js b/web/src/helpers/cadPackages/newCascadeController.js index a8f158d..5367fc3 100644 --- a/web/src/helpers/cadPackages/newCascadeController.js +++ b/web/src/helpers/cadPackages/newCascadeController.js @@ -8,7 +8,7 @@ export const render = async ({ code, settings }) => { resolve({ objectData: { type: 'stl', - data: ((Math.random() * 256 + 1) >>> 0).toString(2), + data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies }, message: { type: 'message', diff --git a/web/src/helpers/cadPackages/openScadController.js b/web/src/helpers/cadPackages/openScadController.js index 4a57b89..b685069 100644 --- a/web/src/helpers/cadPackages/openScadController.js +++ b/web/src/helpers/cadPackages/openScadController.js @@ -6,7 +6,7 @@ export const render = async ({ code, settings }) => { resolve({ objectData: { type: 'jpg', - data: ((Math.random() * 256 + 1) >>> 0).toString(2), + data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies }, message: { type: 'message', @@ -28,6 +28,7 @@ export const render = async ({ code, settings }) => { const openScad = { render, + // more functions to come } export default openScad \ No newline at end of file -- 2.39.5