agora-appbuilder-core 4.0.25 → 4.0.26-beta-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.
- package/package.json +1 -1
- package/template/customization-api/typeDefinition.ts +3 -8
- package/template/customization-api/utils.ts +1 -0
- package/template/defaultConfig.js +51 -51
- package/template/src/AppWrapper.tsx +1 -1
- package/template/src/atoms/ActionMenu.tsx +88 -23
- package/template/src/atoms/Carousel.tsx +30 -24
- package/template/src/atoms/Toolbar.tsx +0 -8
- package/template/src/atoms/ToolbarPreset.tsx +77 -45
- package/template/src/components/Controls.tsx +289 -218
- package/template/src/components/Leftbar.tsx +62 -43
- package/template/src/components/Navbar.tsx +80 -77
- package/template/src/components/NavbarMobile.tsx +51 -46
- package/template/src/components/Rightbar.tsx +60 -43
- package/template/src/components/room-info/useRoomInfo.tsx +1 -1
- package/template/src/pages/video-call/ActionSheet.tsx +4 -4
- package/template/src/pages/video-call/ActionSheetContent.tsx +134 -211
- package/template/src/pages/video-call/VideoCallMobileView.tsx +21 -27
- package/template/src/pages/video-call/VideoCallScreen.tsx +30 -20
- package/template/src/pages/video-call/index.ts +2 -0
- package/template/src/utils/common.tsx +48 -0
package/package.json
CHANGED
|
@@ -12,14 +12,9 @@
|
|
|
12
12
|
import React from 'react';
|
|
13
13
|
export type {ChatBubbleProps} from '../src/components/ChatContext';
|
|
14
14
|
import {ChatBubbleProps} from '../src/components/ChatContext';
|
|
15
|
-
import {
|
|
16
|
-
ContentInterface,
|
|
17
|
-
ContentStateInterface,
|
|
18
|
-
UidType,
|
|
19
|
-
} from '../agora-rn-uikit';
|
|
15
|
+
import {ContentStateInterface} from '../agora-rn-uikit';
|
|
20
16
|
import {I18nInterface} from '../src/language/i18nTypes';
|
|
21
|
-
import {
|
|
22
|
-
import {ToolbarCustomItem} from './sub-components';
|
|
17
|
+
import {ToolbarPresetProps} from './sub-components';
|
|
23
18
|
import {TextDataInterface} from '../src/language/default-labels';
|
|
24
19
|
import {VBPanelProps} from '../src/components/virtual-background/VBPanel';
|
|
25
20
|
|
|
@@ -60,7 +55,7 @@ export interface LayoutItem {
|
|
|
60
55
|
component: LayoutComponent;
|
|
61
56
|
}
|
|
62
57
|
|
|
63
|
-
export type ToolbarType = React.ComponentType |
|
|
58
|
+
export type ToolbarType = React.ComponentType | ToolbarPresetProps['items'];
|
|
64
59
|
export type CustomLogger = (
|
|
65
60
|
message: string,
|
|
66
61
|
data: any,
|
|
@@ -35,4 +35,5 @@ export {default as useLocalAudio} from '../src/utils/useLocalAudio';
|
|
|
35
35
|
export {default as useLocalVideo} from '../src/utils/useLocalVideo';
|
|
36
36
|
export type {LanguageType} from '../src/subComponents/caption/utils';
|
|
37
37
|
export {default as useSpeechToText} from '../src/utils/useSpeechToText';
|
|
38
|
+
export {isMobileUA} from '../src/utils/common';
|
|
38
39
|
export {getSessionId} from '../src/utils/common';
|
|
@@ -1,64 +1,64 @@
|
|
|
1
1
|
const DefaultConfig = {
|
|
2
|
-
PROJECT_ID:
|
|
3
|
-
APP_ID:
|
|
4
|
-
PRODUCT_ID:
|
|
5
|
-
APP_NAME:
|
|
6
|
-
LOGO:
|
|
7
|
-
ICON:
|
|
8
|
-
FRONTEND_ENDPOINT:
|
|
9
|
-
BACKEND_ENDPOINT:
|
|
2
|
+
PROJECT_ID: "",
|
|
3
|
+
APP_ID: "",
|
|
4
|
+
PRODUCT_ID: "helloworld",
|
|
5
|
+
APP_NAME: "HelloWorld",
|
|
6
|
+
LOGO: "data:image/png;base64,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",
|
|
7
|
+
ICON: "logoSquare.png",
|
|
8
|
+
FRONTEND_ENDPOINT: "",
|
|
9
|
+
BACKEND_ENDPOINT: "https://managedservices-preprod.rteappbuilder.com",
|
|
10
10
|
PSTN: false,
|
|
11
11
|
PRECALL: true,
|
|
12
12
|
CHAT: true,
|
|
13
13
|
CLOUD_RECORDING: false,
|
|
14
|
-
RECORDING_MODE:
|
|
14
|
+
RECORDING_MODE: "WEB",
|
|
15
15
|
SCREEN_SHARING: true,
|
|
16
|
-
LANDING_SUB_HEADING:
|
|
16
|
+
LANDING_SUB_HEADING: "The Real-Time Engagement Platform",
|
|
17
17
|
ENCRYPTION_ENABLED: false,
|
|
18
18
|
ENABLE_GOOGLE_OAUTH: false,
|
|
19
19
|
ENABLE_APPLE_OAUTH: false,
|
|
20
20
|
ENABLE_SLACK_OAUTH: false,
|
|
21
21
|
ENABLE_MICROSOFT_OAUTH: false,
|
|
22
|
-
GOOGLE_CLIENT_ID:
|
|
23
|
-
MICROSOFT_CLIENT_ID:
|
|
24
|
-
SLACK_CLIENT_ID:
|
|
25
|
-
APPLE_CLIENT_ID:
|
|
22
|
+
GOOGLE_CLIENT_ID: "",
|
|
23
|
+
MICROSOFT_CLIENT_ID: "",
|
|
24
|
+
SLACK_CLIENT_ID: "",
|
|
25
|
+
APPLE_CLIENT_ID: "",
|
|
26
26
|
GEO_FENCING: true,
|
|
27
|
-
GEO_FENCING_INCLUDE_AREA:
|
|
28
|
-
GEO_FENCING_EXCLUDE_AREA:
|
|
27
|
+
GEO_FENCING_INCLUDE_AREA: "GLOBAL",
|
|
28
|
+
GEO_FENCING_EXCLUDE_AREA: "",
|
|
29
29
|
LOG_ENABLED: true,
|
|
30
30
|
EVENT_MODE: false,
|
|
31
31
|
RAISE_HAND: false,
|
|
32
32
|
AUDIO_ROOM: false,
|
|
33
|
-
BG:
|
|
34
|
-
PRIMARY_FONT_COLOR:
|
|
35
|
-
SECONDARY_FONT_COLOR:
|
|
36
|
-
PROFILE:
|
|
37
|
-
SCREEN_SHARE_PROFILE:
|
|
33
|
+
BG: "",
|
|
34
|
+
PRIMARY_FONT_COLOR: "#363636",
|
|
35
|
+
SECONDARY_FONT_COLOR: "#FFFFFF",
|
|
36
|
+
PROFILE: "720p_3",
|
|
37
|
+
SCREEN_SHARE_PROFILE: "1080p_2",
|
|
38
38
|
ICON_TEXT: true,
|
|
39
|
-
PRIMARY_ACTION_BRAND_COLOR:
|
|
40
|
-
PRIMARY_ACTION_TEXT_COLOR:
|
|
41
|
-
SECONDARY_ACTION_COLOR:
|
|
42
|
-
FONT_COLOR:
|
|
43
|
-
BACKGROUND_COLOR:
|
|
44
|
-
VIDEO_AUDIO_TILE_COLOR:
|
|
45
|
-
VIDEO_AUDIO_TILE_OVERLAY_COLOR:
|
|
46
|
-
VIDEO_AUDIO_TILE_TEXT_COLOR:
|
|
47
|
-
VIDEO_AUDIO_TILE_AVATAR_COLOR:
|
|
48
|
-
SEMANTIC_ERROR:
|
|
49
|
-
SEMANTIC_SUCCESS:
|
|
50
|
-
SEMANTIC_WARNING:
|
|
51
|
-
SEMANTIC_NEUTRAL:
|
|
52
|
-
INPUT_FIELD_BACKGROUND_COLOR:
|
|
53
|
-
INPUT_FIELD_BORDER_COLOR:
|
|
54
|
-
CARD_LAYER_1_COLOR:
|
|
55
|
-
CARD_LAYER_2_COLOR:
|
|
56
|
-
CARD_LAYER_3_COLOR:
|
|
57
|
-
CARD_LAYER_4_COLOR:
|
|
58
|
-
CARD_LAYER_5_COLOR:
|
|
59
|
-
HARD_CODED_BLACK_COLOR:
|
|
60
|
-
ICON_BG_COLOR:
|
|
61
|
-
TOOLBAR_COLOR:
|
|
39
|
+
PRIMARY_ACTION_BRAND_COLOR: "#099DFD",
|
|
40
|
+
PRIMARY_ACTION_TEXT_COLOR: "#FFFFFF",
|
|
41
|
+
SECONDARY_ACTION_COLOR: "#FFFFFF",
|
|
42
|
+
FONT_COLOR: "#FFFFFF",
|
|
43
|
+
BACKGROUND_COLOR: "#111111",
|
|
44
|
+
VIDEO_AUDIO_TILE_COLOR: "#222222",
|
|
45
|
+
VIDEO_AUDIO_TILE_OVERLAY_COLOR: "#000004",
|
|
46
|
+
VIDEO_AUDIO_TILE_TEXT_COLOR: "#FFFFFF",
|
|
47
|
+
VIDEO_AUDIO_TILE_AVATAR_COLOR: "#BDD0DB",
|
|
48
|
+
SEMANTIC_ERROR: "#FF414D",
|
|
49
|
+
SEMANTIC_SUCCESS: "#36B37E",
|
|
50
|
+
SEMANTIC_WARNING: "#FFAB00",
|
|
51
|
+
SEMANTIC_NEUTRAL: "#808080",
|
|
52
|
+
INPUT_FIELD_BACKGROUND_COLOR: "#181818",
|
|
53
|
+
INPUT_FIELD_BORDER_COLOR: "#262626",
|
|
54
|
+
CARD_LAYER_1_COLOR: "#1D1D1D",
|
|
55
|
+
CARD_LAYER_2_COLOR: "#262626",
|
|
56
|
+
CARD_LAYER_3_COLOR: "#2D2D2D",
|
|
57
|
+
CARD_LAYER_4_COLOR: "#333333",
|
|
58
|
+
CARD_LAYER_5_COLOR: "#808080",
|
|
59
|
+
HARD_CODED_BLACK_COLOR: "#000000",
|
|
60
|
+
ICON_BG_COLOR: "#242529",
|
|
61
|
+
TOOLBAR_COLOR: "#111111",
|
|
62
62
|
ACTIVE_SPEAKER: true,
|
|
63
63
|
ENABLE_IDP_AUTH: false,
|
|
64
64
|
ENABLE_TOKEN_AUTH: false,
|
|
@@ -70,14 +70,14 @@ const DefaultConfig = {
|
|
|
70
70
|
ENABLE_WHITEBOARD: false,
|
|
71
71
|
ENABLE_WHITEBOARD_FILE_UPLOAD: false,
|
|
72
72
|
ENABLE_WAITING_ROOM: false,
|
|
73
|
-
WHITEBOARD_APPIDENTIFIER:
|
|
74
|
-
WHITEBOARD_REGION:
|
|
73
|
+
WHITEBOARD_APPIDENTIFIER: "",
|
|
74
|
+
WHITEBOARD_REGION: "",
|
|
75
75
|
ENABLE_NOISE_CANCELLATION_BY_DEFAULT: false,
|
|
76
|
-
CHAT_ORG_NAME:
|
|
77
|
-
CHAT_APP_NAME:
|
|
78
|
-
CHAT_URL:
|
|
79
|
-
CLI_VERSION:
|
|
80
|
-
CORE_VERSION:
|
|
76
|
+
CHAT_ORG_NAME: "",
|
|
77
|
+
CHAT_APP_NAME: "",
|
|
78
|
+
CHAT_URL: "",
|
|
79
|
+
CLI_VERSION: "3.0.25",
|
|
80
|
+
CORE_VERSION: "4.0.25",
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
module.exports = DefaultConfig;
|
|
@@ -86,7 +86,7 @@ const AppWrapper = (props: AppWrapperProps) => {
|
|
|
86
86
|
// @ts-ignore textAlign not supported by TS definitions but is applied to web regardless
|
|
87
87
|
style={[{flex: 1}, Platform.select({web: {textAlign: 'left'}})]}>
|
|
88
88
|
<StatusBar hidden={true} />
|
|
89
|
-
<BlockUI />
|
|
89
|
+
{/* <BlockUI /> */}
|
|
90
90
|
<StorageProvider>
|
|
91
91
|
<LanguageProvider>
|
|
92
92
|
<GraphQLProvider>
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
Image,
|
|
9
9
|
TouchableOpacity,
|
|
10
10
|
ViewStyle,
|
|
11
|
+
useWindowDimensions,
|
|
11
12
|
} from 'react-native';
|
|
12
13
|
import React, {SetStateAction, useState} from 'react';
|
|
13
14
|
|
|
@@ -17,8 +18,12 @@ import ThemeConfig from '../theme';
|
|
|
17
18
|
import {isWebInternal} from '../utils/common';
|
|
18
19
|
import hexadecimalTransparency from '../utils/hexadecimalTransparency';
|
|
19
20
|
import Toggle from './Toggle';
|
|
21
|
+
import {Either} from '../../agora-rn-uikit/src/Controls/types';
|
|
22
|
+
import {ToolbarItemHide, ToolbarMoreMenuCustomItem} from './ToolbarPreset';
|
|
20
23
|
|
|
21
24
|
export interface ActionMenuItem {
|
|
25
|
+
componentName?: string;
|
|
26
|
+
order?: number;
|
|
22
27
|
isExternalIcon?: boolean;
|
|
23
28
|
externalIconString?: string;
|
|
24
29
|
isBase64Icon?: boolean;
|
|
@@ -33,6 +38,7 @@ export interface ActionMenuItem {
|
|
|
33
38
|
onHoverContent?: JSX.Element;
|
|
34
39
|
disabled?: boolean;
|
|
35
40
|
iconSize?: number;
|
|
41
|
+
hide?: ToolbarItemHide;
|
|
36
42
|
}
|
|
37
43
|
export interface ActionMenuProps {
|
|
38
44
|
from: string;
|
|
@@ -44,7 +50,7 @@ export interface ActionMenuProps {
|
|
|
44
50
|
left?: number;
|
|
45
51
|
bottom?: number;
|
|
46
52
|
};
|
|
47
|
-
items: ActionMenuItem[]
|
|
53
|
+
items: Either<ActionMenuItem[], ToolbarMoreMenuCustomItem[]>;
|
|
48
54
|
hoverMode?: boolean;
|
|
49
55
|
onHover?: (hover: boolean) => void;
|
|
50
56
|
containerStyle?: ViewStyle;
|
|
@@ -58,28 +64,87 @@ const ActionMenu = (props: ActionMenuProps) => {
|
|
|
58
64
|
items,
|
|
59
65
|
hoverMode = false,
|
|
60
66
|
} = props;
|
|
67
|
+
const {width, height} = useWindowDimensions();
|
|
61
68
|
|
|
62
69
|
const renderItems = () => {
|
|
63
|
-
return items?.map(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
70
|
+
return items?.map((item, index) => {
|
|
71
|
+
//rendering the custom item with default UI
|
|
72
|
+
const {title, onPress, iconBase64, componentName, hide = false} = item;
|
|
73
|
+
|
|
74
|
+
if (typeof hide === 'boolean' && hide) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
if (typeof hide === 'function' && hide && hide(width, height)) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {}
|
|
83
|
+
|
|
84
|
+
if (title && onPress) {
|
|
85
|
+
return (
|
|
86
|
+
<PlatformWrapper key={props.from + '_' + componentName + index}>
|
|
87
|
+
{(isHovered: boolean) => (
|
|
88
|
+
<>
|
|
89
|
+
<TouchableOpacity
|
|
90
|
+
disabled={false}
|
|
91
|
+
style={[
|
|
92
|
+
styles.row,
|
|
93
|
+
isHovered && !false
|
|
94
|
+
? //first item should have border-radius on top left and top right
|
|
95
|
+
index === 0
|
|
96
|
+
? styles.rowHoveredFirstChild
|
|
97
|
+
: //last item should have border-radius on bottom left and top right
|
|
98
|
+
items?.length - 1 === index
|
|
99
|
+
? styles.rowHoveredLastChild
|
|
100
|
+
: //middle items don't need any border-radius
|
|
101
|
+
styles.rowHoveredMiddleItems
|
|
102
|
+
: {},
|
|
103
|
+
false ? {opacity: 0.4} : {},
|
|
104
|
+
items?.length - 1 === index
|
|
105
|
+
? {borderBottomColor: 'transparent'}
|
|
106
|
+
: {},
|
|
107
|
+
]}
|
|
108
|
+
onPress={onPress}
|
|
109
|
+
key={componentName + index}>
|
|
110
|
+
{iconBase64 ? (
|
|
111
|
+
<View style={styles.iconContainer}>
|
|
112
|
+
<ImageIcon
|
|
113
|
+
base64={false}
|
|
114
|
+
base64TintColor={$config.SECONDARY_ACTION_COLOR}
|
|
115
|
+
iconType="plain"
|
|
116
|
+
iconSize={24}
|
|
117
|
+
icon={iconBase64}
|
|
118
|
+
tintColor={$config.SECONDARY_ACTION_COLOR}
|
|
119
|
+
/>
|
|
120
|
+
</View>
|
|
121
|
+
) : (
|
|
122
|
+
<></>
|
|
123
|
+
)}
|
|
124
|
+
<Text style={[styles.text]}>{title}</Text>
|
|
125
|
+
</TouchableOpacity>
|
|
126
|
+
</>
|
|
127
|
+
)}
|
|
128
|
+
</PlatformWrapper>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const {
|
|
133
|
+
icon = '',
|
|
134
|
+
onHoverIcon,
|
|
135
|
+
isBase64Icon = false,
|
|
136
|
+
isExternalIcon = false,
|
|
137
|
+
externalIconString = '',
|
|
138
|
+
toggleStatus,
|
|
139
|
+
callback,
|
|
140
|
+
iconColor,
|
|
141
|
+
textColor,
|
|
142
|
+
disabled = false,
|
|
143
|
+
onHoverCallback = undefined,
|
|
144
|
+
onHoverContent = undefined,
|
|
145
|
+
iconSize = 20,
|
|
146
|
+
} = item;
|
|
147
|
+
return (
|
|
83
148
|
<PlatformWrapper key={props.from + '_' + title + index}>
|
|
84
149
|
{(isHovered: boolean) => (
|
|
85
150
|
<>
|
|
@@ -150,8 +215,8 @@ const ActionMenu = (props: ActionMenuProps) => {
|
|
|
150
215
|
</>
|
|
151
216
|
)}
|
|
152
217
|
</PlatformWrapper>
|
|
153
|
-
)
|
|
154
|
-
);
|
|
218
|
+
);
|
|
219
|
+
});
|
|
155
220
|
};
|
|
156
221
|
|
|
157
222
|
return (
|
|
@@ -10,9 +10,10 @@ interface CarouselItem {
|
|
|
10
10
|
|
|
11
11
|
interface CarouselProps {
|
|
12
12
|
data: CarouselItem[];
|
|
13
|
+
isPaginationRequired?: boolean;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
const Carousel: React.FC<CarouselProps> = ({data}) => {
|
|
16
|
+
const Carousel: React.FC<CarouselProps> = ({data, isPaginationRequired}) => {
|
|
16
17
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
17
18
|
|
|
18
19
|
const flatListRef = React.useRef<FlatList | null>(null);
|
|
@@ -36,7 +37,8 @@ const Carousel: React.FC<CarouselProps> = ({data}) => {
|
|
|
36
37
|
};
|
|
37
38
|
|
|
38
39
|
return (
|
|
39
|
-
<View
|
|
40
|
+
<View
|
|
41
|
+
style={[styles.container, !isPaginationRequired ? {paddingTop: 24} : {}]}>
|
|
40
42
|
<FlatList
|
|
41
43
|
ref={flatListRef}
|
|
42
44
|
data={data}
|
|
@@ -47,28 +49,32 @@ const Carousel: React.FC<CarouselProps> = ({data}) => {
|
|
|
47
49
|
keyExtractor={(_, index) => index.toString()}
|
|
48
50
|
onScroll={handleScroll}
|
|
49
51
|
/>
|
|
50
|
-
|
|
51
|
-
{
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
52
|
+
{isPaginationRequired ? (
|
|
53
|
+
<View style={styles.indicatorContainer}>
|
|
54
|
+
{data.map((_, index) => (
|
|
55
|
+
<Pressable
|
|
56
|
+
key={index}
|
|
57
|
+
onPress={() => {
|
|
58
|
+
scrollToIndex(index);
|
|
59
|
+
setActiveIndex(index);
|
|
60
|
+
}}
|
|
61
|
+
hitSlop={5} // to increase clickable area
|
|
62
|
+
>
|
|
63
|
+
{({pressed}) => (
|
|
64
|
+
<View
|
|
65
|
+
style={[
|
|
66
|
+
styles.dot,
|
|
67
|
+
index === activeIndex && styles.activeDot,
|
|
68
|
+
pressed && styles.pressedDot,
|
|
69
|
+
]}
|
|
70
|
+
/>
|
|
71
|
+
)}
|
|
72
|
+
</Pressable>
|
|
73
|
+
))}
|
|
74
|
+
</View>
|
|
75
|
+
) : (
|
|
76
|
+
<></>
|
|
77
|
+
)}
|
|
72
78
|
</View>
|
|
73
79
|
);
|
|
74
80
|
};
|
|
@@ -2,16 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import {View, StyleSheet} from 'react-native';
|
|
3
3
|
import {useToolbar, ToolbarPosition} from '../utils/useToolbar';
|
|
4
4
|
import {isMobileUA, isWebInternal, useIsDesktop} from '../utils/common';
|
|
5
|
-
import hexadecimalTransparency from '../utils/hexadecimalTransparency';
|
|
6
|
-
import {ToolbarCustomItem} from './ToolbarPreset';
|
|
7
5
|
import ActionSheet from '../pages/video-call/ActionSheet';
|
|
8
6
|
|
|
9
|
-
// export interface ToolbarProps {
|
|
10
|
-
// children: React.ReactNode;
|
|
11
|
-
// bottomSheetOnMobile?: boolean;
|
|
12
|
-
// customItems?: ToolbarCustomItem[];
|
|
13
|
-
// }
|
|
14
|
-
|
|
15
7
|
export interface ToolbarPropsBase {
|
|
16
8
|
children: React.ReactNode;
|
|
17
9
|
}
|
|
@@ -7,9 +7,22 @@ import {isMobileUA} from '../utils/common';
|
|
|
7
7
|
import NavbarMobile from '../components/NavbarMobile';
|
|
8
8
|
import ActionSheet from '../pages/video-call/ActionSheet';
|
|
9
9
|
|
|
10
|
-
export type
|
|
11
|
-
|
|
10
|
+
export type MoreButtonDefaultKeys =
|
|
11
|
+
| 'virtual-background'
|
|
12
|
+
| 'noise-cancellation'
|
|
13
|
+
| 'caption'
|
|
14
|
+
| 'transcript'
|
|
15
|
+
| 'view-recordings'
|
|
16
|
+
| 'whiteboard'
|
|
17
|
+
| 'chat'
|
|
18
|
+
| 'participant'
|
|
19
|
+
| 'settings'
|
|
20
|
+
| 'layout'
|
|
21
|
+
| 'invite'
|
|
22
|
+
| 'screenshare'
|
|
23
|
+
| 'recording';
|
|
12
24
|
|
|
25
|
+
export type BottomToolbarDefaultKeys =
|
|
13
26
|
//left
|
|
14
27
|
| 'layout'
|
|
15
28
|
| 'invite'
|
|
@@ -21,8 +34,9 @@ export type ToolbarDefaultItemName =
|
|
|
21
34
|
| 'switch-camera'
|
|
22
35
|
| 'end-call'
|
|
23
36
|
| 'raise-hand'
|
|
24
|
-
| 'more'
|
|
37
|
+
| 'more';
|
|
25
38
|
|
|
39
|
+
export type TopToolbarDefaultKeys =
|
|
26
40
|
//topbar
|
|
27
41
|
| 'meeting-title'
|
|
28
42
|
| 'participant-count'
|
|
@@ -31,12 +45,16 @@ export type ToolbarDefaultItemName =
|
|
|
31
45
|
| 'participant'
|
|
32
46
|
| 'settings';
|
|
33
47
|
|
|
34
|
-
export type
|
|
35
|
-
[key in
|
|
48
|
+
export type ToolbarMoreButtonFields = {
|
|
49
|
+
[key in MoreButtonDefaultKeys]?: {
|
|
50
|
+
hide?: ToolbarItemHide;
|
|
51
|
+
order?: number;
|
|
52
|
+
};
|
|
36
53
|
};
|
|
37
54
|
|
|
38
55
|
export type ToolbarItemAlign = 'start' | 'center' | 'end';
|
|
39
|
-
export type
|
|
56
|
+
export type ToolbarHideCallback = (width: number, height: number) => boolean;
|
|
57
|
+
export type ToolbarItemHide = boolean | ToolbarHideCallback;
|
|
40
58
|
|
|
41
59
|
export interface ToolbarDefaultItem {
|
|
42
60
|
component?: () => JSX.Element;
|
|
@@ -44,31 +62,62 @@ export interface ToolbarDefaultItem {
|
|
|
44
62
|
hide?: ToolbarItemHide;
|
|
45
63
|
order?: number;
|
|
46
64
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
component: () => JSX.Element;
|
|
50
|
-
align: ToolbarItemAlign;
|
|
51
|
-
hide: ToolbarItemHide;
|
|
52
|
-
order?: number;
|
|
65
|
+
export interface ToolbarMoreDefaultItem extends ToolbarDefaultItem {
|
|
66
|
+
fields?: ToolbarMoreButtonFields;
|
|
53
67
|
}
|
|
68
|
+
|
|
54
69
|
export type ToolbarPresetAlign = 'top' | 'bottom' | 'right' | 'left';
|
|
55
70
|
|
|
71
|
+
export interface ToolbarMoreMenuCustomItem {
|
|
72
|
+
componentName: string;
|
|
73
|
+
title: string;
|
|
74
|
+
onPress: () => void;
|
|
75
|
+
iconBase64?: string;
|
|
76
|
+
hide?: ToolbarItemHide;
|
|
77
|
+
order?: number;
|
|
78
|
+
}
|
|
56
79
|
export interface ToolbarBottomPresetProps {
|
|
57
|
-
align:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
80
|
+
align: 'bottom';
|
|
81
|
+
items?:
|
|
82
|
+
| {
|
|
83
|
+
[key: string]: ToolbarDefaultItem;
|
|
84
|
+
}
|
|
85
|
+
| {
|
|
86
|
+
['more']?: ToolbarMoreDefaultItem;
|
|
87
|
+
}
|
|
88
|
+
| {
|
|
89
|
+
[key in BottomToolbarDefaultKeys]?: ToolbarDefaultItem;
|
|
90
|
+
};
|
|
91
|
+
snapPointsMinMax?: [number, number];
|
|
61
92
|
}
|
|
62
|
-
export interface
|
|
63
|
-
align:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
93
|
+
export interface ToolbarTopPresetProps {
|
|
94
|
+
align: 'top';
|
|
95
|
+
items?:
|
|
96
|
+
| {
|
|
97
|
+
[key in TopToolbarDefaultKeys]?: ToolbarDefaultItem;
|
|
98
|
+
}
|
|
99
|
+
| {
|
|
100
|
+
[key: string]: ToolbarDefaultItem;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export interface ToolbarRightPresetProps {
|
|
104
|
+
align: 'right';
|
|
105
|
+
items?: {
|
|
106
|
+
[key in TopToolbarDefaultKeys]?: ToolbarDefaultItem;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export interface ToolbarLeftPresetProps {
|
|
110
|
+
align: 'left';
|
|
111
|
+
items?: {
|
|
112
|
+
[key in TopToolbarDefaultKeys]?: ToolbarDefaultItem;
|
|
113
|
+
};
|
|
67
114
|
}
|
|
68
115
|
|
|
69
116
|
export type ToolbarPresetProps =
|
|
70
117
|
| ToolbarBottomPresetProps
|
|
71
|
-
|
|
|
118
|
+
| ToolbarTopPresetProps
|
|
119
|
+
| ToolbarLeftPresetProps
|
|
120
|
+
| ToolbarRightPresetProps;
|
|
72
121
|
|
|
73
122
|
const ToolbarPreset = (props: ToolbarPresetProps) => {
|
|
74
123
|
const {align} = props;
|
|
@@ -79,41 +128,24 @@ const ToolbarPreset = (props: ToolbarPresetProps) => {
|
|
|
79
128
|
return null;
|
|
80
129
|
}
|
|
81
130
|
if (align === 'left') {
|
|
82
|
-
return
|
|
83
|
-
<Leftbar customItems={props?.customItems} includeDefaultItems={true} />
|
|
84
|
-
);
|
|
131
|
+
return <Leftbar items={props?.items} includeDefaultItems={true} />;
|
|
85
132
|
} else if (align === 'right') {
|
|
86
|
-
return
|
|
87
|
-
<Rightbar customItems={props?.customItems} includeDefaultItems={true} />
|
|
88
|
-
);
|
|
133
|
+
return <Rightbar items={props?.items} includeDefaultItems={true} />;
|
|
89
134
|
} else if (align === 'top') {
|
|
90
135
|
return isMobileUA() ? (
|
|
91
|
-
<NavbarMobile
|
|
92
|
-
customItems={props?.customItems}
|
|
93
|
-
includeDefaultItems={true}
|
|
94
|
-
defaultItemsConfig={props?.defaultItemsConfig}
|
|
95
|
-
/>
|
|
136
|
+
<NavbarMobile items={props?.items} includeDefaultItems={true} />
|
|
96
137
|
) : (
|
|
97
|
-
<Navbar
|
|
98
|
-
customItems={props?.customItems}
|
|
99
|
-
includeDefaultItems={true}
|
|
100
|
-
defaultItemsConfig={props?.defaultItemsConfig}
|
|
101
|
-
/>
|
|
138
|
+
<Navbar items={props?.items} includeDefaultItems={true} />
|
|
102
139
|
);
|
|
103
140
|
} else if (align === 'bottom') {
|
|
104
141
|
return isMobileUA() ? (
|
|
105
142
|
<ActionSheet
|
|
106
|
-
|
|
143
|
+
items={props?.items}
|
|
107
144
|
includeDefaultItems={true}
|
|
108
145
|
snapPointsMinMax={props?.snapPointsMinMax}
|
|
109
|
-
defaultItemsConfig={props?.defaultItemsConfig}
|
|
110
146
|
/>
|
|
111
147
|
) : (
|
|
112
|
-
<Controls
|
|
113
|
-
customItems={props?.customItems}
|
|
114
|
-
includeDefaultItems={true}
|
|
115
|
-
defaultItemsConfig={props?.defaultItemsConfig}
|
|
116
|
-
/>
|
|
148
|
+
<Controls items={props?.items} includeDefaultItems={true} />
|
|
117
149
|
);
|
|
118
150
|
} else {
|
|
119
151
|
return null;
|