-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathmeeting-control-bar.js
More file actions
124 lines (110 loc) · 4.1 KB
/
Copy pathmeeting-control-bar.js
File metadata and controls
124 lines (110 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Meeting Control Bar Component
window.MeetingControlBar = (function() {
function create(container, meeting) {
const { statesStore } = window.StatesStore;
let stateUnsubscribe = null;
let states = {};
function render() {
const fullScreenTargetElement = document.querySelector('#app');
container.innerHTML = `
<div class="flex w-full py-2 px-3 text-white justify-between">
<div
id="controlbar-left"
class="flex items-center overflow-visible justify-center"
>
<rtk-fullscreen-toggle id="fullscreen-toggle"></rtk-fullscreen-toggle>
<rtk-settings-toggle></rtk-settings-toggle>
<rtk-screen-share-toggle></rtk-screen-toggle>
</div>
<div
id="controlbar-center"
class="flex items-center overflow-visible justify-center"
>
<rtk-mic-toggle></rtk-mic-toggle>
<rtk-camera-toggle></rtk-camera-toggle>
<rtk-stage-toggle></rtk-stage-toggle>
<rtk-leave-button></rtk-leave-button>
<rtk-more-toggle>
<div slot="more-elements">
<rtk-pip-toggle variant="horizontal"></rtk-pip-toggle>
<rtk-mute-all-button variant="horizontal"></rtk-mute-all-button>
<rtk-breakout-rooms-toggle variant="horizontal"></rtk-breakout-rooms-toggle>
<rtk-recording-toggle variant="horizontal"></rtk-recording-toggle>
</div>
</rtk-more-toggle>
</div>
<div
id="controlbar-right"
class="flex items-center overflow-visible justify-center"
>
<rtk-chat-toggle></rtk-chat-toggle>
<rtk-polls-toggle></rtk-polls-toggle>
<rtk-participants-toggle></rtk-participants-toggle>
<rtk-plugins-toggle></rtk-plugins-toggle>
<rtk-controlbar-button
id="custom-sidebar-btn"
label="Open Custom Sidebar">
</rtk-controlbar-button>
</div>
</div>`;
}
function setupEventListeners() {
// Set up fullscreen toggle target element
const fullscreenToggle = container.querySelector('#fullscreen-toggle');
if (fullscreenToggle) {
const targetElement = document.querySelector('#app');
if (targetElement) {
fullscreenToggle.targetElement = targetElement;
}
}
// Set up custom sidebar button
const customSidebarBtn = container.querySelector('#custom-sidebar-btn');
if (customSidebarBtn) {
// Set the add icon
try {
if (window.RealtimeKitUI && window.RealtimeKitUI.defaultIconPack) {
customSidebarBtn.icon = window.RealtimeKitUI.defaultIconPack.add;
}
} catch (e) {
console.warn('Could not set add icon:', e);
}
customSidebarBtn.addEventListener('click', (e) => {
console.log('Custom sidebar button clicked, current states:', states);
// Update states directly through the store
if (window.StatesStore && window.StatesStore.statesStore) {
const newActiveSidebar = states.sidebar !== 'warnings' ? true : !states.activeSidebar;
console.log('Setting sidebar state:', { activeSidebar: newActiveSidebar, sidebar: 'warnings' });
window.StatesStore.statesStore.setStates({
activeSidebar: newActiveSidebar,
sidebar: 'warnings',
});
}
});
}
}
function init() {
render();
setupEventListeners();
// Subscribe to states changes
stateUnsubscribe = window.StatesStore.subscribe(statesStore, () => {
states = statesStore.states;
// Re-render when states change to avoid duplicates
render();
setupEventListeners();
});
// Initial state
states = statesStore.states;
}
function cleanup() {
if (stateUnsubscribe) {
stateUnsubscribe();
}
container.innerHTML = '';
}
init();
return cleanup;
}
return {
create
};
})();