@@ -5,33 +5,44 @@ import {
5
5
DyteStageToggle ,
6
6
DyteMicToggle ,
7
7
DyteCameraToggle ,
8
- DyteLeaveButton ,
9
8
DyteParticipantsToggle ,
10
9
DytePollsToggle ,
11
10
DyteChatToggle ,
12
11
DytePluginsToggle ,
13
- defaultIconPack ,
14
- IconPack ,
12
+ DyteControlbarButton ,
15
13
} 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' ;
25
16
26
17
export default function Controlbar ( ) {
27
18
const { meeting } = useDyteMeeting ( ) ;
28
19
const size = useMeetingStore ( ( s ) => s . size ) ;
29
20
const isMobile = useMeetingStore ( ( s ) => s . isMobile ) ;
30
21
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 ) )
31
26
32
27
const buttonSize = size === 'lg' ? 'lg' : 'sm' ;
33
28
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
+
35
46
36
47
if ( isMobile ) {
37
48
return (
@@ -73,9 +84,9 @@ export default function Controlbar() {
73
84
< DyteStageToggle
74
85
meeting = { meeting }
75
86
size = { buttonSize }
76
- iconPack = { isHost ? defaultIconPack : iconPack }
87
+ iconPack = { iconPack }
77
88
/>
78
- < DyteLeaveButton size = { buttonSize } />
89
+ < LeaveButton />
79
90
< DyteSettingsToggle size = { buttonSize } states = { states } />
80
91
</ div >
81
92
</ >
@@ -91,17 +102,27 @@ export default function Controlbar() {
91
102
size = { buttonSize }
92
103
states = { states }
93
104
/>
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
+ }
94
115
</ div >
95
116
96
117
< div className = "flex flex-col lg:flex-row items-center justify-center" >
97
118
< DyteStageToggle
98
119
meeting = { meeting }
99
120
size = { buttonSize }
100
- iconPack = { isHost ? defaultIconPack : iconPack }
121
+ iconPack = { iconPack }
101
122
/>
102
123
< DyteMicToggle meeting = { meeting } size = { buttonSize } />
103
124
< DyteCameraToggle meeting = { meeting } size = { buttonSize } />
104
- < DyteLeaveButton size = { buttonSize } />
125
+ < LeaveButton />
105
126
</ div >
106
127
107
128
< div className = "flex flex-col lg:flex-row items-center justify-end" >
0 commit comments