File tree Expand file tree Collapse file tree 6 files changed +59
-21
lines changed Expand file tree Collapse file tree 6 files changed +59
-21
lines changed Original file line number Diff line number Diff line change @@ -110,6 +110,7 @@ const IndexPage: React.FC = () => {
110
110
const [ theme , setTheme ] = useState < JsonViewerTheme > ( 'light' )
111
111
const [ src , setSrc ] = useState ( ( ) => example )
112
112
const [ displayDataTypes , setDisplayDataTypes ] = useState ( true )
113
+ const [ displayObjectSize , setDisplayObjectSize ] = useState ( true )
113
114
const [ editable , setEditable ] = useState ( true )
114
115
useEffect ( ( ) => {
115
116
const loop = ( ) => {
@@ -152,6 +153,13 @@ const IndexPage: React.FC = () => {
152
153
/> }
153
154
label = 'DisplayDataTypes'
154
155
/>
156
+ < FormControlLabel
157
+ control = { < Switch
158
+ checked = { displayObjectSize }
159
+ onChange = { event => setDisplayObjectSize ( event . target . checked ) }
160
+ /> }
161
+ label = 'DisplayObjectSize'
162
+ />
155
163
< TextField
156
164
label = 'indentWidth'
157
165
value = { indent }
@@ -205,6 +213,7 @@ const IndexPage: React.FC = () => {
205
213
indentWidth = { indent }
206
214
theme = { theme }
207
215
displayDataTypes = { displayDataTypes }
216
+ displayObjectSize = { displayObjectSize }
208
217
groupArraysAfterLength = { groupArraysAfterLength }
209
218
keyRenderer = { KeyRenderer }
210
219
valueTypes = { [
Original file line number Diff line number Diff line change @@ -40,6 +40,7 @@ export const PreObjectType: React.FC<DataItemProps<object>> = (props) => {
40
40
( ) => props . inspect ? inspectMetadata ( props . value ) : '' ,
41
41
[ props . inspect , props . value ]
42
42
)
43
+ const displayObjectSize = useJsonViewerStore ( store => store . displayObjectSize )
43
44
const isTrap = useIsCycleReference ( props . path , props . value )
44
45
return (
45
46
< Box
@@ -49,16 +50,21 @@ export const PreObjectType: React.FC<DataItemProps<object>> = (props) => {
49
50
} }
50
51
>
51
52
{ isArray ? arrayLb : objectLb }
52
- < Box
53
- component = 'span'
54
- sx = { {
55
- pl : 0.5 ,
56
- fontStyle : 'italic' ,
57
- color : metadataColor
58
- } }
59
- >
60
- { sizeOfValue }
61
- </ Box >
53
+ { displayObjectSize
54
+ ? (
55
+ < Box
56
+ component = 'span'
57
+ sx = { {
58
+ pl : 0.5 ,
59
+ fontStyle : 'italic' ,
60
+ color : metadataColor
61
+ } }
62
+ >
63
+ { sizeOfValue }
64
+ </ Box >
65
+ )
66
+ : null }
67
+
62
68
{ isTrap && ! props . inspect
63
69
? (
64
70
< >
@@ -78,23 +84,29 @@ export const PreObjectType: React.FC<DataItemProps<object>> = (props) => {
78
84
export const PostObjectType : React . FC < DataItemProps < object > > = ( props ) => {
79
85
const metadataColor = useJsonViewerStore ( store => store . colorspace . base04 )
80
86
const isArray = useMemo ( ( ) => Array . isArray ( props . value ) , [ props . value ] )
87
+ const displayObjectSize = useJsonViewerStore ( store => store . displayObjectSize )
81
88
const sizeOfValue = useMemo (
82
89
( ) => ! props . inspect ? inspectMetadata ( props . value ) : '' ,
83
90
[ props . inspect , props . value ]
84
91
)
85
92
return (
86
93
< Box component = 'span' className = 'data-object-end' >
87
94
{ isArray ? arrayRb : objectRb }
88
- < Box
89
- component = 'span'
90
- sx = { {
91
- pl : 0.5 ,
92
- fontStyle : 'italic' ,
93
- color : metadataColor
94
- } }
95
- >
96
- { sizeOfValue }
97
- </ Box >
95
+ { displayObjectSize
96
+ ? (
97
+ < Box
98
+ component = 'span'
99
+ sx = { {
100
+ pl : 0.5 ,
101
+ fontStyle : 'italic' ,
102
+ color : metadataColor
103
+ } }
104
+ >
105
+ { sizeOfValue }
106
+ </ Box >
107
+ )
108
+ : null
109
+ }
98
110
</ Box >
99
111
)
100
112
}
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ const JsonViewerInner: React.FC<JsonViewerProps> = (props) => {
55
55
useSetIfNotUndefinedEffect ( 'enableClipboard' , props . enableClipboard )
56
56
useSetIfNotUndefinedEffect ( 'rootName' , props . rootName )
57
57
useSetIfNotUndefinedEffect ( 'displayDataTypes' , props . displayDataTypes )
58
+ useSetIfNotUndefinedEffect ( 'displayObjectSize' , props . displayObjectSize )
58
59
useEffect ( ( ) => {
59
60
if ( props . theme === 'light' ) {
60
61
api . setState ( {
Original file line number Diff line number Diff line change @@ -29,6 +29,7 @@ export type JsonViewerState<T = unknown> = {
29
29
value : T
30
30
onChange : JsonViewerOnChange
31
31
keyRenderer : JsonViewerKeyRenderer
32
+ displayObjectSize : boolean
32
33
}
33
34
34
35
export type JsonViewerActions = {
@@ -63,7 +64,8 @@ export const createJsonViewerStore = <T = unknown> (props: JsonViewerProps<T>) =
63
64
inspectCache : { } ,
64
65
hoverPath : null ,
65
66
colorspace : lightColorspace ,
66
- value : props . value
67
+ value : props . value ,
68
+ displayObjectSize : props . displayObjectSize ?? true
67
69
} ,
68
70
( set , get ) => ( {
69
71
getInspectCache : ( path , nestedIndex ) => {
Original file line number Diff line number Diff line change @@ -141,4 +141,11 @@ export type JsonViewerProps<T = unknown> = {
141
141
* @default 'light'
142
142
*/
143
143
theme ?: JsonViewerTheme
144
+
145
+ /**
146
+ * Whether display the size of array and object
147
+ *
148
+ * @default true
149
+ */
150
+ displayObjectSize ?: boolean
144
151
}
Original file line number Diff line number Diff line change @@ -229,6 +229,13 @@ describe('render <JsonViewer/> with props', () => {
229
229
} )
230
230
} )
231
231
232
+ it ( 'render with displayObjectSize' , async ( ) => {
233
+ const selection = [ true , false ]
234
+ selection . forEach ( displayObjectSize => {
235
+ render ( < JsonViewer value = { [ 'string1' , 'string2' ] } displayObjectSize = { displayObjectSize } /> )
236
+ } )
237
+ } )
238
+
232
239
it ( 'render with dataTypes' , async ( ) => {
233
240
render ( < JsonViewer value = { undefined } valueTypes = { [ ] } /> )
234
241
render ( < JsonViewer value = { undefined } valueTypes = { [
You can’t perform that action at this time.
0 commit comments