From 4d6ccc52cc27322f0369f4951380da4f359efd1a Mon Sep 17 00:00:00 2001 From: Ann Balina Date: Thu, 19 Nov 2020 22:21:38 +0200 Subject: [PATCH 1/3] Add onExpand callback --- packages/react-json-tree/src/JSONNestedNode.tsx | 10 ++++++++++ packages/react-json-tree/src/index.tsx | 1 + 2 files changed, 11 insertions(+) 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 { From 867a497d91ae2e67dd3e13011fe41bbe9279a884 Mon Sep 17 00:00:00 2001 From: Ann Balina Date: Fri, 20 Nov 2020 01:51:16 +0200 Subject: [PATCH 2/3] Update package info --- packages/react-json-tree/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-json-tree/README.md b/packages/react-json-tree/README.md index 28adfac8..75451bd9 100644 --- a/packages/react-json-tree/README.md +++ b/packages/react-json-tree/README.md @@ -146,6 +146,7 @@ Their full signatures are: - `isCustomNode: function(value)` - overrides the default object type detection and renders the value as a single value - `collectionLimit: number` - sets the number of nodes that will be rendered in a collection before rendering them in collapsed ranges - `keyPath: (string | number)[]` - overrides the initial key path for the root node (defaults to `[root]`) +- `onExpand: function(data, level, keyPath)` - on expand callback ### Credits From 045c1579cceccafa09020fd4a19378edd7950c4c Mon Sep 17 00:00:00 2001 From: Ann Balina Date: Sat, 21 Nov 2020 00:56:15 +0200 Subject: [PATCH 3/3] Add onExpand to types --- packages/react-json-tree/src/types.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-json-tree/src/types.ts b/packages/react-json-tree/src/types.ts index 79cc7d88..14bef869 100644 --- a/packages/react-json-tree/src/types.ts +++ b/packages/react-json-tree/src/types.ts @@ -9,6 +9,7 @@ interface SharedCircularPropsPassedThroughJSONTree { expanded: boolean, expandable: boolean ) => React.ReactNode; + onExpand?: (data: any, level: number, keyPath: any[]) => void; } interface SharedCircularPropsProvidedByJSONTree extends SharedCircularPropsPassedThroughJSONTree { @@ -41,6 +42,7 @@ interface JSONNestedNodeCircularPropsPassedThroughJSONTree { isCustomNode: (value: any) => boolean; collectionLimit: number; sortObjectKeys?: ((a: any, b: any) => number) | boolean; + onExpand?: (data: any, level: number, keyPath: any[]) => void; } export type CircularPropsPassedThroughJSONTree = SharedCircularPropsPassedThroughJSONTree & JSONValueNodeCircularPropsPassedThroughJSONTree &