-
Notifications
You must be signed in to change notification settings - Fork 500
/
Copy pathindex.js
90 lines (76 loc) · 2.34 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React from 'react';
import { ArraySubGroup } from './ArraySubGroup'
import VariableMeta from '../VariableMeta';
import ObjectName from '../ObjectName';
import Theme from '../../themes/getStyle';
//icons
import { CollapsedIcon, ExpandedIcon } from '../ToggleIcons';
//single indent is 5px
const SINGLE_INDENT = 5;
export default class extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
expanded: !!this.props.expandFirstGroup
};
}
toggleCollapsed = () => {
this.setState((prevValue) => {
return {
expanded: !prevValue.expanded
}
});
}
getExpandedIcon = (expanded) => {
const { theme, iconStyle } = this.props;
if (expanded) {
return <ExpandedIcon {...{ theme, iconStyle }} />;
}
return <CollapsedIcon {...{ theme, iconStyle }} />;
}
render() {
const {
src,
groupArraysAfterLength,
depth,
name,
theme,
jsvRoot,
namespace,
parent_type,
expandFirstGroup,
...rest
} = this.props;
let object_padding_left = 0;
if (!jsvRoot) {
object_padding_left = this.props.indentWidth * SINGLE_INDENT;
}
const groupingLevels = Math.floor(Math.log10(src.length));
return (
<div
class="object-key-val"
{...Theme(theme, jsvRoot ? 'jsv-root' : 'objectKeyVal', {
paddingLeft: object_padding_left
})}
>
<ObjectName {...this.props} />
<span>
<VariableMeta size={src.length} {...this.props} />
</span>
<ArraySubGroup
theme={theme}
getExpandedIcon={this.getExpandedIcon}
src={src}
height={groupingLevels}
expanded={this.state.expanded}
rest={rest}
namespace={namespace}
name={name}
start={0}
toggleCollapsed={this.toggleCollapsed}
expandFirstGroup={expandFirstGroup}
/>
</div>
);
}
}