agora-appbuilder-core 4.1.10-beta.1 → 4.1.11-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/template/agora-rn-uikit/src/Utils/isBotUser.ts +1 -1
- package/template/android/app/build.gradle +0 -7
- package/template/bridge/rtc/webNg/RtcEngine.ts +2 -2
- package/template/bridge/rtm/web/Types.ts +0 -183
- package/template/bridge/rtm/web/index.ts +488 -450
- package/template/customization-api/typeDefinition.ts +0 -1
- package/template/defaultConfig.js +3 -4
- package/template/global.d.ts +0 -1
- package/template/ios/Podfile +0 -41
- package/template/package.json +5 -5
- package/template/src/AppRoutes.tsx +3 -3
- package/template/src/ai-agent/components/ControlButtons.tsx +1 -1
- package/template/src/assets/font-styles.css +1 -33
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/selection.json +1 -1
- package/template/src/atoms/ActionMenu.tsx +93 -13
- package/template/src/atoms/CustomIcon.tsx +1 -8
- package/template/src/atoms/DropDownMulti.tsx +80 -29
- package/template/src/atoms/Dropdown.tsx +0 -5
- package/template/src/atoms/Input.tsx +2 -1
- package/template/src/atoms/TertiaryButton.tsx +1 -1
- package/template/src/atoms/UserAvatar.tsx +1 -1
- package/template/src/components/ChatContext.ts +3 -5
- package/template/src/components/Controls.tsx +167 -208
- package/template/src/components/DeviceConfigure.tsx +1 -1
- package/template/src/components/EventsConfigure.tsx +168 -118
- package/template/src/components/Navbar.tsx +11 -14
- package/template/src/components/RTMConfigure.tsx +819 -32
- package/template/src/components/beauty-effect/useBeautyEffects.tsx +13 -50
- package/template/src/components/chat/chatConfigure.tsx +1 -7
- package/template/src/components/chat-messages/useChatMessages.tsx +11 -43
- package/template/src/components/controls/useControlPermissionMatrix.tsx +4 -32
- package/template/src/components/participants/AllHostParticipants.tsx +2 -10
- package/template/src/components/participants/Participant.tsx +1 -7
- package/template/src/components/participants/UserActionMenuOptions.tsx +2 -12
- package/template/src/components/precall/joinCallBtn.native.tsx +7 -2
- package/template/src/components/precall/joinCallBtn.tsx +7 -2
- package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +16 -15
- package/template/src/components/precall/joinWaitingRoomBtn.tsx +31 -17
- package/template/src/components/precall/textInput.tsx +45 -22
- package/template/src/components/precall/usePreCall.tsx +7 -0
- package/template/src/components/recordings/RecordingsDateTable.tsx +2 -3
- package/template/src/components/room-info/useRoomInfo.tsx +5 -0
- package/template/src/components/useUserPreference.tsx +12 -39
- package/template/src/components/virtual-background/useVB.tsx +0 -18
- package/template/src/components/whiteboard/WhiteboardConfigure.tsx +0 -27
- package/template/src/language/default-labels/videoCallScreenLabels.ts +27 -11
- package/template/src/logger/AppBuilderLogger.tsx +3 -11
- package/template/src/pages/VideoCall.tsx +518 -171
- package/template/src/pages/video-call/ActionSheetContent.tsx +77 -77
- package/template/src/pages/video-call/SidePanelHeader.tsx +81 -53
- package/template/src/pages/video-call/VideoCallScreen.tsx +0 -18
- package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +1 -0
- package/template/src/rtm/RTMEngine.ts +37 -262
- package/template/src/rtm/utils.ts +1 -68
- package/template/src/rtm-events/constants.ts +7 -40
- package/template/src/rtm-events-api/Events.ts +39 -158
- package/template/src/subComponents/ChatBubble.tsx +3 -3
- package/template/src/subComponents/ChatContainer.tsx +9 -19
- package/template/src/subComponents/LocalAudioMute.tsx +2 -2
- package/template/src/subComponents/LocalVideoMute.tsx +2 -2
- package/template/src/subComponents/SidePanelEnum.tsx +0 -1
- package/template/src/subComponents/caption/Caption.tsx +48 -7
- package/template/src/subComponents/caption/CaptionContainer.tsx +324 -51
- package/template/src/subComponents/caption/CaptionIcon.tsx +35 -34
- package/template/src/subComponents/caption/CaptionText.tsx +103 -2
- package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +179 -69
- package/template/src/subComponents/caption/Transcript.tsx +46 -11
- package/template/src/subComponents/caption/TranscriptIcon.tsx +27 -35
- package/template/src/subComponents/caption/TranscriptText.tsx +78 -3
- package/template/src/subComponents/caption/proto/ptoto.js +38 -4
- package/template/src/subComponents/caption/proto/test.proto +34 -19
- package/template/src/subComponents/caption/useCaption.tsx +754 -11
- package/template/src/subComponents/caption/useSTTAPI.tsx +118 -205
- package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +152 -33
- package/template/src/subComponents/caption/useStreamMessageUtils.ts +165 -34
- package/template/src/subComponents/caption/utils.ts +171 -3
- package/template/src/subComponents/chat/ChatSendButton.tsx +0 -1
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +0 -16
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +1 -1
- package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +4 -7
- package/template/src/utils/SdkEvents.ts +3 -0
- package/template/src/utils/useEndCall.ts +4 -4
- package/template/src/utils/useMuteToggleLocal.ts +10 -14
- package/template/src/utils/useSpeechToText.ts +31 -20
- package/template/bridge/rtm/web/index-legacy.ts +0 -540
- package/template/src/components/RTMConfigure-legacy.tsx +0 -848
- package/template/src/components/UserGlobalPreferenceProvider.tsx +0 -227
- package/template/src/components/breakout-room/BreakoutRoomPanel.tsx +0 -58
- package/template/src/components/breakout-room/context/BreakoutRoomContext.tsx +0 -2508
- package/template/src/components/breakout-room/events/BreakoutRoomEventsConfigure.tsx +0 -272
- package/template/src/components/breakout-room/events/constants.ts +0 -17
- package/template/src/components/breakout-room/hoc/BreakoutRoomNameRenderer.tsx +0 -68
- package/template/src/components/breakout-room/hooks/useBreakoutRoomExit.ts +0 -49
- package/template/src/components/breakout-room/state/reducer.ts +0 -522
- package/template/src/components/breakout-room/state/types.ts +0 -54
- package/template/src/components/breakout-room/ui/BreakoutMeetingTitle.tsx +0 -60
- package/template/src/components/breakout-room/ui/BreakoutRoomActionMenu.tsx +0 -136
- package/template/src/components/breakout-room/ui/BreakoutRoomAnnouncementModal.tsx +0 -135
- package/template/src/components/breakout-room/ui/BreakoutRoomGroupSettings.tsx +0 -588
- package/template/src/components/breakout-room/ui/BreakoutRoomMainRoomUsers.tsx +0 -142
- package/template/src/components/breakout-room/ui/BreakoutRoomMemberActionMenu.tsx +0 -122
- package/template/src/components/breakout-room/ui/BreakoutRoomParticipants.tsx +0 -124
- package/template/src/components/breakout-room/ui/BreakoutRoomRaiseHand.tsx +0 -65
- package/template/src/components/breakout-room/ui/BreakoutRoomRenameModal.tsx +0 -227
- package/template/src/components/breakout-room/ui/BreakoutRoomSettings.tsx +0 -140
- package/template/src/components/breakout-room/ui/BreakoutRoomTransition.tsx +0 -52
- package/template/src/components/breakout-room/ui/BreakoutRoomView.tsx +0 -193
- package/template/src/components/breakout-room/ui/ExitBreakoutRoomIconButton.tsx +0 -79
- package/template/src/components/breakout-room/ui/ParticipantManualAssignmentModal.tsx +0 -638
- package/template/src/components/breakout-room/ui/SelectParticipantAssignmentStrategy.tsx +0 -57
- package/template/src/components/common/Dividers.tsx +0 -53
- package/template/src/components/controls/toolbar-items/ExitBreakoutRoomToolbarItem.tsx +0 -13
- package/template/src/components/raise-hand/RaiseHandButton.tsx +0 -50
- package/template/src/components/raise-hand/RaiseHandProvider.tsx +0 -308
- package/template/src/components/raise-hand/index.ts +0 -14
- package/template/src/components/room-info/useCurrentRoomInfo.tsx +0 -42
- package/template/src/components/room-info/useSetBreakoutRoomInfo.tsx +0 -64
- package/template/src/pages/video-call/BreakoutVideoCall.tsx +0 -213
- package/template/src/pages/video-call/VideoCallContent.tsx +0 -211
- package/template/src/pages/video-call/VideoCallStateWrapper.tsx +0 -495
- package/template/src/rtm/RTMConfigureBreakoutRoomProvider.tsx +0 -882
- package/template/src/rtm/RTMConfigureMainRoomProvider.tsx +0 -757
- package/template/src/rtm/RTMCoreProvider.tsx +0 -419
- package/template/src/rtm/RTMGlobalStateProvider.tsx +0 -706
- package/template/src/rtm/RTMStatusBanner.tsx +0 -99
- package/template/src/rtm/constants.ts +0 -12
- package/template/src/rtm/hooks/useMainRoomUserDisplayName.ts +0 -45
- package/template/src/rtm/rtm-presence-utils.ts +0 -344
- package/template/src/subComponents/chat/ChatAnnouncementView.tsx +0 -65
- package/template/src/utils/useDebouncedCallback.tsx +0 -20
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import React, {useEffect, useRef} from 'react';
|
|
2
|
-
import events from '../../../rtm-events-api';
|
|
3
|
-
import {BreakoutRoomEventNames} from './constants';
|
|
4
|
-
import {useBreakoutRoom} from '../context/BreakoutRoomContext';
|
|
5
|
-
import {BreakoutRoomSyncStateEventPayload} from '../state/types';
|
|
6
|
-
import {useLocalUid} from '../../../../agora-rn-uikit';
|
|
7
|
-
import {useRoomInfo} from '../../../components/room-info/useRoomInfo';
|
|
8
|
-
import {logger, LogSource} from '../../../logger/AppBuilderLogger';
|
|
9
|
-
|
|
10
|
-
interface Props {
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const BreakoutRoomEventsConfigure: React.FC<Props> = ({children}) => {
|
|
15
|
-
const {
|
|
16
|
-
// onMakeMePresenter,
|
|
17
|
-
handleBreakoutRoomSyncState,
|
|
18
|
-
handleHostOperationStart,
|
|
19
|
-
handleHostOperationEnd,
|
|
20
|
-
} = useBreakoutRoom();
|
|
21
|
-
// const {setCustomRTMMainRoomData} = useRTMGlobalState();
|
|
22
|
-
const localUid = useLocalUid();
|
|
23
|
-
const {
|
|
24
|
-
data: {isHost},
|
|
25
|
-
} = useRoomInfo();
|
|
26
|
-
const isHostRef = React.useRef(isHost);
|
|
27
|
-
const localUidRef = React.useRef(localUid);
|
|
28
|
-
// const onMakeMePresenterRef = useRef(onMakeMePresenter);
|
|
29
|
-
const handleBreakoutRoomSyncStateRef = useRef(handleBreakoutRoomSyncState);
|
|
30
|
-
const handleHostOperationStartRef = useRef(handleHostOperationStart);
|
|
31
|
-
const handleHostOperationEndRef = useRef(handleHostOperationEnd);
|
|
32
|
-
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
isHostRef.current = isHost;
|
|
35
|
-
}, [isHost]);
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
localUidRef.current = localUid;
|
|
38
|
-
}, [localUid]);
|
|
39
|
-
// useEffect(() => {
|
|
40
|
-
// onMakeMePresenterRef.current = onMakeMePresenter;
|
|
41
|
-
// }, [onMakeMePresenter]);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
handleBreakoutRoomSyncStateRef.current = handleBreakoutRoomSyncState;
|
|
44
|
-
}, [handleBreakoutRoomSyncState]);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
handleHostOperationStartRef.current = handleHostOperationStart;
|
|
47
|
-
}, [handleHostOperationStart]);
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
handleHostOperationEndRef.current = handleHostOperationEnd;
|
|
50
|
-
}, [handleHostOperationEnd]);
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
// const handleMakePresenterEvent = (evtData: any) => {
|
|
54
|
-
// logger.log(
|
|
55
|
-
// LogSource.Internals,
|
|
56
|
-
// 'BREAKOUT_ROOM',
|
|
57
|
-
// 'BREAKOUT_ROOM_MAKE_PRESENTER event received',
|
|
58
|
-
// evtData,
|
|
59
|
-
// );
|
|
60
|
-
// try {
|
|
61
|
-
// const {payload} = evtData;
|
|
62
|
-
// const data = JSON.parse(payload);
|
|
63
|
-
// console.log('supriya-presenter handleMakePresenterEvent data: ', data);
|
|
64
|
-
// const {uid, action} = data;
|
|
65
|
-
|
|
66
|
-
// // Only process if it's for the local user
|
|
67
|
-
// if (uid === localUidRef.current) {
|
|
68
|
-
// onMakeMePresenterRef.current(action);
|
|
69
|
-
// }
|
|
70
|
-
// } catch (error) {
|
|
71
|
-
// logger.log(
|
|
72
|
-
// LogSource.Internals,
|
|
73
|
-
// 'BREAKOUT_ROOM',
|
|
74
|
-
// 'Error handling make presenter event',
|
|
75
|
-
// error,
|
|
76
|
-
// );
|
|
77
|
-
// }
|
|
78
|
-
// };
|
|
79
|
-
|
|
80
|
-
const handleBreakoutRoomSyncStateEvent = (evtData: any) => {
|
|
81
|
-
console.log('BREAKOUT_ROOM_SYNC_STATE event recevied', evtData);
|
|
82
|
-
const {ts, payload} = evtData;
|
|
83
|
-
const data: BreakoutRoomSyncStateEventPayload = JSON.parse(payload);
|
|
84
|
-
if (data.data.act === 'SYNC_STATE') {
|
|
85
|
-
console.log(
|
|
86
|
-
'supriya-state-sync ********* BREAKOUT_ROOM_SYNC_STATE event triggered ***************',
|
|
87
|
-
);
|
|
88
|
-
handleBreakoutRoomSyncStateRef.current(data.data, ts);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const handleHostOperationStartEvent = (evtData: any) => {
|
|
93
|
-
logger.log(
|
|
94
|
-
LogSource.Internals,
|
|
95
|
-
'BREAKOUT_ROOM',
|
|
96
|
-
'BREAKOUT_ROOM_HOST_OPERATION_START event received',
|
|
97
|
-
evtData,
|
|
98
|
-
);
|
|
99
|
-
try {
|
|
100
|
-
const {sender, payload} = evtData;
|
|
101
|
-
// Ignore events from self
|
|
102
|
-
if (sender === `${localUidRef.current}`) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
// // Only process if current user is also a host
|
|
106
|
-
// if (!isHostRef.current) {
|
|
107
|
-
// return;
|
|
108
|
-
// }
|
|
109
|
-
|
|
110
|
-
const data = JSON.parse(payload);
|
|
111
|
-
const {operationName, hostUid, hostName} = data;
|
|
112
|
-
|
|
113
|
-
handleHostOperationStartRef.current(operationName, hostUid, hostName);
|
|
114
|
-
} catch (error) {
|
|
115
|
-
logger.log(
|
|
116
|
-
LogSource.Internals,
|
|
117
|
-
'BREAKOUT_ROOM',
|
|
118
|
-
'Error handling host operation start event',
|
|
119
|
-
{error: error.message},
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const handleHostOperationEndEvent = (evtData: any) => {
|
|
125
|
-
logger.log(
|
|
126
|
-
LogSource.Internals,
|
|
127
|
-
'BREAKOUT_ROOM',
|
|
128
|
-
'BREAKOUT_ROOM_HOST_OPERATION_END event received',
|
|
129
|
-
evtData,
|
|
130
|
-
);
|
|
131
|
-
try {
|
|
132
|
-
const {sender, payload} = evtData;
|
|
133
|
-
// Ignore events from self
|
|
134
|
-
if (sender === `${localUidRef.current}`) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
// // Only process if current user is also a host
|
|
138
|
-
// if (!isHostRef.current) {
|
|
139
|
-
// return;
|
|
140
|
-
// }
|
|
141
|
-
|
|
142
|
-
const data = JSON.parse(payload);
|
|
143
|
-
const {operationName, hostUid, hostName} = data;
|
|
144
|
-
|
|
145
|
-
handleHostOperationEndRef.current(operationName, hostUid, hostName);
|
|
146
|
-
} catch (error) {
|
|
147
|
-
logger.log(
|
|
148
|
-
LogSource.Internals,
|
|
149
|
-
'BREAKOUT_ROOM',
|
|
150
|
-
'Error handling host operation end event',
|
|
151
|
-
{error: error.message},
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
// const handlePresenterAttributeEvent = (evtData: any) => {
|
|
157
|
-
// logger.log(
|
|
158
|
-
// LogSource.Internals,
|
|
159
|
-
// 'BREAKOUT_ROOM',
|
|
160
|
-
// 'BREAKOUT_PRESENTER_ATTRIBUTE event received',
|
|
161
|
-
// evtData,
|
|
162
|
-
// );
|
|
163
|
-
// try {
|
|
164
|
-
// const {payload} = evtData;
|
|
165
|
-
// const data = JSON.parse(payload);
|
|
166
|
-
// console.log('supriya-presenter handlePresenterAttributeEvent', data);
|
|
167
|
-
|
|
168
|
-
// const {uid, isPresenter, timestamp} = data;
|
|
169
|
-
|
|
170
|
-
// // If this is the local user's presenter attribute, restore their state
|
|
171
|
-
// // Pass shouldSendEvent: false to avoid sending the event again (infinite loop)
|
|
172
|
-
// if (uid === localUidRef.current && !isHostRef.current) {
|
|
173
|
-
// if (isPresenter) {
|
|
174
|
-
// onMakeMePresenterRef.current('start', false);
|
|
175
|
-
// } else {
|
|
176
|
-
// onMakeMePresenterRef.current('stop', false);
|
|
177
|
-
// }
|
|
178
|
-
// }
|
|
179
|
-
|
|
180
|
-
// // Host updates customRTMMainRoomData with presenter status
|
|
181
|
-
// // This is mainly for syncing state when host rejoins and reads persisted attributes
|
|
182
|
-
// if (isHostRef.current) {
|
|
183
|
-
// if (isPresenter) {
|
|
184
|
-
// setCustomRTMMainRoomData(prev => {
|
|
185
|
-
// const currentPresenters = prev.breakout_room_presenters || [];
|
|
186
|
-
// // Check if already in the list (avoid duplicate from makePresenter)
|
|
187
|
-
// const exists = currentPresenters.find((p: any) => p.uid === uid);
|
|
188
|
-
// if (exists) {
|
|
189
|
-
// return prev;
|
|
190
|
-
// }
|
|
191
|
-
// return {
|
|
192
|
-
// ...prev,
|
|
193
|
-
// breakout_room_presenters: [
|
|
194
|
-
// ...currentPresenters,
|
|
195
|
-
// {uid, timestamp},
|
|
196
|
-
// ],
|
|
197
|
-
// };
|
|
198
|
-
// });
|
|
199
|
-
// } else {
|
|
200
|
-
// // Remove from presenters list
|
|
201
|
-
// setCustomRTMMainRoomData(prev => ({
|
|
202
|
-
// ...prev,
|
|
203
|
-
// breakout_room_presenters: (
|
|
204
|
-
// prev.breakout_room_presenters || []
|
|
205
|
-
// ).filter((p: any) => p.uid !== uid),
|
|
206
|
-
// }));
|
|
207
|
-
// }
|
|
208
|
-
// }
|
|
209
|
-
// } catch (error) {
|
|
210
|
-
// logger.log(
|
|
211
|
-
// LogSource.Internals,
|
|
212
|
-
// 'BREAKOUT_ROOM',
|
|
213
|
-
// 'Error handling presenter attribute event',
|
|
214
|
-
// error,
|
|
215
|
-
// );
|
|
216
|
-
// }
|
|
217
|
-
// };
|
|
218
|
-
|
|
219
|
-
// events.on(
|
|
220
|
-
// BreakoutRoomEventNames.BREAKOUT_ROOM_ANNOUNCEMENT,
|
|
221
|
-
// handleAnnouncementEvent,
|
|
222
|
-
// );
|
|
223
|
-
// events.on(
|
|
224
|
-
// EventNames.BREAKOUT_PRESENTER_ATTRIBUTE,
|
|
225
|
-
// handlePresenterAttributeEvent,
|
|
226
|
-
// );
|
|
227
|
-
// events.on(
|
|
228
|
-
// BreakoutRoomEventNames.BREAKOUT_ROOM_MAKE_PRESENTER,
|
|
229
|
-
// handleMakePresenterEvent,
|
|
230
|
-
// );
|
|
231
|
-
events.on(
|
|
232
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_SYNC_STATE,
|
|
233
|
-
handleBreakoutRoomSyncStateEvent,
|
|
234
|
-
);
|
|
235
|
-
events.on(
|
|
236
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_HOST_OPERATION_START,
|
|
237
|
-
handleHostOperationStartEvent,
|
|
238
|
-
);
|
|
239
|
-
events.on(
|
|
240
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_HOST_OPERATION_END,
|
|
241
|
-
handleHostOperationEndEvent,
|
|
242
|
-
);
|
|
243
|
-
|
|
244
|
-
return () => {
|
|
245
|
-
// events.off(BreakoutRoomEventNames.BREAKOUT_ROOM_ANNOUNCEMENT);
|
|
246
|
-
// events.off(
|
|
247
|
-
// EventNames.BREAKOUT_PRESENTER_ATTRIBUTE,
|
|
248
|
-
// handlePresenterAttributeEvent,
|
|
249
|
-
// );
|
|
250
|
-
// events.off(
|
|
251
|
-
// BreakoutRoomEventNames.BREAKOUT_ROOM_MAKE_PRESENTER,
|
|
252
|
-
// handleMakePresenterEvent,
|
|
253
|
-
// );
|
|
254
|
-
events.off(
|
|
255
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_SYNC_STATE,
|
|
256
|
-
handleBreakoutRoomSyncStateEvent,
|
|
257
|
-
);
|
|
258
|
-
events.off(
|
|
259
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_HOST_OPERATION_START,
|
|
260
|
-
handleHostOperationStartEvent,
|
|
261
|
-
);
|
|
262
|
-
events.off(
|
|
263
|
-
BreakoutRoomEventNames.BREAKOUT_ROOM_HOST_OPERATION_END,
|
|
264
|
-
handleHostOperationEndEvent,
|
|
265
|
-
);
|
|
266
|
-
};
|
|
267
|
-
}, []);
|
|
268
|
-
|
|
269
|
-
return <>{children}</>;
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
export default BreakoutRoomEventsConfigure;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// 9. BREAKOUT ROOM
|
|
2
|
-
const BREAKOUT_ROOM_JOIN_DETAILS = 'BREAKOUT_ROOM_BREAKOUT_ROOM_JOIN_DETAILS';
|
|
3
|
-
const BREAKOUT_ROOM_SYNC_STATE = 'BREAKOUT_ROOM_BREAKOUT_ROOM_STATE';
|
|
4
|
-
const BREAKOUT_ROOM_ANNOUNCEMENT = 'BREAKOUT_ROOM_ANNOUNCEMENT';
|
|
5
|
-
const BREAKOUT_ROOM_MAKE_PRESENTER = 'BREAKOUT_ROOM_MAKE_PRESENTER';
|
|
6
|
-
const BREAKOUT_ROOM_HOST_OPERATION_START = 'BREAKOUT_ROOM_HOST_OPERATION_START';
|
|
7
|
-
const BREAKOUT_ROOM_HOST_OPERATION_END = 'BREAKOUT_ROOM_HOST_OPERATION_END';
|
|
8
|
-
|
|
9
|
-
const BreakoutRoomEventNames = {
|
|
10
|
-
BREAKOUT_ROOM_JOIN_DETAILS,
|
|
11
|
-
BREAKOUT_ROOM_SYNC_STATE,
|
|
12
|
-
BREAKOUT_ROOM_ANNOUNCEMENT,
|
|
13
|
-
BREAKOUT_ROOM_MAKE_PRESENTER,
|
|
14
|
-
BREAKOUT_ROOM_HOST_OPERATION_START,
|
|
15
|
-
BREAKOUT_ROOM_HOST_OPERATION_END,
|
|
16
|
-
};
|
|
17
|
-
export {BreakoutRoomEventNames};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
********************************************
|
|
3
|
-
Copyright © 2021 Agora Lab, Inc., all rights reserved.
|
|
4
|
-
AppBuilder and all associated components, source code, APIs, services, and documentation
|
|
5
|
-
(the "Materials") are owned by Agora Lab, Inc. and its licensors. The Materials may not be
|
|
6
|
-
accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
|
|
7
|
-
Use without a license or in violation of any license terms and conditions (including use for
|
|
8
|
-
any purpose competitive to Agora Lab, Inc.'s business) is strictly prohibited. For more
|
|
9
|
-
information visit https://appbuilder.agora.io.
|
|
10
|
-
*********************************************
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import React, {useMemo} from 'react';
|
|
14
|
-
import {useLocation} from '../../Router';
|
|
15
|
-
import {useBreakoutRoom} from '../context/BreakoutRoomContext';
|
|
16
|
-
import {useLocalUid} from '../../../../agora-rn-uikit';
|
|
17
|
-
|
|
18
|
-
export interface BreakoutRoomInfo {
|
|
19
|
-
isInBreakoutMode: boolean;
|
|
20
|
-
breakoutRoomName: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
interface BreakoutRoomNameRendererProps {
|
|
24
|
-
children: (breakoutRoomInfo: BreakoutRoomInfo) => React.ReactNode;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const BreakoutRoomNameRenderer: React.FC<BreakoutRoomNameRendererProps> = ({
|
|
28
|
-
children,
|
|
29
|
-
}) => {
|
|
30
|
-
const location = useLocation();
|
|
31
|
-
const localUid = useLocalUid();
|
|
32
|
-
const {breakoutGroups = [], breakoutRoomVersion} = useBreakoutRoom();
|
|
33
|
-
|
|
34
|
-
const breakoutRoomInfo = useMemo(() => {
|
|
35
|
-
let breakoutRoomName = '';
|
|
36
|
-
let isInBreakoutMode = false;
|
|
37
|
-
let currentRoom = null;
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
const searchParams = new URLSearchParams(location.search);
|
|
41
|
-
isInBreakoutMode = searchParams.get('breakout') === 'true';
|
|
42
|
-
|
|
43
|
-
if (isInBreakoutMode) {
|
|
44
|
-
currentRoom = breakoutGroups?.find(
|
|
45
|
-
group =>
|
|
46
|
-
group.participants?.hosts?.includes(localUid) ||
|
|
47
|
-
group.participants?.attendees?.includes(localUid),
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
if (currentRoom?.name) {
|
|
51
|
-
breakoutRoomName = currentRoom.name;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
} catch (error) {
|
|
55
|
-
// Safely handle cases where breakout context is not available
|
|
56
|
-
console.log('BreakoutRoomNameRenderer: Breakout context not available');
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
isInBreakoutMode,
|
|
61
|
-
breakoutRoomName,
|
|
62
|
-
};
|
|
63
|
-
}, [location.search, localUid, breakoutRoomVersion]);
|
|
64
|
-
|
|
65
|
-
return <>{children(breakoutRoomInfo)}</>;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export default BreakoutRoomNameRenderer;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import {useContext} from 'react';
|
|
2
|
-
import {useHistory, useParams} from '../../../components/Router';
|
|
3
|
-
import {useCaption, useContent, useSTTAPI} from 'customization-api';
|
|
4
|
-
|
|
5
|
-
const useBreakoutRoomExit = (handleLeaveBreakout?: () => void) => {
|
|
6
|
-
const history = useHistory();
|
|
7
|
-
const {phrase} = useParams<{phrase: string}>();
|
|
8
|
-
const {defaultContent} = useContent();
|
|
9
|
-
const {stop: stopSTTAPI} = useSTTAPI();
|
|
10
|
-
const {isSTTActive} = useCaption();
|
|
11
|
-
|
|
12
|
-
return async () => {
|
|
13
|
-
try {
|
|
14
|
-
// stopping STT on call end,if only last user is remaining in call
|
|
15
|
-
const usersInCall = Object.entries(defaultContent).filter(
|
|
16
|
-
item =>
|
|
17
|
-
item[1].type === 'rtc' &&
|
|
18
|
-
item[1].isHost === 'true' &&
|
|
19
|
-
!item[1].offline,
|
|
20
|
-
);
|
|
21
|
-
if (usersInCall.length === 1 && isSTTActive) {
|
|
22
|
-
console.log('Stopping stt api as only one host is in the call');
|
|
23
|
-
stopSTTAPI().catch(error => {
|
|
24
|
-
console.log('Error stopping stt', error);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Trigger exit transition if callback provided
|
|
29
|
-
if (handleLeaveBreakout) {
|
|
30
|
-
console.log('Triggering breakout room exit transition');
|
|
31
|
-
handleLeaveBreakout();
|
|
32
|
-
} else {
|
|
33
|
-
// Fallback: Navigate directly if no transition callback
|
|
34
|
-
history.push(`/${phrase}`);
|
|
35
|
-
}
|
|
36
|
-
} catch (error) {
|
|
37
|
-
// Fallback navigation on error
|
|
38
|
-
if (handleLeaveBreakout) {
|
|
39
|
-
handleLeaveBreakout();
|
|
40
|
-
} else {
|
|
41
|
-
history.push(`/${phrase}`);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
throw error; // Re-throw so caller can handle
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export default useBreakoutRoomExit;
|