diff --git a/src/JSONNestedNode.js b/src/JSONNestedNode.js
index 3df6b35..3e9b556 100644
--- a/src/JSONNestedNode.js
+++ b/src/JSONNestedNode.js
@@ -92,9 +92,11 @@ export default class JSONNestedNode extends React.Component {
// calculate individual node expansion if necessary
const expanded = props.shouldExpandNode && !props.isCircular ?
props.shouldExpandNode(props.keyPath, props.data, props.level) : false;
+
this.state = {
expanded,
- createdChildNodes: false
+ createdChildNodes: false,
+ hover: false
};
}
@@ -114,7 +116,7 @@ export default class JSONNestedNode extends React.Component {
labelRenderer,
expandable
} = this.props;
- const expanded = this.state.expanded;
+ const { expanded, hover } = this.state;
const renderedChildren = expanded ?
renderChildNodes({ ...this.props, level: this.props.level + 1 }) : null;
@@ -129,7 +131,7 @@ export default class JSONNestedNode extends React.Component {
itemType,
createItemString(data, collectionLimit)
);
- const stylingArgs = [keyPath, nodeType, expanded, expandable];
+ const stylingArgs = [keyPath, nodeType, expanded, expandable, hover];
return hideRoot ? (
@@ -138,7 +140,11 @@ export default class JSONNestedNode extends React.Component {
) : (
-
+
{expandable &&
this.setState({ expanded: !this.state.expanded });
+
+ handleMouseOver = (e) => {
+ e.stopPropagation();
+ this.setState({ hover: true });
+ };
+
+ handleMouseOut = () => this.setState({ hover: false });
}
diff --git a/src/JSONValueNode.js b/src/JSONValueNode.js
index b51055b..c387cb2 100644
--- a/src/JSONValueNode.js
+++ b/src/JSONValueNode.js
@@ -4,41 +4,50 @@ import React, { PropTypes } from 'react';
* Renders simple values (eg. strings, numbers, booleans, etc)
*/
-const JSONValueNode = ({
- nodeType,
- styling,
- labelRenderer,
- keyPath,
- valueRenderer,
- value,
- valueGetter
-}) => (
-
-
-
- {valueRenderer(valueGetter(value), value, ...keyPath)}
-
-
-);
+export default class JSONValueNode extends React.Component {
+ static propTypes = {
+ nodeType: PropTypes.string.isRequired,
+ styling: PropTypes.func.isRequired,
+ labelRenderer: PropTypes.func.isRequired,
+ keyPath: PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ).isRequired,
+ valueRenderer: PropTypes.func.isRequired,
+ value: PropTypes.any,
+ valueGetter: PropTypes.func
+ };
-JSONValueNode.propTypes = {
- nodeType: PropTypes.string.isRequired,
- styling: PropTypes.func.isRequired,
- labelRenderer: PropTypes.func.isRequired,
- keyPath: PropTypes.arrayOf(
- PropTypes.oneOfType([PropTypes.string, PropTypes.number])
- ).isRequired,
- valueRenderer: PropTypes.func.isRequired,
- value: PropTypes.any,
- valueGetter: PropTypes.func
-};
+ static defaultProps = {
+ valueGetter: value => value
+ };
-JSONValueNode.defaultProps = {
- valueGetter: value => value
-};
+ state = { hover: false };
-export default JSONValueNode;
+ render() {
+ const { hover } = this.state;
+ const {
+ nodeType, styling, labelRenderer, keyPath, valueRenderer, value, valueGetter
+ } = this.props;
+ return (
+
+
+
+ {valueRenderer(valueGetter(value), value, ...keyPath)}
+
+
+ );
+ }
+
+ handleMouseOver = (e) => {
+ e.stopPropagation();
+ this.setState({ hover: true });
+ };
+
+ handleMouseOut = () => this.setState({ hover: false });
+}