three.cad/src/index.js

96 lines
1.9 KiB
JavaScript
Raw Normal View History

2021-03-26 13:38:49 +08:00
2021-03-27 04:40:40 +08:00
import ReactDOM from 'react-dom'
import React from 'react'
2021-03-27 03:18:11 +08:00
import { Root } from './app.jsx'
2021-04-06 12:52:19 +08:00
import update from 'immutability-helper';
2021-03-29 10:23:24 +08:00
import { createStore, applyMiddleware } from 'redux'
import logger from 'redux-logger'
2021-04-06 12:52:19 +08:00
import { DepTree } from './depTree.mjs'
2021-03-29 10:23:24 +08:00
function reducer(state = {}, action) {
switch (action.type) {
2021-03-29 18:27:34 +08:00
case 'rx-sketch':
2021-04-06 12:52:19 +08:00
return update(state, {
2021-04-01 08:04:14 +08:00
treeEntries: {
2021-04-06 12:52:19 +08:00
byId: { [action.obj.obj3d.name]: { $set: action.obj } },
allIds: { $push: [action.obj.obj3d.name] },
tree: { [action.obj.obj3d.name]: { $set: {} } },
order: { [action.obj.obj3d.name]: { $set: state.treeEntries.allIds.length } }
},
})
2021-03-30 13:13:13 +08:00
case 'set-active-sketch':
2021-04-06 12:52:19 +08:00
return update(state, {
activeSketchId: { $set: action.sketch },
})
2021-03-30 13:13:13 +08:00
case 'exit-sketch':
return {
2021-04-06 12:52:19 +08:00
...state, activeSketchId: ''
2021-03-29 18:27:34 +08:00
}
case 'rx-extrusion':
2021-04-06 12:52:19 +08:00
return update(state, {
2021-04-01 08:04:14 +08:00
treeEntries: {
2021-04-06 12:52:19 +08:00
byId: {
[action.mesh.name]: { $set: action.mesh }
},
allIds: { $push: [action.mesh.name] },
tree: {
[action.sketchId]: { [action.mesh.name]: { $set: true } },
},
order: { [action.mesh.name]: { $set: state.treeEntries.allIds.length } }
2021-03-29 18:27:34 +08:00
}
2021-04-06 12:52:19 +08:00
})
case 'delete-node':
const depTree = new DepTree(state.treeEntries)
const obj = depTree.deleteNode(action.id)
return update(state, {
treeEntries: {$set: obj}
})
2021-04-01 06:03:35 +08:00
case 'restore-state':
return action.state
2021-03-29 10:23:24 +08:00
default:
return state
}
}
2021-03-29 18:27:34 +08:00
const preloadedState = {
2021-04-01 08:04:14 +08:00
treeEntries: {
2021-04-06 12:52:19 +08:00
byId: {},
allIds: [],
tree: {},
order: {},
},
2021-03-29 18:27:34 +08:00
}
window.store = createStore(reducer, preloadedState, applyMiddleware(logger))
2021-03-29 10:23:24 +08:00
2021-04-02 16:04:42 +08:00
2021-03-27 03:18:11 +08:00
document.addEventListener('DOMContentLoaded', () => {
ReactDOM.render(
React.createElement(Root, { store: store }, null)
2021-03-27 04:40:40 +08:00
, document.getElementById('react')
2021-03-27 03:18:11 +08:00
);
2021-03-27 04:40:40 +08:00
});