@@ -11,7 +11,13 @@ const mountedContainers = new Set()
11
11
12
12
function render (
13
13
ui ,
14
- { container, baseElement = container , queries, hydrate = false } = { } ,
14
+ {
15
+ container,
16
+ baseElement = container ,
17
+ queries,
18
+ hydrate = false ,
19
+ wrapper : WrapperComponent ,
20
+ } = { } ,
15
21
) {
16
22
if ( ! container ) {
17
23
// default to document.body instead of documentElement to avoid output of potentially-large
@@ -25,21 +31,28 @@ function render(
25
31
// they're passing us a custom container or not.
26
32
mountedContainers . add ( container )
27
33
34
+
35
+ const wrapUiIfNeeded = innerElement =>
36
+ WrapperComponent
37
+ ? React . createElement ( WrapperComponent , null , innerElement )
38
+ : innerElement
39
+
28
40
act ( ( ) => {
29
41
if ( hydrate ) {
30
- ReactDOM . hydrate ( ui , container )
42
+ ReactDOM . hydrate ( wrapUiIfNeeded ( ui ) , container )
31
43
} else {
32
- ReactDOM . render ( ui , container )
44
+ ReactDOM . render ( wrapUiIfNeeded ( ui ) , container )
33
45
}
34
46
} )
47
+
35
48
return {
36
49
container,
37
50
baseElement,
38
51
// eslint-disable-next-line no-console
39
52
debug : ( el = baseElement ) => console . log ( prettyDOM ( el ) ) ,
40
53
unmount : ( ) => ReactDOM . unmountComponentAtNode ( container ) ,
41
54
rerender : rerenderUi => {
42
- render ( rerenderUi , { container, baseElement} )
55
+ render ( wrapUiIfNeeded ( rerenderUi ) , { container, baseElement} )
43
56
// Intentionally do not return anything to avoid unnecessarily complicating the API.
44
57
// folks can use all the same utilities we return in the first place that are bound to the container
45
58
} ,
@@ -68,25 +81,20 @@ function testHook(callback, options = {}) {
68
81
const result = {
69
82
current : null ,
70
83
}
71
- const toRender = ( ) => {
72
- const hookRender = (
73
- < TestHook callback = { callback } >
74
- { res => {
75
- result . current = res
76
- } }
77
- </ TestHook >
78
- )
79
- if ( options . wrapper ) {
80
- return React . createElement ( options . wrapper , null , hookRender )
81
- }
82
- return hookRender
83
- }
84
- const { unmount, rerender : rerenderComponent } = render ( toRender ( ) )
84
+ const toRender = ( ) => (
85
+ < TestHook callback = { callback } >
86
+ { res => {
87
+ result . current = res
88
+ } }
89
+ </ TestHook >
90
+ )
91
+
92
+ const { unmount, rerender : rerenderComponent } = render ( toRender ( ) , options )
85
93
return {
86
94
result,
87
95
unmount,
88
96
rerender : ( ) => {
89
- rerenderComponent ( toRender ( ) )
97
+ rerenderComponent ( toRender ( ) , options )
90
98
} ,
91
99
}
92
100
}
0 commit comments