three.cad/src/react/reducer.js

90 lines
2.4 KiB
JavaScript
Raw Normal View History

2021-03-26 13:38:49 +08:00
2021-03-29 10:23:24 +08:00
2021-04-06 12:52:19 +08:00
import { DepTree } from './depTree.mjs'
2021-04-07 12:21:09 +08:00
import update from 'immutability-helper'
2021-04-15 16:36:54 +08:00
import { combineReducers } from 'redux';
const defaultState = {
byId: {},
allIds: [],
tree: {},
order: {},
visible: {},
activeSketchId: ""
2021-04-07 12:21:09 +08:00
}
2021-04-06 12:52:19 +08:00
2021-04-15 16:36:54 +08:00
export function treeEntries(state = defaultState, action) {
2021-03-29 10:23:24 +08:00
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-15 16:36:54 +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.allIds.length } },
visible: { [action.obj.obj3d.name]: { $set: true } },
2021-04-06 12:52:19 +08:00
})
2021-04-11 15:57:39 +08:00
case 'set-entry-visibility': {
return update(state, {
2021-04-15 16:36:54 +08:00
visible: { $merge: action.obj },
2021-04-11 15:57:39 +08:00
})
}
2021-03-30 13:13:13 +08:00
case 'set-active-sketch':
2021-04-06 12:52:19 +08:00
return update(state, {
2021-04-15 16:36:54 +08:00
visible: { [action.activeSketchId]: { $set: true } },
activeSketchId: { $set: action.activeSketchId },
2021-04-06 12:52:19 +08:00
})
2021-03-30 13:13:13 +08:00
case 'exit-sketch':
2021-04-11 15:57:39 +08:00
return update(state, {
2021-04-15 16:36:54 +08:00
activeSketchId: { $set: "" },
visible: { [state.activeSketchId]: { $set: false } },
2021-04-11 15:57:39 +08:00
})
2021-03-29 18:27:34 +08:00
case 'rx-extrusion':
2021-04-06 12:52:19 +08:00
return update(state, {
2021-04-15 16:36:54 +08:00
byId: {
[action.mesh.name]: { $set: action.mesh }
},
allIds: { $push: [action.mesh.name] },
tree: {
2021-04-16 08:05:40 +08:00
[action.sketchId]: { [action.mesh.name]: { $set: true} },
2021-04-15 16:36:54 +08:00
[action.mesh.name]: { $set: {} }
},
order: { [action.mesh.name]: { $set: state.allIds.length } },
visible: {
[action.mesh.name]: { $set: true }
2021-03-29 18:27:34 +08:00
}
2021-04-06 12:52:19 +08:00
})
2021-04-06 13:40:47 +08:00
case 'rx-boolean':
2021-04-06 12:52:19 +08:00
2021-04-06 13:40:47 +08:00
return update(state, {
2021-04-15 16:36:54 +08:00
byId: {
[action.mesh.name]: { $set: action.mesh }
},
allIds: { $push: [action.mesh.name] },
tree: {
[action.deps[0]]: { [action.mesh.name]: { $set: true } },
[action.deps[1]]: { [action.mesh.name]: { $set: true } },
[action.mesh.name]: { $set: {} }
},
order: { [action.mesh.name]: { $set: state.allIds.length } }
2021-04-06 13:40:47 +08:00
})
2021-04-06 12:52:19 +08:00
case 'delete-node':
2021-04-15 16:36:54 +08:00
const depTree = new DepTree(state)
2021-04-06 12:52:19 +08:00
const obj = depTree.deleteNode(action.id)
2021-04-15 16:36:54 +08:00
return update(state, { $merge: obj })
2021-04-06 12:52:19 +08:00
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
2021-04-15 16:36:54 +08:00
export const reducer = combineReducers({
treeEntries
})