Skip to content

Commit 1162e20

Browse files
authored
feat: updated custom ui (#39)
* feat: updated custom ui * chore: upgrade packages * fix: custom sidebar logic and cleanup * chore: upgrade package
1 parent 5de582e commit 1162e20

21 files changed

+1834
-1148
lines changed

package-lock.json

+1,099-241
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/create-your-own-ui/package.json

+7-8
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,21 @@
88
"preview": "vite preview"
99
},
1010
"dependencies": {
11-
"@dytesdk/react-ui-kit": "^2.0.3",
12-
"@dytesdk/react-web-core": "^2.0.7",
11+
"@dytesdk/react-ui-kit": "^2.4.0",
12+
"@dytesdk/react-web-core": "^2.4.4",
1313
"react": "^18.2.0",
14-
"react-dom": "^18.2.0"
14+
"react-dom": "^18.2.0",
15+
"zustand": "^5.0.3"
1516
},
1617
"devDependencies": {
17-
"@dytesdk/ui-kit": "^1.66.3",
18-
"@dytesdk/web-core": "^1.32.1",
1918
"@types/react": "^18.0.24",
2019
"@types/react-dom": "^18.0.8",
21-
"@vitejs/plugin-react": "^2.2.0",
20+
"@vitejs/plugin-react-swc": "^3.8.1",
2221
"autoprefixer": "^10.4.16",
2322
"postcss": "^8.4.30",
2423
"prettier": "^3.0.3",
2524
"tailwindcss": "^3.3.3",
26-
"typescript": "^4.6.4",
27-
"vite": "^3.2.3"
25+
"typescript": "^5.8.2",
26+
"vite": "^6.2.3"
2827
}
2928
}

samples/create-your-own-ui/src/App.tsx

+25-54
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,59 @@
1-
import { useEffect, useState } from 'react';
1+
import { useEffect } from 'react';
22
import {
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';
148
import CustomDyteMeeting from './components/custom-dyte-meeting';
9+
import { useStatesStore } from './store';
1510

1611
function 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

6630
function 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

Comments
 (0)