Skip to content

Commit aff95a9

Browse files
Merge pull request #37 from dyte-io/feat/appx-sample
fix: active speaker sample app
2 parents 1e9ad32 + 9156d4a commit aff95a9

File tree

9 files changed

+341
-38
lines changed

9 files changed

+341
-38
lines changed

package-lock.json

Lines changed: 183 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/active-speaker-ui/src/components/Controlbar.tsx

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,44 @@ import {
55
DyteStageToggle,
66
DyteMicToggle,
77
DyteCameraToggle,
8-
DyteLeaveButton,
98
DyteParticipantsToggle,
109
DytePollsToggle,
1110
DyteChatToggle,
1211
DytePluginsToggle,
13-
defaultIconPack,
14-
IconPack,
12+
DyteControlbarButton,
1513
} from '@dytesdk/react-ui-kit';
16-
import { useDyteMeeting } from '@dytesdk/react-web-core';
17-
18-
const HAND_RAISE_ICON =
19-
'<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M4 12.02c0 1.06.2 2.1.6 3.08l.6 1.42c.22.55.64 1.01 1.17 1.29.27.14.56.21.86.21h2.55c.77 0 1.49-.41 1.87-1.08.5-.87 1.02-1.7 1.72-2.43l1.32-1.39c.44-.46.97-.84 1.49-1.23l.59-.45a.6.6 0 0 0 .23-.47c0-.75-.54-1.57-1.22-1.79a3.34 3.34 0 0 0-2.78.29V4.5a1.5 1.5 0 0 0-2.05-1.4 1.5 1.5 0 0 0-2.9 0A1.5 1.5 0 0 0 6 4.5v.09A1.5 1.5 0 0 0 4 6v6.02ZM8 4.5v4a.5.5 0 0 0 1 0v-5a.5.5 0 0 1 1 0v5a.5.5 0 0 0 1 0v-4a.5.5 0 0 1 1 0v6a.5.5 0 0 0 .85.37h.01c.22-.22.44-.44.72-.58.7-.35 2.22-.57 2.4.5l-.53.4c-.52.4-1.04.78-1.48 1.24l-1.33 1.38c-.75.79-1.31 1.7-1.85 2.63-.21.36-.6.58-1.01.58H7.23a.87.87 0 0 1-.4-.1 1.55 1.55 0 0 1-.71-.78l-.59-1.42a7.09 7.09 0 0 1-.53-2.7V6a.5.5 0 0 1 1 0v3.5a.5.5 0 0 0 1 0v-5a.5.5 0 0 1 1 0Z" fill="currentColor"></path></svg>';
20-
21-
const iconPack: IconPack = {
22-
...defaultIconPack,
23-
join_stage: HAND_RAISE_ICON,
24-
};
14+
import { useDyteMeeting, useDyteSelector } from '@dytesdk/react-web-core';
15+
import HOST_PRESET, { iconPack, saveWhiteboard, WHITEBOARD_ID } from '../lib/const';
2516

2617
export default function Controlbar() {
2718
const { meeting } = useDyteMeeting();
2819
const size = useMeetingStore((s) => s.size);
2920
const isMobile = useMeetingStore((s) => s.isMobile);
3021
const states = useMeetingStore((s) => s.states);
22+
const isDarkMode = useMeetingStore((s) => s.darkMode);
23+
const toggleDarkMode = useMeetingStore((s) => s.toggleDarkMode);
24+
const setStates = useMeetingStore((s) => s.setStates);
25+
const whiteboardPlugin = useDyteSelector(m => m.plugins.active.get(WHITEBOARD_ID))
3126

3227
const buttonSize = size === 'lg' ? 'lg' : 'sm';
3328

34-
const isHost = meeting.self.presetName === 'webinar_presenter';
29+
const isHost = meeting.self.presetName === HOST_PRESET;
30+
31+
const leaveMeeting = async () => {
32+
if (whiteboardPlugin?.active) {
33+
await saveWhiteboard(whiteboardPlugin);
34+
}
35+
setStates({
36+
activeLeaveConfirmation: true,
37+
})
38+
}
39+
40+
const LeaveButton = () => {
41+
return (
42+
<DyteControlbarButton icon={iconPack.call_end} size={buttonSize} label='Leave' onClick={leaveMeeting}/>
43+
)
44+
}
45+
3546

3647
if (isMobile) {
3748
return (
@@ -73,9 +84,9 @@ export default function Controlbar() {
7384
<DyteStageToggle
7485
meeting={meeting}
7586
size={buttonSize}
76-
iconPack={isHost ? defaultIconPack : iconPack}
87+
iconPack={iconPack}
7788
/>
78-
<DyteLeaveButton size={buttonSize} />
89+
<LeaveButton/>
7990
<DyteSettingsToggle size={buttonSize} states={states} />
8091
</div>
8192
</>
@@ -91,17 +102,27 @@ export default function Controlbar() {
91102
size={buttonSize}
92103
states={states}
93104
/>
105+
{
106+
isHost
107+
&& <DyteControlbarButton
108+
icon={isDarkMode ? iconPack.dark : iconPack.light}
109+
label= {isDarkMode ? 'Dark' : 'Light'}
110+
onClick={() => {
111+
toggleDarkMode(!isDarkMode);
112+
}}
113+
/>
114+
}
94115
</div>
95116

96117
<div className="flex flex-col lg:flex-row items-center justify-center">
97118
<DyteStageToggle
98119
meeting={meeting}
99120
size={buttonSize}
100-
iconPack={isHost ? defaultIconPack : iconPack}
121+
iconPack={iconPack}
101122
/>
102123
<DyteMicToggle meeting={meeting} size={buttonSize} />
103124
<DyteCameraToggle meeting={meeting} size={buttonSize} />
104-
<DyteLeaveButton size={buttonSize} />
125+
<LeaveButton />
105126
</div>
106127

107128
<div className="flex flex-col lg:flex-row items-center justify-end">

0 commit comments

Comments
 (0)