Add ide scaffold or ideas

related to #218
This commit is contained in:
Kurt Hutten
2021-03-04 21:46:40 +11:00
parent 2c1df8a5e5
commit 6097866034
8 changed files with 204 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
import { useReducer } from 'react'
import { renderOpenScad } from 'src/helpers/openScadController'
export const useIdeState = () => {
const initialState = {
ideType: 'openscad',
consoleMessages: [
{ type: 'error', message: 'line 15 is being very naughty' },
{ type: 'message', message: '5 bodies produced' },
],
code: 'cubie(60);',
objectData: {
type: 'stl',
data: 'some binary',
},
}
const reducer = (state, { type, payload }) => {
switch (type) {
case 'updateCode':
return { ...state, code: payload }
case 'healthyRender':
return {
...state,
objectData: {
type: payload.objectData?.type,
data: payload.objectData?.data,
},
consoleMessages: payload.message
? [...state.consoleMessages, payload.message]
: payload.message,
}
case 'errorRender':
return {
...state,
consoleMessages: payload.message
? [...state.consoleMessages, payload.message]
: payload.message,
}
}
}
function dispatchMiddleware(dispatch) {
return ({ type, payload }) => {
switch (type) {
case 'render':
renderOpenScad({ code: payload.code })
.then(({ objectData, message }) =>
dispatch({
type: 'healthyRender',
payload: { objectData, message },
})
)
.catch(({ message }) =>
dispatch({
type: 'errorRender',
payload: { message },
})
)
break
default:
return dispatch({ type, payload })
}
}
}
const [state, dispatch] = useReducer(reducer, initialState)
return [state, dispatchMiddleware(dispatch)]
}