1
1
import { FC } from 'react'
2
2
3
- import type { AnyEvent , DisplayMode , Display , JsonData } from '../models'
3
+ import type { AnyEvent , DisplayMode , Display , JsonData , FastProps } from '../models'
4
4
5
5
import { useCustomRender } from '../hooks/config'
6
6
import { unreachable , asTitle } from '../tools'
7
7
8
+ import { AnyComp } from '.'
9
+
8
10
import { JsonComp } from './Json'
9
11
import { LinkRender } from './link'
10
12
@@ -26,6 +28,28 @@ export const DisplayComp: FC<Display> = (props) => {
26
28
}
27
29
}
28
30
31
+ // todo: this list should probably be defined in the models file
32
+ const nestableSubcomponents = [
33
+ 'Text' ,
34
+ 'Paragraph' ,
35
+ 'Div' ,
36
+ 'Heading' ,
37
+ 'Markdown' ,
38
+ 'Code' ,
39
+ 'Json' ,
40
+ 'Button' ,
41
+ 'Link' ,
42
+ 'LinkList' ,
43
+ 'ServerLoad' ,
44
+ 'Image' ,
45
+ 'Iframe' ,
46
+ 'Video' ,
47
+ 'Spinner' ,
48
+ 'Custom' ,
49
+ 'Table' ,
50
+ 'Details' ,
51
+ ]
52
+
29
53
const DisplayRender : FC < Display > = ( props ) => {
30
54
const mode = props . mode ?? 'auto'
31
55
const value = props . value ?? null
@@ -34,7 +58,11 @@ const DisplayRender: FC<Display> = (props) => {
34
58
} else if ( Array . isArray ( value ) ) {
35
59
return < DisplayArray mode = { mode } value = { value } />
36
60
} else if ( typeof value === 'object' && value !== null ) {
37
- return < DisplayObject mode = { mode } value = { value } />
61
+ if ( value . type !== null && typeof value . type === 'string' && nestableSubcomponents . includes ( value . type ) ) {
62
+ return < AnyComp { ...( value as unknown as FastProps ) } />
63
+ } else {
64
+ return < DisplayObject mode = { mode } value = { value } />
65
+ }
38
66
} else {
39
67
return < DisplayPrimitive mode = { mode } value = { value } />
40
68
}
0 commit comments