forked from alexkuz/react-json-tree
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
61 lines (55 loc) · 1.7 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// ES6 + inline style port of JSONViewer https://bitbucket.org/davevedder/react-json-viewer/
// all credits and original code to the author
// Dave Vedder <veddermatic@gmail.com> http://www.eskimospy.com/
// port by Daniele Zannotti http://www.github.com/dzannotti <dzannotti@me.com>
import React from 'react';
import objectType from './obj-type';
import JSONObjectNode from './JSONObjectNode';
import JSONArrayNode from './JSONArrayNode';
import solarized from './themes/solarized';
const styles = {
tree: {
border: 0,
padding: 0,
marginTop: 8,
marginBottom: 8,
marginLeft: 2,
marginRight: 0,
fontSize: '0.90em',
listStyle: 'none',
MozUserSelect: 'none',
WebkitUserSelect: 'none'
}
};
export default class JSONTree extends React.Component {
static propTypes = {
data: React.PropTypes.oneOfType([
React.PropTypes.array,
React.PropTypes.object
]).isRequired
};
static defaultProps = {
theme: solarized
};
constructor(props) {
super(props);
}
render() {
const nodeType = objectType(this.props.data);
let rootNode = false;
const keyName = this.props.keyName || 'root';
if (nodeType === 'Object') {
rootNode = <JSONObjectNode theme={this.props.theme} data={this.props.data} previousData={this.props.previousData} keyName={keyName} initialExpanded={true} />;
} else if (nodeType === 'Array') {
rootNode = <JSONArrayNode theme={this.props.theme} data={this.props.data} previousData={this.props.previousData} initialExpanded={true} keyName={keyName} />;
}
return (
<ul style={{
...styles.tree,
...this.props.style
}}>
{rootNode}
</ul>
);
}
}