Skip to content
This repository was archived by the owner on May 14, 2020. It is now read-only.

Commit ab73116

Browse files
committed
Tidied up a bit more and updated docs on README
1 parent 5e516dc commit ab73116

File tree

6 files changed

+58
-43
lines changed

6 files changed

+58
-43
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,19 @@ Then the preview of child elements now look like this:
117117
118118
![](http://cl.ly/image/1J1a0b0T0K3c/screenshot%202015-10-07%20at%203.44.31%20PM.png)
119119
120+
#### Customize Rendering
121+
122+
You can pass the following properties to customize rendered labels and values:
123+
124+
```js
125+
<JSONTree
126+
labelRenderer={raw => <strong>raw</strong>}
127+
valueRenderer={raw => <em>raw</em>}
128+
/>
129+
```
130+
131+
In this example the label and value will be rendered with `<strong>` and `<em>` wrappers respectively.
132+
120133
### Credits
121134
122135
- All credits to [Dave Vedder](http://www.eskimospy.com/) ([[email protected]](mailto:[email protected])), who wrote the original code as [JSONViewer](https://bitbucket.org/davevedder/react-json-viewer/).

src/JSONArrayNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function getItemString(itemType, context) {
3636
return context.props.getItemString('Array', context.props.data, itemType, context.itemString);
3737
}
3838

39-
// Configures <JSONNestedNode> to render an Array
39+
// Configures <JSONNestedNode> to render an Array
4040
export default function JSONArrayNode({ ...props }) {
4141
return (
4242
<JSONNestedNode

src/JSONNestedNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default class JSONNestedNode extends React.Component {
8181
color: this.props.theme.base0D,
8282
...this.props.styles.getLabelStyle(this.props.nodeType, this.state.expanded)
8383
}} onClick={::this.handleClick}>
84-
{this.props.getRenderedLabel(this.props.keyName)}:
84+
{this.props.labelRenderer(this.props.keyName)}:
8585
</label>
8686
<span style={{
8787
...spanStyle,

src/JSONValueNode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ export default class JSONValueNode extends React.Component {
4242
color: this.props.theme.base0D,
4343
...this.props.styles.getLabelStyle(this.props.nodeType, true)
4444
}}>
45-
{this.props.getRenderedLabel(this.props.keyName)}:
45+
{this.props.labelRenderer(this.props.keyName)}:
4646
</label>
4747
<span style={{
4848
color: this.props.theme.base0B,
4949
...this.props.styles.getValueStyle('String', true)
50-
}}>"{this.props.getRenderedValue(this.props.valueGetter(this.props.value))}"</span>
50+
}}>"{this.props.valueRenderer(this.props.valueGetter(this.props.value))}"</span>
5151
</li>
5252
);
5353
}

src/grab-node.js

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,59 +7,61 @@ import JSONValueNode from './JSONValueNode';
77

88
export default function({
99
getItemString,
10-
getRenderedLabel,
11-
getRenderedValue,
1210
initialExpanded = false,
1311
key,
12+
labelRenderer,
1413
previousData,
1514
styles,
1615
theme,
17-
value
16+
value,
17+
valueRenderer
1818
}) {
1919
const nodeType = objType(value);
2020

21-
const sharedProps = {
21+
const simpleNodeProps = {
2222
getItemString,
23-
getRenderedLabel,
24-
getRenderedValue,
2523
initialExpanded,
2624
key,
2725
keyName: key,
26+
labelRenderer,
2827
nodeType,
2928
previousData,
3029
styles,
3130
theme,
32-
value
31+
value,
32+
valueRenderer
3333
};
3434

35-
const containerProps = {
36-
...sharedProps,
35+
const nestedNodeProps = {
36+
...simpleNodeProps,
3737
data: value,
3838
getItemString,
3939
initialExpanded,
4040
keyName: key
4141
};
4242

43-
if (nodeType === 'Object') {
44-
return <JSONObjectNode {...containerProps} />;
45-
} else if (nodeType === 'Array') {
46-
return <JSONArrayNode {...containerProps} />;
47-
} else if (nodeType === 'Iterable') {
48-
return <JSONIterableNode {...containerProps} />;
49-
} else if (nodeType === 'String') {
50-
return <JSONValueNode {...sharedProps} />;
51-
} else if (nodeType === 'Number') {
52-
return <JSONValueNode {...sharedProps} />;
53-
} else if (nodeType === 'Boolean') {
54-
return <JSONValueNode {...sharedProps} valueGetter={raw => raw ? 'true' : 'false'} />;
55-
} else if (nodeType === 'Date') {
56-
return <JSONValueNode {...sharedProps} valueGetter={raw => raw.toISOString()} />;
57-
} else if (nodeType === 'Null') {
58-
return <JSONValueNode {...sharedProps} valueGetter={() => null} />;
59-
} else if (nodeType === 'Undefined') {
60-
return <JSONValueNode {...sharedProps} valueGetter={() => undefined} />;
61-
} else if (nodeType === 'Function') {
62-
return <JSONValueNode {...sharedProps} valueGetter={raw => raw.toString()} />;
43+
switch (nodeType) {
44+
case 'Object':
45+
return <JSONObjectNode {...nestedNodeProps} />;
46+
case 'Array':
47+
return <JSONArrayNode {...nestedNodeProps} />;
48+
case 'Iterable':
49+
return <JSONIterableNode {...nestedNodeProps} />;
50+
case 'String':
51+
return <JSONValueNode {...simpleNodeProps} />;
52+
case 'Number':
53+
return <JSONValueNode {...simpleNodeProps} />;
54+
case 'Boolean':
55+
return <JSONValueNode {...simpleNodeProps} valueGetter={raw => raw ? 'true' : 'false'} />;
56+
case 'Date':
57+
return <JSONValueNode {...simpleNodeProps} valueGetter={raw => raw.toISOString()} />;
58+
case 'Null':
59+
return <JSONValueNode {...simpleNodeProps} valueGetter={() => null} />;
60+
case 'Undefined':
61+
return <JSONValueNode {...simpleNodeProps} valueGetter={() => undefined} />;
62+
case 'Function':
63+
return <JSONValueNode {...simpleNodeProps} valueGetter={raw => raw.toString()} />;
64+
default:
65+
return false;
6366
}
64-
return false;
6567
}

src/index.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const styles = {
2323
};
2424

2525
const getEmptyStyle = () => ({});
26-
const getRenderedDefault = text => text;
26+
const identity = value => value;
2727

2828
export default class JSONTree extends React.Component {
2929
static propTypes = {
@@ -41,10 +41,10 @@ export default class JSONTree extends React.Component {
4141
getListStyle: getEmptyStyle,
4242
getItemStringStyle: getEmptyStyle,
4343
getLabelStyle: getEmptyStyle,
44-
getRenderedLabel: getRenderedDefault,
4544
getValueStyle: getEmptyStyle,
46-
getRenderedValue: getRenderedDefault,
47-
getItemString: (type, data, itemType, itemString) => <span>{itemType} {itemString}</span>
45+
getItemString: (type, data, itemType, itemString) => <span>{itemType} {itemString}</span>,
46+
labelRenderer: identity,
47+
valueRenderer: identity
4848
};
4949

5050
constructor(props) {
@@ -64,23 +64,23 @@ export default class JSONTree extends React.Component {
6464
data: value,
6565
expandRoot: initialExpanded,
6666
getItemString,
67-
getRenderedLabel,
68-
getRenderedValue,
67+
labelRenderer,
68+
valueRenderer,
6969
keyName: key,
7070
previousData,
7171
theme
7272
} = this.props;
7373

7474
const rootNode = grabNode({
7575
getItemString,
76-
getRenderedLabel,
77-
getRenderedValue,
7876
initialExpanded,
7977
key,
8078
previousData,
8179
styles: getStyles,
8280
theme,
83-
value
81+
labelRenderer,
82+
value,
83+
valueRenderer
8484
});
8585

8686
return (

0 commit comments

Comments
 (0)