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-06 12:52:19 +08:00
|
|
|
|
|
|
|
|
2021-04-07 12:21:09 +08:00
|
|
|
export const preloadedState = {
|
|
|
|
treeEntries: {
|
|
|
|
byId: {},
|
|
|
|
allIds: [],
|
|
|
|
tree: {},
|
|
|
|
order: {},
|
|
|
|
},
|
2021-04-08 06:50:53 +08:00
|
|
|
ui: {
|
|
|
|
toolTipImmediate: false
|
|
|
|
}
|
2021-04-07 12:21:09 +08:00
|
|
|
}
|
2021-04-06 12:52:19 +08:00
|
|
|
|
2021-04-07 12:21:09 +08:00
|
|
|
export function reducer(state = {}, 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-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 } },
|
2021-04-07 05:10:07 +08:00
|
|
|
[action.mesh.name]: { $set: {} }
|
2021-04-06 12:52:19 +08:00
|
|
|
},
|
|
|
|
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
|
|
|
})
|
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, {
|
|
|
|
treeEntries: {
|
|
|
|
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 } },
|
|
|
|
},
|
|
|
|
order: { [action.mesh.name]: { $set: state.treeEntries.allIds.length } }
|
|
|
|
}
|
|
|
|
})
|
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, {
|
2021-04-06 13:40:47 +08:00
|
|
|
treeEntries: { $set: 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
|
|
|
|
|
|
|
|