diff --git a/packages/react-json-tree/src/JSONNestedNode.tsx b/packages/react-json-tree/src/JSONNestedNode.tsx index e8dbb261..48b91b27 100644 --- a/packages/react-json-tree/src/JSONNestedNode.tsx +++ b/packages/react-json-tree/src/JSONNestedNode.tsx @@ -95,6 +95,7 @@ interface Props extends CircularPropsPassedThroughJSONNestedNode { nodeTypeIndicator: string; createItemString: (data: any, collectionLimit: number) => string; expandable: boolean; + onExpand?: (data: any, level: number, keyPath: any[]) => void; } interface State { @@ -131,6 +132,7 @@ export default class JSONNestedNode extends React.Component { sortObjectKeys: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]), isCircular: PropTypes.bool, expandable: PropTypes.bool, + onExpand: PropTypes.func }; static defaultProps = { @@ -234,6 +236,14 @@ export default class JSONNestedNode extends React.Component { handleClick = () => { if (this.props.expandable) { + if (this.props.onExpand && !this.state.expanded) { + const { + data, + level, + keyPath + } = this.props; + this.props.onExpand(data, level, keyPath); + } this.setState({ expanded: !this.state.expanded }); } }; diff --git a/packages/react-json-tree/src/index.tsx b/packages/react-json-tree/src/index.tsx index 50a5524b..c3db91a7 100644 --- a/packages/react-json-tree/src/index.tsx +++ b/packages/react-json-tree/src/index.tsx @@ -20,6 +20,7 @@ interface Props extends CircularPropsPassedThroughJSONTree { data: any; theme?: Theme; invertTheme: boolean; + onExpand?: (data: any, level: number, keyPath: any[]) => void; } interface State {