import React, { useReducer } from 'react'; import { useDispatch, useSelector } from 'react-redux' import { MdEdit, MdVisibilityOff, MdVisibility, MdDelete } from 'react-icons/md' export const Tree = () => { const treeEntries = useSelector(state => state.treeEntries) return
{treeEntries.allIds.map((entId, idx) => ( ))}
} const TreeEntry = ({ entId }) => { const treeEntries = useSelector(state => state.treeEntries.byId) const dispatch = useDispatch() const activeSketchId = useSelector(state => state.activeSketchId) let obj3d, entry; entry = treeEntries[entId] if (entId[0] == "s") { obj3d = treeEntries[entId].obj3d } else { obj3d = treeEntries[entId] } const [_, forceUpdate] = useReducer(x => x + 1, 0); const vis = obj3d.visible return
{ if (entId[0] == 'm') { // entry.material.color.set(color.hover) sc.render() } }} onPointerLeave={() => { const obj = entry if (entId[0] == 'm' && !sc.selected.includes(obj)) { // obj.material.color.set(color.mesh) sc.render() } }} onPointerDown={() => { if (entId[0] == 'm') { sc.selected.push( entry ) sc.render() } }} > {entId}
{ activeSketchId && treeEntries[activeSketchId].deactivate() entry.activate() sc.clearSelection() sc.activeSketch = entry; }} >
{ dispatch({ type: 'delete-node', id: entId }) }} >
{ vis ?
{ obj3d.visible = false; sc.render() forceUpdate() }} >
:
{ obj3d.visible = true; sc.render() forceUpdate() }} >
}
}