1
- import { useEffect , useState } from 'react' ;
1
+ import { useEffect } from 'react' ;
2
2
import {
3
3
DyteProvider ,
4
4
useDyteClient ,
5
5
useDyteMeeting ,
6
6
} from '@dytesdk/react-web-core' ;
7
- import {
8
- defaultConfig ,
9
- generateConfig ,
10
- } from '@dytesdk/react-ui-kit' ;
11
- import { DyteStateListenersUtils } from './dyte-state-listeners' ;
12
- import { CustomStates } from './types' ;
13
- import { setFullScreenToggleTargetElement } from './utils' ;
7
+ import { DyteDialogManager , DyteUiProvider } from '@dytesdk/react-ui-kit' ;
14
8
import CustomDyteMeeting from './components/custom-dyte-meeting' ;
9
+ import { useStatesStore } from './store' ;
15
10
16
11
function Meeting ( ) {
17
12
const { meeting } = useDyteMeeting ( ) ;
18
- const [ config , setConfig ] = useState ( defaultConfig ) ;
19
- const [ states , setStates ] = useState < CustomStates > ( {
20
- meeting : 'setup' ,
21
- sidebar : 'chat'
22
- } ) ;
23
13
24
14
useEffect ( ( ) => {
25
- async function setupMeetingConfigs ( ) {
26
- const theme = meeting ! . self . config ;
27
- const { config } = generateConfig ( theme , meeting ! ) ;
28
-
15
+ if ( meeting ) {
29
16
/**
30
17
* NOTE(ravindra-dyte):
31
- * Full screen by default requests dyte-meeting/DyteMeeting element to be in full screen.
32
- * Since DyteMeeting element is not here,
33
- * we need to pass dyte-fullscreen-toggle, an targetElementId through config.
18
+ * During development phase, make sure to expose meeting object to window,
19
+ * for debugging purposes.
34
20
*/
35
- setFullScreenToggleTargetElement ( { config, targetElementId : 'root' } ) ;
36
-
37
- setConfig ( { ...config } ) ;
38
-
39
- /**
40
- * NOTE(ravindra-dyte):
41
- * Add listeners on meeting & self to monitor leave meeting, join meeting and so on.
42
- * This work was earlier done by DyteMeeting component internally.
43
- */
44
- const stateListenersUtils = new DyteStateListenersUtils ( ( ) => meeting , ( ) => states , ( ) => setStates ) ;
45
- stateListenersUtils . addDyteEventListeners ( ) ;
46
- }
47
-
48
- if ( meeting ) {
49
- /**
50
- * NOTE(ravindra-dyte):
51
- * During development phase, make sure to expose meeting object to window,
52
- * for debugging purposes.
53
- */
54
21
Object . assign ( window , {
55
22
meeting,
56
- } )
57
- setupMeetingConfigs ( ) ;
23
+ } ) ;
58
24
}
59
-
60
25
} , [ meeting ] ) ;
61
26
62
- return < CustomDyteMeeting meeting = { meeting } config = { config } states = { states } setStates = { setStates } />
63
-
27
+ return < CustomDyteMeeting /> ;
64
28
}
65
29
66
30
function App ( ) {
67
31
const [ meeting , initMeeting ] = useDyteClient ( ) ;
32
+ const setStates = useStatesStore ( ( s ) => s . setStates ) ;
68
33
69
34
useEffect ( ( ) => {
70
- async function initalizeMeeting ( ) {
35
+ async function initalizeMeeting ( ) {
71
36
const searchParams = new URL ( window . location . href ) . searchParams ;
72
37
73
38
const authToken = searchParams . get ( 'authToken' ) ;
74
-
39
+
75
40
if ( ! authToken ) {
76
41
alert (
77
42
"An authToken wasn't passed, please pass an authToken in the URL query to join a meeting." ,
78
43
) ;
79
44
return ;
80
45
}
81
-
82
- const meeting = await initMeeting ( {
46
+
47
+ initMeeting ( {
83
48
authToken,
84
49
defaults : {
85
50
audio : false ,
86
51
video : false ,
87
52
} ,
88
- modules : { devTools : { logs : true } }
89
53
} ) ;
90
-
91
- // await meeting!.joinRoom();
92
-
93
54
}
94
55
95
- if ( ! meeting ) {
56
+ if ( ! meeting ) {
96
57
initalizeMeeting ( ) ;
97
58
}
98
59
} , [ meeting ] ) ;
@@ -102,7 +63,17 @@ function App() {
102
63
// `mode="fill"` to the component.
103
64
return (
104
65
< DyteProvider value = { meeting } >
105
- < Meeting />
66
+ < DyteUiProvider
67
+ meeting = { meeting }
68
+ onDyteStatesUpdate = { ( e ) => {
69
+ setStates ( e . detail ) ;
70
+ } }
71
+ showSetupScreen
72
+ style = { { height : '100%' , width : '100%' , display : 'block' } }
73
+ >
74
+ < Meeting />
75
+ < DyteDialogManager />
76
+ </ DyteUiProvider >
106
77
</ DyteProvider >
107
78
) ;
108
79
}
0 commit comments