@@ -10,59 +10,71 @@ import {
10
10
elementChildren ,
11
11
} from "$CDN/idom-client-react" ;
12
12
13
- export function bind ( node , config ) {
13
+ export function bind ( node , config , sourceInfo ) {
14
14
return {
15
15
render : ( component , props , children ) =>
16
- ReactDOM . render ( createElement ( config , component , props , children ) , node ) ,
16
+ ReactDOM . render (
17
+ createElement ( config , sourceInfo , component , props , children ) ,
18
+ node
19
+ ) ,
17
20
unmount : ( ) => ReactDOM . unmountComponentAtNode ( node ) ,
18
21
} ;
19
22
}
20
23
21
- function createElement ( config , component , props , children ) {
24
+ function createElement ( config , sourceInfo , component , props , children ) {
22
25
return React . createElement (
23
26
LayoutConfigContext . Provider ,
24
27
{ value : config } ,
25
- React . createElement ( component , props , ...createChildren ( children , config ) )
28
+ React . createElement (
29
+ component ,
30
+ props ,
31
+ ...createChildren ( config , sourceInfo , children )
32
+ )
26
33
) ;
27
34
}
28
35
29
- function createChildren ( children , config ) {
36
+ function createChildren ( config , sourceInfo , children ) {
30
37
if ( ! children ) {
31
38
return [ ] ;
32
39
}
33
40
return children . map ( ( child ) => {
34
41
if ( typeof child == "string" ) {
35
42
return child ;
36
43
} else if ( child . importSource ) {
37
- return createElementFromThisImportSource ( child , config ) ;
44
+ return createElementFromThisImportSource ( config , sourceInfo , child ) ;
38
45
} else {
39
46
return React . createElement ( Element , { model : child } ) ;
40
47
}
41
48
} ) ;
42
49
}
43
50
44
- function createElementFromThisImportSource ( model , config ) {
45
- const Component = ThisImportSource [ model . tagName ] ;
46
- if ( ! Component ) {
51
+ function createElementFromThisImportSource ( config , sourceInfo , model ) {
52
+ if (
53
+ model . importSource . source != sourceInfo . source ||
54
+ model . importSource . sourceType != sourceInfo . sourceType
55
+ ) {
47
56
console . error (
48
57
`Cannot create ${ model . tagName } from different import source ` +
49
58
`${ model . importSource . source } (type: ${ model . importSource . sourceType } )`
50
59
) ;
60
+ return React . createElement ( "pre" , { } , "error" ) ;
51
61
}
52
62
return React . createElement (
53
- Component ,
63
+ ThisImportSource [ model . tagName ] ,
54
64
elementAttributes ( model , ( event ) => {
55
- event . data = event . data . filter ( value => {
65
+ event . data = event . data . filter ( ( value ) => {
56
66
try {
57
67
JSON . stringify ( value ) ;
58
68
} catch ( err ) {
59
- console . error ( `Failed to serialize some event data for ${ model . tagName } ` )
69
+ console . error (
70
+ `Failed to serialize some event data for ${ model . tagName } `
71
+ ) ;
60
72
return false ;
61
73
}
62
74
return true ;
63
- } )
75
+ } ) ;
64
76
config . sendEvent ( event ) ;
65
77
} ) ,
66
- ...createChildren ( model . children , config )
78
+ ...createChildren ( config , sourceInfo , model . children )
67
79
) ;
68
80
}
0 commit comments