@@ -7,12 +7,11 @@ import React from 'react';
7
7
import ReactDOM from 'react-dom' ;
8
8
// Doing this after React is loaded makes React do a bit less DOM work
9
9
import 'min-react-env/install' ;
10
- import env from 'min-react-env' ;
11
10
import createYouTube from './createYouTube' ;
12
11
13
- Object . assign ( global , env ) ;
12
+ const reactMajor = parseInt ( ( ReactDOM . version || '16' ) . split ( '.' ) [ 0 ] , 10 ) ;
14
13
15
- const render = ( initialProps ) => {
14
+ async function render ( initialProps ) {
16
15
const { YouTube, sdkMock, playerMock } = createYouTube ( ) ;
17
16
18
17
let component ;
@@ -36,18 +35,33 @@ const render = (initialProps) => {
36
35
}
37
36
}
38
37
39
- const div = env . document . createElement ( 'div' ) ;
40
- const container = new Promise ( ( resolve ) => {
41
- // eslint-disable-next-line react/no-deprecated
42
- ReactDOM . render ( < Container { ...initialProps } ref = { resolve } /> , div ) ;
38
+ const div = document . createElement ( 'div' ) ;
39
+ let root ;
40
+ if ( reactMajor >= 18 ) {
41
+ const { createRoot } = await import ( 'react-dom/client' ) ;
42
+ root = createRoot ( div ) ;
43
+ } else {
44
+ root = {
45
+ render ( element ) {
46
+ // eslint-disable-next-line react/no-deprecated
47
+ ReactDOM . render ( element , div ) ;
48
+ } ,
49
+ unmount ( ) {
50
+ // eslint-disable-next-line react/no-deprecated
51
+ ReactDOM . unmountComponentAtNode ( div ) ;
52
+ } ,
53
+ } ;
54
+ }
55
+ const container = await new Promise ( ( resolve ) => {
56
+ root . render ( < Container { ...initialProps } ref = { resolve } /> ) ;
43
57
} ) ;
44
58
45
59
function rerender ( newProps ) {
46
- return container . then ( ( wrapper ) => new Promise ( ( resolve ) => {
47
- wrapper . setState ( { props : newProps } , ( ) => {
60
+ return new Promise ( ( resolve ) => {
61
+ container . setState ( { props : newProps } , ( ) => {
48
62
Promise . resolve ( ) . then ( resolve ) ;
49
63
} ) ;
50
- } ) ) ;
64
+ } ) ;
51
65
}
52
66
53
67
function unmount ( ) {
@@ -62,6 +76,6 @@ const render = (initialProps) => {
62
76
rerender,
63
77
unmount,
64
78
} ) ) ;
65
- } ;
79
+ }
66
80
67
81
export default render ;
0 commit comments