agora-appbuilder-core 4.1.7 → 4.1.8-1

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.
Files changed (41) hide show
  1. package/package.json +2 -2
  2. package/template/_package-lock.json +30671 -5376
  3. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +1 -1
  4. package/template/agora-rn-uikit/src/Rtc/Join.tsx +18 -9
  5. package/template/bridge/rtc/webNg/RtcEngine.ts +2 -2
  6. package/template/defaultConfig.js +4 -3
  7. package/template/esbuild.rsdk.go +1 -2
  8. package/template/global.d.ts +1 -0
  9. package/template/package.json +1 -2
  10. package/template/src/AppWrapper.tsx +30 -35
  11. package/template/src/auth/AuthProvider.tsx +28 -35
  12. package/template/src/auth/IDPAuth.tsx +1 -14
  13. package/template/src/components/Controls.tsx +47 -15
  14. package/template/src/components/common/GenericModal.tsx +143 -0
  15. package/template/src/components/common/GenericPopup.tsx +151 -0
  16. package/template/src/components/common/data-table.tsx +412 -0
  17. package/template/src/components/controls/useControlPermissionMatrix.tsx +9 -7
  18. package/template/src/components/precall/usePreCall.tsx +1 -2
  19. package/template/src/components/recordings/RecordingItemRow.tsx +289 -0
  20. package/template/src/components/recordings/RecordingsDateTable.tsx +99 -25
  21. package/template/src/components/recordings/TextTrackItemRow.tsx +120 -0
  22. package/template/src/components/room-info/useRoomInfo.tsx +1 -0
  23. package/template/src/components/text-tracks/TextTracksTable.tsx +306 -0
  24. package/template/src/components/text-tracks/ViewTextTracksModal.tsx +44 -0
  25. package/template/src/components/text-tracks/useFetchSTTTranscript.tsx +262 -0
  26. package/template/src/components/useUserPreference.tsx +0 -11
  27. package/template/src/language/default-labels/videoCallScreenLabels.ts +7 -0
  28. package/template/src/logger/AppBuilderLogger.tsx +1 -0
  29. package/template/src/pages/Create.tsx +2 -2
  30. package/template/src/pages/VideoCall.tsx +1 -6
  31. package/template/src/subComponents/LogoutButton.tsx +1 -11
  32. package/template/src/subComponents/recording/useRecording.tsx +19 -4
  33. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +83 -78
  34. package/template/src/utils/common.tsx +79 -1
  35. package/template/src/utils/useCreateRoom.ts +94 -112
  36. package/template/src/utils/useEndCall.ts +16 -3
  37. package/template/src/utils/useGetMeetingPhrase.ts +67 -76
  38. package/template/src/utils/useJoinRoom.ts +5 -4
  39. package/template/src/utils/useMutePSTN.ts +47 -45
  40. package/template/webpack.rsdk.config.js +1 -2
  41. package/template/src/components/GraphQLProvider.tsx +0 -122
@@ -0,0 +1,151 @@
1
+ import React, {ReactNode, SetStateAction} from 'react';
2
+ import {StyleSheet, Text, View} from 'react-native';
3
+ import Spacer from '../../atoms/Spacer';
4
+ import Popup from '../../atoms/Popup';
5
+ import TertiaryButton from '../../atoms/TertiaryButton';
6
+ import PrimaryButton from '../../atoms/PrimaryButton';
7
+ import ThemeConfig from '../../theme';
8
+ import {useIsDesktop} from '../../utils/common';
9
+
10
+ export type ModalVariant = 'info' | 'warning' | 'error' | 'success';
11
+
12
+ export interface ConfirmationModalProps {
13
+ visible: boolean;
14
+ setVisible: React.Dispatch<SetStateAction<boolean>>;
15
+ title: string;
16
+ subTitle?: string;
17
+ message?: string;
18
+ variant?: ModalVariant;
19
+ confirmLabel?: string;
20
+ cancelLabel?: string;
21
+ onConfirm: () => void;
22
+ onCancel?: () => void;
23
+ footer?: ReactNode;
24
+ }
25
+
26
+ const VARIANT_COLOR: Record<ModalVariant, string> = {
27
+ info: $config.SEMANTIC_NEUTRAL,
28
+ warning: $config.SEMANTIC_WARNING,
29
+ error: $config.SEMANTIC_ERROR,
30
+ success: $config.SEMANTIC_SUCCESS,
31
+ };
32
+
33
+ const GenericPopup: React.FC<ConfirmationModalProps> = ({
34
+ visible,
35
+ setVisible,
36
+ title,
37
+ subTitle = '',
38
+ message,
39
+ variant = 'info',
40
+ confirmLabel = 'OK',
41
+ cancelLabel = 'Cancel',
42
+ onConfirm,
43
+ onCancel,
44
+ footer,
45
+ }) => {
46
+ const isDesktop = useIsDesktop()('popup');
47
+ const color = VARIANT_COLOR[variant];
48
+
49
+ const handleCancel = () => {
50
+ setVisible(false);
51
+ onCancel && onCancel();
52
+ };
53
+ const handleConfirm = () => {
54
+ onConfirm();
55
+ };
56
+
57
+ return (
58
+ <Popup
59
+ modalVisible={visible}
60
+ setModalVisible={setVisible}
61
+ showCloseIcon={false}
62
+ contentContainerStyle={styles.contentContainer}>
63
+ <Text style={[styles.title, {color}]}>{title}</Text>
64
+ <Spacer size={18} />
65
+ {message ? <Text style={styles.message}>{message}</Text> : null}
66
+ {footer ? (
67
+ <>
68
+ <Spacer size={16} />
69
+ {footer}
70
+ </>
71
+ ) : null}
72
+ <Spacer size={32} />
73
+ <View style={isDesktop ? styles.row : styles.column}>
74
+ <View style={isDesktop && {flex: 1}}>
75
+ <TertiaryButton
76
+ containerStyle={styles.tertiary}
77
+ textStyle={styles.buttonText}
78
+ text={cancelLabel}
79
+ onPress={handleCancel}
80
+ />
81
+ </View>
82
+ <Spacer size={isDesktop ? 12 : 20} horizontal={isDesktop} />
83
+ <View style={isDesktop && {flex: 1}}>
84
+ <PrimaryButton
85
+ containerStyle={[styles.primary, {backgroundColor: color}]}
86
+ textStyle={styles.buttonText}
87
+ text={confirmLabel}
88
+ onPress={handleConfirm}
89
+ />
90
+ </View>
91
+ </View>
92
+ </Popup>
93
+ );
94
+ };
95
+
96
+ export default GenericPopup;
97
+
98
+ const styles = StyleSheet.create({
99
+ contentContainer: {
100
+ padding: 24,
101
+ maxWidth: 360,
102
+ minWidth: 360,
103
+ },
104
+ title: {
105
+ fontFamily: ThemeConfig.FontFamily.sansPro,
106
+ fontWeight: '600',
107
+ fontSize: 22,
108
+ },
109
+ subTitle: {
110
+ fontFamily: ThemeConfig.FontFamily.sansPro,
111
+ fontWeight: '400',
112
+ fontSize: 14,
113
+ color: $config.FONT_COLOR,
114
+ },
115
+ message: {
116
+ fontFamily: ThemeConfig.FontFamily.sansPro,
117
+ fontWeight: '400',
118
+ fontSize: 14,
119
+ color: $config.FONT_COLOR,
120
+ },
121
+ row: {
122
+ flex: 1,
123
+ flexDirection: 'row',
124
+ justifyContent: 'center',
125
+ alignItems: 'center',
126
+ },
127
+ column: {
128
+ flexDirection: 'column-reverse',
129
+ },
130
+ primary: {
131
+ minWidth: 'auto',
132
+ width: '100%',
133
+ borderRadius: ThemeConfig.BorderRadius.medium,
134
+ height: 48,
135
+ backgroundColor: $config.SEMANTIC_ERROR,
136
+ paddingVertical: 12,
137
+ paddingHorizontal: 12,
138
+ },
139
+ tertiary: {
140
+ width: '100%',
141
+ height: 48,
142
+ paddingVertical: 12,
143
+ paddingHorizontal: 12,
144
+ borderRadius: ThemeConfig.BorderRadius.medium,
145
+ },
146
+ buttonText: {
147
+ fontWeight: '600',
148
+ fontSize: 16,
149
+ lineHeight: 24,
150
+ },
151
+ });
@@ -0,0 +1,412 @@
1
+ import React from 'react';
2
+ import {
3
+ View,
4
+ StyleSheet,
5
+ ViewStyle,
6
+ TextStyle,
7
+ Text,
8
+ StyleProp,
9
+ ScrollView,
10
+ } from 'react-native';
11
+ import ThemeConfig from '../../theme';
12
+ import hexadecimalTransparency from '../../utils/hexadecimalTransparency';
13
+ import Pagination from '../../atoms/pagination/Pagination';
14
+
15
+ // Header
16
+ interface TableHeaderProps {
17
+ columns: string[];
18
+ containerStyle?: ViewStyle;
19
+ rowStyle?: ViewStyle;
20
+ cellStyle?: ViewStyle;
21
+ firstCellStyle?: ViewStyle;
22
+ lastCellStyle?: ViewStyle;
23
+ textStyle?: TextStyle;
24
+ }
25
+
26
+ const TableHeader: React.FC<TableHeaderProps> = ({
27
+ columns,
28
+ containerStyle,
29
+ rowStyle,
30
+ cellStyle,
31
+ firstCellStyle,
32
+ lastCellStyle,
33
+ textStyle,
34
+ }) => (
35
+ <View style={[style.thead, containerStyle]}>
36
+ <View style={[style.throw, rowStyle]}>
37
+ {columns.map((col, index) => {
38
+ const isFirst = index === 0;
39
+ const isLast = index === (columns.length > 1 ? columns.length - 1 : 0);
40
+ return (
41
+ <View
42
+ key={col}
43
+ style={[
44
+ style.th,
45
+ cellStyle,
46
+ isFirst && firstCellStyle,
47
+ isLast && lastCellStyle,
48
+ ]}>
49
+ <Text style={[style.thText, textStyle]}>{col}</Text>
50
+ </View>
51
+ );
52
+ })}
53
+ </View>
54
+ </View>
55
+ );
56
+
57
+ // Body
58
+
59
+ export type TableStatus = 'idle' | 'pending' | 'resolved' | 'rejected';
60
+
61
+ export interface TableBodyProps<T> {
62
+ status: TableStatus;
63
+ items: T[];
64
+ loadingComponent?: React.ReactNode;
65
+ emptyComponent?: React.ReactNode;
66
+ renderRow: (item: T, index: number) => React.ReactNode;
67
+ containerStyle?: StyleProp<ViewStyle>;
68
+ horizontalContainerStyle?: StyleProp<ViewStyle>;
69
+ bodyStyle?: StyleProp<ViewStyle>;
70
+ }
71
+
72
+ function TableBody<T>({
73
+ status,
74
+ items,
75
+ loadingComponent,
76
+ emptyComponent,
77
+ renderRow,
78
+ bodyStyle,
79
+ }: TableBodyProps<T>) {
80
+ const renderTableBodyContent = () => {
81
+ // Loading state
82
+ if (status === 'idle' || status === 'pending') {
83
+ return <>{loadingComponent || null}</>;
84
+ }
85
+ // Empty state
86
+ if (status === 'resolved' && items.length === 0) {
87
+ return <>{emptyComponent || null}</>;
88
+ }
89
+ // Data state
90
+ return items.map((item, index) => renderRow(item, index));
91
+ };
92
+
93
+ // Data state
94
+ return (
95
+ <ScrollView contentContainerStyle={[style.scrollgrow]}>
96
+ <ScrollView horizontal contentContainerStyle={[style.scrollgrow]}>
97
+ <View style={[style.tbody, bodyStyle]}>{renderTableBodyContent()}</View>
98
+ </ScrollView>
99
+ </ScrollView>
100
+ );
101
+ }
102
+
103
+ // Footer
104
+ interface TableFooterProps {
105
+ currentPage: number;
106
+ onPageChange: (page: number) => void;
107
+ pagination?: Partial<{
108
+ total: number;
109
+ limit: number;
110
+ page: number;
111
+ }>;
112
+ containerStyle?: ViewStyle;
113
+ infoTextStyle?: TextStyle;
114
+ paginationWrapperStyle?: ViewStyle;
115
+ paginationContainerStyle?: ViewStyle;
116
+ }
117
+
118
+ const TableFooter: React.FC<TableFooterProps> = ({
119
+ currentPage,
120
+ onPageChange,
121
+ pagination,
122
+ containerStyle,
123
+ infoTextStyle,
124
+ paginationWrapperStyle,
125
+ paginationContainerStyle,
126
+ }) => {
127
+ if (!pagination || pagination.total === 0) {
128
+ return (
129
+ <View style={[style.mfooter, containerStyle]}>
130
+ <Text style={infoTextStyle}> </Text>
131
+ </View>
132
+ );
133
+ }
134
+
135
+ const {limit = 10, total = 0} = pagination || {};
136
+ const maxShowing = Math.min(limit * currentPage, total);
137
+ const showing = total <= limit ? total : maxShowing;
138
+
139
+ return (
140
+ <View style={[style.mfooter, containerStyle]}>
141
+ <Text style={[style.mfooterTitle, infoTextStyle]}>
142
+ Showing {showing} of {total}
143
+ </Text>
144
+ <View style={[style.pushRight, paginationWrapperStyle]}>
145
+ <View style={[style.pagination, paginationContainerStyle]}>
146
+ <Pagination
147
+ currentPage={currentPage}
148
+ totalCount={total}
149
+ pageSize={limit}
150
+ onPageChange={onPageChange}
151
+ />
152
+ </View>
153
+ </View>
154
+ </View>
155
+ );
156
+ };
157
+
158
+ export {TableHeader, TableFooter, TableBody};
159
+
160
+ export const style = StyleSheet.create({
161
+ scrollgrow: {
162
+ flexGrow: 1,
163
+ },
164
+ mContainer: {
165
+ display: 'flex',
166
+ flexDirection: 'column',
167
+ alignItems: 'flex-start',
168
+ flexShrink: 0,
169
+ // width: 620,
170
+ width: '100%',
171
+ maxWidth: 680,
172
+ minWidth: 340,
173
+ height: 620,
174
+ maxHeight: 620,
175
+ borderRadius: 4,
176
+ zIndex: 2,
177
+ },
178
+ mHeader: {
179
+ display: 'flex',
180
+ flexDirection: 'row',
181
+ width: '100%',
182
+ height: 60,
183
+ paddingHorizontal: 20,
184
+ paddingVertical: 12,
185
+ alignItems: 'center',
186
+ gap: 20,
187
+ flexShrink: 0,
188
+ borderWidth: 1,
189
+ borderColor: $config.CARD_LAYER_3_COLOR,
190
+ backgroundColor: $config.CARD_LAYER_1_COLOR,
191
+ },
192
+ mbody: {
193
+ width: '100%',
194
+ flex: 1,
195
+ },
196
+ mfooter: {
197
+ display: 'flex',
198
+ flexDirection: 'row',
199
+ width: '100%',
200
+ height: 60,
201
+ paddingVertical: 12,
202
+ paddingHorizontal: 16,
203
+ justifyContent: 'space-between',
204
+ alignItems: 'center',
205
+ flexShrink: 0,
206
+ borderTopWidth: 1,
207
+ borderTopColor: $config.CARD_LAYER_3_COLOR,
208
+ backgroundColor: $config.CARD_LAYER_2_COLOR,
209
+ },
210
+ ttable: {
211
+ flex: 1,
212
+ },
213
+ // Header styles start
214
+ thead: {
215
+ display: 'flex',
216
+ height: 40,
217
+ paddingHorizontal: 20,
218
+ alignItems: 'center',
219
+ flexShrink: 0,
220
+ backgroundColor: $config.CARD_LAYER_2_COLOR,
221
+ },
222
+ throw: {
223
+ flex: 1,
224
+ alignSelf: 'stretch',
225
+ flexDirection: 'row',
226
+ },
227
+ th: {
228
+ flex: 1,
229
+ alignSelf: 'stretch',
230
+ justifyContent: 'center',
231
+ // paddingHorizontal: 12,
232
+ },
233
+ thText: {
234
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.medium,
235
+ fontSize: ThemeConfig.FontSize.small,
236
+ fontFamily: ThemeConfig.FontFamily.sansPro,
237
+ lineHeight: 16,
238
+ },
239
+ // Header style ends
240
+ // Body style starts
241
+ tbody: {
242
+ backgroundColor: $config.CARD_LAYER_1_COLOR,
243
+ paddingHorizontal: 20,
244
+ flex: 1,
245
+ },
246
+ tbrow: {
247
+ display: 'flex',
248
+ alignSelf: 'stretch',
249
+ minHeight: 50,
250
+ flexDirection: 'row',
251
+ paddingBottom: 10,
252
+ paddingTop: 20,
253
+ },
254
+ td: {
255
+ flex: 1,
256
+ alignSelf: 'center',
257
+ justifyContent: 'center',
258
+ gap: 10,
259
+ },
260
+ tpreview: {
261
+ width: '100%',
262
+ height: 76,
263
+ padding: 4,
264
+ backgroundColor: 'black',
265
+ border: '1px solid grey',
266
+ color: $config.FONT_COLOR,
267
+ },
268
+ ttime: {
269
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.medium,
270
+ fontSize: ThemeConfig.FontSize.small,
271
+ fontFamily: ThemeConfig.FontFamily.sansPro,
272
+ lineHeight: 16,
273
+ },
274
+ tname: {
275
+ color: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
276
+ fontSize: ThemeConfig.FontSize.small,
277
+ fontFamily: ThemeConfig.FontFamily.sansPro,
278
+ lineHeight: 16,
279
+ },
280
+ tactions: {
281
+ display: 'flex',
282
+ flexDirection: 'row',
283
+ alignItems: 'center',
284
+ justifyContent: 'flex-end',
285
+ },
286
+ tlink: {
287
+ color: $config.PRIMARY_ACTION_BRAND_COLOR,
288
+ fontSize: ThemeConfig.FontSize.tiny,
289
+ fontFamily: ThemeConfig.FontFamily.sansPro,
290
+ fontWeight: '600',
291
+ lineHeight: 12,
292
+ },
293
+ // footer start
294
+ mfooterTitle: {
295
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.low,
296
+ fontSize: ThemeConfig.FontSize.small,
297
+ fontFamily: ThemeConfig.FontFamily.sansPro,
298
+ lineHeight: 16,
299
+ },
300
+ pagination: {
301
+ display: 'flex',
302
+ flexDirection: 'row',
303
+ alignItems: 'flex-start',
304
+ borderRadius: 4,
305
+ borderWidth: 1,
306
+ borderColor: $config.CARD_LAYER_4_COLOR,
307
+ backgroundColor: $config.CARD_LAYER_3_COLOR,
308
+ },
309
+ placeHolder: {
310
+ fontSize: ThemeConfig.FontSize.tiny,
311
+ fontFamily: ThemeConfig.FontFamily.sansPro,
312
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.low,
313
+ },
314
+ // footer ends
315
+ captionContainer: {
316
+ height: 44,
317
+ backgroundColor: $config.CARD_LAYER_2_COLOR,
318
+ padding: 12,
319
+ borderRadius: 4,
320
+ flexDirection: 'row',
321
+ justifyContent: 'flex-start',
322
+ },
323
+ captionText: {
324
+ fontSize: 12,
325
+ fontWeight: '400',
326
+ fontFamily: 'Source Sans Pro',
327
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.high,
328
+ paddingLeft: 8,
329
+ },
330
+ infotextContainer: {
331
+ display: 'flex',
332
+ flex: 1,
333
+ alignItems: 'center',
334
+ justifyContent: 'center',
335
+ },
336
+ infoText: {
337
+ fontSize: 16,
338
+ fontWeight: '600',
339
+ fontFamily: 'Source Sans Pro',
340
+ color: $config.FONT_COLOR + ThemeConfig.EmphasisPlus.low,
341
+ },
342
+ iconButtonContainer: {
343
+ marginTop: -8,
344
+ },
345
+ iconButton: {
346
+ width: 32,
347
+ height: 32,
348
+ display: 'flex',
349
+ alignItems: 'center',
350
+ justifyContent: 'center',
351
+ shadowColor: $config.HARD_CODED_BLACK_COLOR,
352
+ },
353
+ iconButtonHoverEffect: {
354
+ backgroundColor:
355
+ $config.CARD_LAYER_5_COLOR + hexadecimalTransparency['25%'],
356
+ borderRadius: 16,
357
+ },
358
+ iconShareLink: {
359
+ width: 32,
360
+ height: 32,
361
+ display: 'flex',
362
+ alignItems: 'center',
363
+ justifyContent: 'center',
364
+ },
365
+ zeroHPadding: {
366
+ paddingHorizontal: 0,
367
+ },
368
+ pushRight: {
369
+ marginLeft: 'auto',
370
+ },
371
+ pl10: {
372
+ paddingLeft: 10,
373
+ },
374
+ plzero: {
375
+ paddingLeft: 0,
376
+ },
377
+ pt10: {
378
+ paddingTop: 10,
379
+ },
380
+ pt12: {
381
+ paddingTop: 12,
382
+ },
383
+ pv10: {
384
+ paddingVertical: 10,
385
+ },
386
+ ph20: {
387
+ paddingHorizontal: 20,
388
+ },
389
+ pl15: {
390
+ paddingLeft: 15,
391
+ },
392
+ // icon celles
393
+ tdIconCell: {
394
+ flex: 0,
395
+ flexShrink: 0,
396
+ alignItems: 'flex-start',
397
+ justifyContent: 'center',
398
+ minWidth: 52,
399
+ // paddingRight: 50 + 12,
400
+ },
401
+ thIconCell: {
402
+ flex: 0,
403
+ flexShrink: 0,
404
+ alignSelf: 'stretch',
405
+ justifyContent: 'center',
406
+ minWidth: 50,
407
+ paddingHorizontal: 12,
408
+ },
409
+ alignCellToRight: {
410
+ alignItems: 'flex-end',
411
+ },
412
+ });
@@ -3,7 +3,7 @@ import {useContext} from 'react';
3
3
  import {ClientRoleType, PropsContext} from '../../../agora-rn-uikit/src';
4
4
  import {useRoomInfo} from '../room-info/useRoomInfo';
5
5
  import {joinRoomPreference} from '../../utils/useJoinRoom';
6
- import isMobileOrTablet from '../../utils/isMobileOrTablet';
6
+ import {isWeb} from '../../utils/common';
7
7
 
8
8
  /**
9
9
  * ControlPermissionKey represents the different keys
@@ -14,7 +14,8 @@ export type ControlPermissionKey =
14
14
  | 'inviteControl'
15
15
  | 'participantControl'
16
16
  | 'screenshareControl'
17
- | 'settingsControl';
17
+ | 'settingsControl'
18
+ | 'viewAllTextTracks';
18
19
 
19
20
  /**
20
21
  * ControlPermissionRule defines the properties used to evaluate permission rules.
@@ -35,11 +36,12 @@ export const controlPermissionMatrix: Record<
35
36
  settingsControl: ({preference}) => !preference.disableSettings,
36
37
  screenshareControl: ({preference}) =>
37
38
  $config.SCREEN_SHARING && !preference.disableScreenShare,
38
- // !(
39
- // $config.EVENT_MODE &&
40
- // role == ClientRoleType.ClientRoleAudience &&
41
- // !$config.RAISE_HAND
42
- // ),
39
+ viewAllTextTracks: ({isHost}) =>
40
+ isHost &&
41
+ $config.ENABLE_STT &&
42
+ $config.ENABLE_MEETING_TRANSCRIPT &&
43
+ $config.ENABLE_TEXT_TRACKS &&
44
+ isWeb(),
43
45
  };
44
46
 
45
47
  export const useControlPermissionMatrix = (
@@ -11,7 +11,6 @@
11
11
  */
12
12
  import React, {createContext, useContext, useEffect, useState} from 'react';
13
13
  import {createHook} from 'customization-implementation';
14
- import {ApolloError} from '@apollo/client';
15
14
  import {SdkApiContext} from '../SdkApiContext';
16
15
  import {useRoomInfo} from '../room-info/useRoomInfo';
17
16
  import SDKEvents from '../../utils/SdkEvents';
@@ -21,7 +20,7 @@ import useSetName from '../../utils/useSetName';
21
20
  export interface PreCallContextInterface {
22
21
  callActive: boolean;
23
22
  setCallActive: React.Dispatch<React.SetStateAction<boolean>>;
24
- error?: ApolloError;
23
+ error?: any;
25
24
  isCameraAvailable?: boolean;
26
25
  setCameraAvailable: React.Dispatch<React.SetStateAction<boolean>>;
27
26
  isMicAvailable?: boolean;