File tree Expand file tree Collapse file tree 5 files changed +18
-1
lines changed Expand file tree Collapse file tree 5 files changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -57,6 +57,7 @@ const Component = () => (<JsonViewer value={object}/>)
57
57
| ` valueTypes ` | ` ValueTypes ` | - | Customize value types. |
58
58
| ` onChange ` | ` (path, oldVal, newVal) => void ` | - | Callback when value changed. |
59
59
| ` onCopy ` | ` (path, value) => void ` | - | Callback when value copied. |
60
+ | ` onSelect ` | ` (path, value) => void ` | - | Callback when value selected. |
60
61
| ` enableClipboard ` | ` boolean ` | ` true ` | Whether enable clipboard feature. |
61
62
| ` editable ` | ` boolean ` \| <br />` (path, currentValue) => boolean ` | ` false ` | Whether enable edit feature. You can pass a function to customize the result. |
62
63
| ` defaultInspectDepth ` | ` number ` | 5 | Default inspect depth for nested objects.<br /><br />_ \* If the number is set too large, it could result in performance issues._ |
Original file line number Diff line number Diff line change @@ -22,8 +22,10 @@ export function createEasyType<Value> (
22
22
const EasyType : React . FC < DataItemProps < Value > > = ( props ) => {
23
23
const storeDisplayDataTypes = useJsonViewerStore ( store => store . displayDataTypes )
24
24
const color = useJsonViewerStore ( store => store . colorspace [ colorKey ] )
25
+ const onSelect = useJsonViewerStore ( store => store . onSelect )
26
+
25
27
return (
26
- < DataBox sx = { { color } } >
28
+ < DataBox onClick = { ( ) => onSelect ?. ( props . path , props . value ) } sx = { { color } } >
27
29
{ ( displayTypeLabel && storeDisplayDataTypes ) && < DataTypeLabel dataType = { type } /> }
28
30
< DataBox className = { `${ type } -value` } >
29
31
< Render value = { props . value } />
Original file line number Diff line number Diff line change @@ -54,6 +54,7 @@ const JsonViewerInner: React.FC<JsonViewerProps> = (props) => {
54
54
useSetIfNotUndefinedEffect ( 'displayDataTypes' , props . displayDataTypes )
55
55
useSetIfNotUndefinedEffect ( 'displayObjectSize' , props . displayObjectSize )
56
56
useSetIfNotUndefinedEffect ( 'onCopy' , props . onCopy )
57
+ useSetIfNotUndefinedEffect ( 'onSelect' , props . onSelect )
57
58
useEffect ( ( ) => {
58
59
if ( props . theme === 'light' ) {
59
60
api . setState ( {
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import { combine } from 'zustand/middleware'
6
6
import type {
7
7
JsonViewerOnChange ,
8
8
JsonViewerOnCopy ,
9
+ JsonViewerOnSelect ,
9
10
JsonViewerProps ,
10
11
Path
11
12
} from '..'
@@ -34,6 +35,7 @@ export type JsonViewerState<T = unknown> = {
34
35
value : T
35
36
onChange : JsonViewerOnChange
36
37
onCopy : JsonViewerOnCopy | undefined
38
+ onSelect : JsonViewerOnSelect | undefined
37
39
keyRenderer : JsonViewerKeyRenderer
38
40
displayObjectSize : boolean
39
41
}
@@ -61,6 +63,7 @@ export const createJsonViewerStore = <T = unknown> (props: JsonViewerProps<T>) =
61
63
rootName : props . rootName ?? 'root' ,
62
64
onChange : props . onChange ?? ( ( ) => { } ) ,
63
65
onCopy : props . onCopy ?? undefined ,
66
+ onSelect : props . onSelect ?? undefined ,
64
67
keyRenderer : props . keyRenderer ?? DefaultKeyRenderer ,
65
68
editable : props . editable ?? false ,
66
69
defaultInspectDepth : props . defaultInspectDepth ?? 5 ,
Original file line number Diff line number Diff line change @@ -23,6 +23,15 @@ export type JsonViewerOnCopy = <U = unknown>(
23
23
value : U
24
24
) => unknown | Promise < unknown >
25
25
26
+ /**
27
+ * @param path path to the target value
28
+ * @param value
29
+ */
30
+ export type JsonViewerOnSelect = < U = unknown > (
31
+ path : Path ,
32
+ value : U ,
33
+ ) => void
34
+
26
35
export interface DataItemProps < ValueType = unknown > {
27
36
inspect : boolean
28
37
setInspect : Dispatch < SetStateAction < boolean > >
@@ -75,6 +84,7 @@ export type JsonViewerProps<T = unknown> = {
75
84
valueTypes ?: DataType < any > [ ]
76
85
onChange ?: JsonViewerOnChange
77
86
onCopy ?: JsonViewerOnCopy
87
+ onSelect ?: JsonViewerOnSelect
78
88
/**
79
89
* Whether enable clipboard feature.
80
90
*
You can’t perform that action at this time.
0 commit comments