Skip to content

Commit f2fc147

Browse files
committed
feat: 🎸 added UnstableFastTree component tree using TreeState
1 parent f7978f2 commit f2fc147

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

src/UnstableFastTree.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
import Tree from './Tree';
5+
import {Node} from './shapes/nodeShapes';
6+
import TreeStateModifiers from './state/TreeStateModifiers';
7+
import {UPDATE_TYPE} from './contants';
8+
9+
export default class UnstableFastTree extends React.Component {
10+
static contextTypes = {
11+
unfilteredNodes: PropTypes.arrayOf(PropTypes.shape(Node)),
12+
};
13+
14+
get nodes() {
15+
return this.context.unfilteredNodes || this.props.nodes;
16+
}
17+
18+
handleChange = ({node, type, index}) => {
19+
let nodes;
20+
21+
if (type === UPDATE_TYPE.UPDATE) {
22+
nodes = TreeStateModifiers.editNodeAt(this.props.nodes, index, node);
23+
} else {
24+
nodes = TreeStateModifiers.deleteNodeAt(this.props.nodes, index);
25+
}
26+
27+
this.props.onChange(nodes);
28+
};
29+
30+
render() {
31+
return (
32+
<Tree
33+
nodeMarginLeft={this.props.nodeMarginLeft}
34+
nodes={this.props.nodes}
35+
onChange={this.handleChange}
36+
NodeRenderer={this.props.children}
37+
/>
38+
);
39+
}
40+
}
41+
42+
UnstableFastTree.propTypes = {
43+
extensions: PropTypes.shape({
44+
updateTypeHandlers: PropTypes.object,
45+
}),
46+
nodes: PropTypes.shape({
47+
flattenedTree: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOf([PropTypes.number, PropTypes.string])))
48+
.isRequired,
49+
tree: PropTypes.arrayOf(PropTypes.shape(Node)).isRequired,
50+
}),
51+
onChange: PropTypes.func,
52+
children: PropTypes.func.isRequired,
53+
nodeMarginLeft: PropTypes.number,
54+
width: PropTypes.number,
55+
scrollToId: PropTypes.number,
56+
};
57+
58+
UnstableFastTree.defaultProps = {
59+
nodeMarginLeft: 30,
60+
};

0 commit comments

Comments
 (0)