1- import { useEffect , useState } from 'react' ;
1+ import { useEffect } from 'react' ;
22import {
33 DyteProvider ,
44 useDyteClient ,
55 useDyteMeeting ,
66} 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' ;
148import CustomDyteMeeting from './components/custom-dyte-meeting' ;
9+ import { useStatesStore } from './store' ;
1510
1611function Meeting ( ) {
1712 const { meeting } = useDyteMeeting ( ) ;
18- const [ config , setConfig ] = useState ( defaultConfig ) ;
19- const [ states , setStates ] = useState < CustomStates > ( {
20- meeting : 'setup' ,
21- sidebar : 'chat'
22- } ) ;
2313
2414 useEffect ( ( ) => {
25- async function setupMeetingConfigs ( ) {
26- const theme = meeting ! . self . config ;
27- const { config } = generateConfig ( theme , meeting ! ) ;
28-
15+ if ( meeting ) {
2916 /**
3017 * 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.
3420 */
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- */
5421 Object . assign ( window , {
5522 meeting,
56- } )
57- setupMeetingConfigs ( ) ;
23+ } ) ;
5824 }
59-
6025 } , [ meeting ] ) ;
6126
62- return < CustomDyteMeeting meeting = { meeting } config = { config } states = { states } setStates = { setStates } />
63-
27+ return < CustomDyteMeeting /> ;
6428}
6529
6630function App ( ) {
6731 const [ meeting , initMeeting ] = useDyteClient ( ) ;
32+ const setStates = useStatesStore ( ( s ) => s . setStates ) ;
6833
6934 useEffect ( ( ) => {
70- async function initalizeMeeting ( ) {
35+ async function initalizeMeeting ( ) {
7136 const searchParams = new URL ( window . location . href ) . searchParams ;
7237
7338 const authToken = searchParams . get ( 'authToken' ) ;
74-
39+
7540 if ( ! authToken ) {
7641 alert (
7742 "An authToken wasn't passed, please pass an authToken in the URL query to join a meeting." ,
7843 ) ;
7944 return ;
8045 }
81-
82- const meeting = await initMeeting ( {
46+
47+ initMeeting ( {
8348 authToken,
8449 defaults : {
8550 audio : false ,
8651 video : false ,
8752 } ,
88- modules : { devTools : { logs : true } }
8953 } ) ;
90-
91- // await meeting!.joinRoom();
92-
9354 }
9455
95- if ( ! meeting ) {
56+ if ( ! meeting ) {
9657 initalizeMeeting ( ) ;
9758 }
9859 } , [ meeting ] ) ;
@@ -102,7 +63,17 @@ function App() {
10263 // `mode="fill"` to the component.
10364 return (
10465 < 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 >
10677 </ DyteProvider >
10778 ) ;
10879}
0 commit comments