agora-appbuilder-core 3.0.9 → 3.0.10

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 (248) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +5871 -4728
  4. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +4 -0
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +18 -0
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +2 -0
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +11 -0
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +1 -0
  12. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +1 -0
  13. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +24 -0
  14. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +1 -0
  15. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +1 -0
  16. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -0
  17. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +2 -0
  18. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -0
  19. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -0
  20. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  22. package/template/agora-rn-uikit/src/Reducer/index.ts +3 -0
  23. package/template/agora-rn-uikit/src/Rtc/Create.tsx +89 -1
  24. package/template/agora-rn-uikit/src/RtcConfigure.tsx +39 -2
  25. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +15 -5
  26. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +15 -9
  27. package/template/agora-rn-uikit/src/index.ts +3 -1
  28. package/template/android/app/build.gradle +1 -0
  29. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  30. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  31. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  32. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  33. package/template/android/app/src/main/res/values/colors.xml +7 -0
  34. package/template/android/build.gradle +3 -3
  35. package/template/babel.config.js +1 -0
  36. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  37. package/template/customization-api/sub-components.ts +1 -1
  38. package/template/customization-api/typeDefinition.ts +2 -1
  39. package/template/electron/index.html +27 -27
  40. package/template/electron/renderer/index.js +1 -0
  41. package/template/global.d.ts +25 -4
  42. package/template/index.rsdk.tsx +1 -0
  43. package/template/index.web.js +2 -1
  44. package/template/index.wsdk.tsx +1 -1
  45. package/template/ios/HelloWorld/Info.plist +14 -1
  46. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  47. package/template/metro.config.js +1 -1
  48. package/template/package.json +18 -7
  49. package/template/react-native-toast-message/index.d.ts +43 -43
  50. package/template/react-native-toast-message/src/colors/index.js +3 -2
  51. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  52. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  53. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  54. package/template/react-native-toast-message/src/components/error.js +3 -2
  55. package/template/react-native-toast-message/src/components/info.js +3 -2
  56. package/template/react-native-toast-message/src/components/success.js +3 -2
  57. package/template/react-native-toast-message/src/index.js +122 -31
  58. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  59. package/template/react-native-toast-message/src/styles.js +3 -4
  60. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  61. package/template/react-native.config.js +7 -0
  62. package/template/src/App.tsx +6 -0
  63. package/template/src/AppWrapper.tsx +63 -28
  64. package/template/src/assets/font-styles.css +329 -0
  65. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  66. package/template/src/assets/fonts/icomoon.ttf +0 -0
  67. package/template/src/assets/permission.png +0 -0
  68. package/template/src/assets/selection.json +1 -0
  69. package/template/src/atoms/ActionMenu.tsx +236 -0
  70. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  71. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  72. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  73. package/template/src/atoms/AnimatedRings.tsx +70 -0
  74. package/template/src/atoms/Card.tsx +61 -0
  75. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  76. package/template/src/atoms/CircularProgress.tsx +102 -0
  77. package/template/src/atoms/CustomIcon.tsx +88 -0
  78. package/template/src/atoms/CustomSwitch.tsx +287 -0
  79. package/template/src/atoms/Dropdown.tsx +306 -0
  80. package/template/src/atoms/HorizontalRule.tsx +3 -1
  81. package/template/src/atoms/IconButton.tsx +162 -0
  82. package/template/src/atoms/ImageIcon.tsx +98 -0
  83. package/template/src/atoms/InfoBubble.tsx +291 -0
  84. package/template/src/atoms/Input.tsx +87 -0
  85. package/template/src/atoms/InviteInfo.tsx +166 -0
  86. package/template/src/atoms/LinkButton.tsx +28 -0
  87. package/template/src/atoms/OutlineButton.tsx +61 -0
  88. package/template/src/atoms/ParticipantsCount.tsx +73 -0
  89. package/template/src/atoms/Popup.tsx +147 -0
  90. package/template/src/atoms/PrimaryButton.tsx +51 -26
  91. package/template/src/atoms/RecordingInfo.tsx +49 -0
  92. package/template/src/atoms/SecondaryButton.tsx +8 -5
  93. package/template/src/atoms/Spacer.tsx +22 -0
  94. package/template/src/atoms/TertiaryButton.tsx +78 -0
  95. package/template/src/atoms/TextInput.tsx +12 -14
  96. package/template/src/atoms/Toggle.tsx +47 -0
  97. package/template/src/atoms/Tooltip.native.tsx +65 -0
  98. package/template/src/atoms/Tooltip.tsx +94 -0
  99. package/template/src/atoms/UserAvatar.tsx +60 -0
  100. package/template/src/components/Chat.tsx +86 -214
  101. package/template/src/components/ChatContext.ts +8 -1
  102. package/template/src/components/ColorConfigure.tsx +1 -1
  103. package/template/src/components/ColorContext.ts +1 -1
  104. package/template/src/components/CommonStyles.ts +44 -0
  105. package/template/src/components/Controls.tsx +342 -42
  106. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +6 -4
  107. package/template/src/components/DeviceConfigure.tsx +461 -101
  108. package/template/src/components/DeviceContext.tsx +8 -4
  109. package/template/src/components/EventsConfigure.tsx +144 -7
  110. package/template/src/components/GraphQLProvider.tsx +1 -1
  111. package/template/src/components/GridVideo.tsx +59 -44
  112. package/template/src/components/HostControlView.tsx +114 -35
  113. package/template/src/components/Navbar.tsx +216 -398
  114. package/template/src/components/NetworkQualityContext.tsx +20 -20
  115. package/template/src/components/ParticipantsView.tsx +177 -154
  116. package/template/src/components/PinnedVideo.tsx +207 -120
  117. package/template/src/components/Precall.native.tsx +358 -119
  118. package/template/src/components/Precall.tsx +269 -135
  119. package/template/src/components/RTMConfigure.tsx +27 -4
  120. package/template/src/components/Router.electron.ts +1 -0
  121. package/template/src/components/Router.native.ts +1 -0
  122. package/template/src/components/Router.sdk.ts +1 -0
  123. package/template/src/components/Router.ts +1 -0
  124. package/template/src/components/Settings.tsx +26 -95
  125. package/template/src/components/SettingsView.tsx +251 -56
  126. package/template/src/components/Share.tsx +302 -273
  127. package/template/src/components/StorageContext.tsx +30 -3
  128. package/template/src/components/ToastComponent.tsx +8 -0
  129. package/template/src/components/chat-messages/useChatMessages.tsx +69 -23
  130. package/template/src/components/chat-ui/useChatUIControl.tsx +7 -0
  131. package/template/src/components/common/Error.tsx +20 -6
  132. package/template/src/components/common/Logo.tsx +16 -15
  133. package/template/src/components/contexts/LiveStreamDataContext.tsx +10 -5
  134. package/template/src/components/contexts/VideoMeetingDataContext.tsx +37 -7
  135. package/template/src/components/livestream/LiveStreamContext.tsx +270 -36
  136. package/template/src/components/livestream/Types.ts +39 -14
  137. package/template/src/components/livestream/index.ts +1 -0
  138. package/template/src/components/livestream/views/LiveStreamControls.tsx +12 -4
  139. package/template/src/components/participants/AllAudienceParticipants.tsx +101 -30
  140. package/template/src/components/participants/AllHostParticipants.tsx +103 -34
  141. package/template/src/components/participants/Participant.tsx +302 -0
  142. package/template/src/components/participants/ParticipantName.tsx +13 -7
  143. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  144. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  145. package/template/src/components/participants/UserActionMenuOptions.tsx +398 -0
  146. package/template/src/components/popups/InvitePopup.tsx +115 -0
  147. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  148. package/template/src/components/precall/LocalMute.tsx +84 -14
  149. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  150. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  151. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  152. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  153. package/template/src/components/precall/VideoPreview.native.tsx +48 -3
  154. package/template/src/components/precall/VideoPreview.tsx +163 -7
  155. package/template/src/components/precall/joinCallBtn.tsx +15 -2
  156. package/template/src/components/precall/meetingTitle.tsx +15 -12
  157. package/template/src/components/precall/selectDevice.tsx +1 -21
  158. package/template/src/components/precall/textInput.tsx +32 -4
  159. package/template/src/components/precall/usePreCall.tsx +16 -0
  160. package/template/src/components/styles.ts +42 -21
  161. package/template/src/components/useShareLink.tsx +12 -14
  162. package/template/src/components/useToast.tsx +41 -0
  163. package/template/src/components/useVideoCall.tsx +65 -0
  164. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  165. package/template/src/pages/Authenticate.tsx +5 -15
  166. package/template/src/pages/Create.tsx +293 -165
  167. package/template/src/pages/Endcall.tsx +148 -0
  168. package/template/src/pages/Join.tsx +93 -67
  169. package/template/src/pages/VideoCall.tsx +89 -64
  170. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  171. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  172. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  173. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  174. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  175. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  176. package/template/src/pages/video-call/NameWithMicIcon.tsx +120 -44
  177. package/template/src/pages/video-call/RenderComponent.tsx +3 -2
  178. package/template/src/pages/video-call/SidePanelHeader.tsx +190 -0
  179. package/template/src/pages/video-call/VideoCallMobileView.tsx +139 -0
  180. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  181. package/template/src/pages/video-call/VideoCallScreen.tsx +45 -9
  182. package/template/src/pages/video-call/VideoComponent.tsx +18 -3
  183. package/template/src/pages/video-call/VideoRenderer.tsx +218 -60
  184. package/template/src/rtm-events/constants.ts +2 -0
  185. package/template/src/subComponents/ChatBubble.tsx +123 -83
  186. package/template/src/subComponents/ChatContainer.tsx +257 -84
  187. package/template/src/subComponents/ChatInput.ios.tsx +237 -0
  188. package/template/src/subComponents/ChatInput.tsx +61 -46
  189. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  190. package/template/src/subComponents/Checkbox.tsx +2 -2
  191. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  192. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  193. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  194. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  195. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  196. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  197. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  198. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  199. package/template/src/subComponents/LocalEndCall.tsx +71 -33
  200. package/template/src/subComponents/LocalSwitchCamera.tsx +17 -30
  201. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  202. package/template/src/subComponents/Logo.tsx +3 -4
  203. package/template/src/subComponents/LogoutButton.tsx +1 -1
  204. package/template/src/subComponents/NetworkQualityPill.tsx +60 -63
  205. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  206. package/template/src/subComponents/Recording.tsx +28 -29
  207. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  208. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  209. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  210. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  211. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  212. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  213. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  214. package/template/src/subComponents/SelectDevice.tsx +404 -61
  215. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  216. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  217. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  218. package/template/src/subComponents/ToastConfig.tsx +150 -10
  219. package/template/src/subComponents/chat/ChatParticipants.tsx +187 -78
  220. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +95 -32
  221. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  222. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  223. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  224. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  225. package/template/src/subComponents/recording/useRecording.tsx +79 -27
  226. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  227. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +11 -2
  228. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +26 -4
  229. package/template/src/theme/index.ts +46 -0
  230. package/template/src/utils/PlatformWrapper.tsx +21 -0
  231. package/template/src/utils/common.tsx +155 -1
  232. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  233. package/template/src/utils/index.tsx +19 -0
  234. package/template/src/utils/isMobileOrTablet.ts +7 -2
  235. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  236. package/template/src/utils/useButtonTemplate.tsx +1 -0
  237. package/template/src/utils/useFocus.tsx +46 -0
  238. package/template/src/utils/useIsActiveSpeaker.ts +27 -0
  239. package/template/src/utils/useIsHandRaised.ts +13 -0
  240. package/template/src/utils/useMuteToggleLocal.ts +54 -3
  241. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  242. package/template/src/utils/useRemoteRequest.ts +84 -0
  243. package/template/web/index.html +5 -0
  244. package/template/webpack.commons.js +13 -8
  245. package/template/webpack.web.config.js +1 -0
  246. package/template/src/assets/icons.ts +0 -102
  247. package/template/src/components/participants/MeParticipant.tsx +0 -38
  248. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
@@ -9,120 +9,241 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useState} from 'react';
12
+ import React, {useEffect, useState} from 'react';
13
13
  import {
14
14
  ScrollView,
15
15
  View,
16
- Dimensions,
17
16
  StyleSheet,
18
- Text,
19
17
  Pressable,
18
+ FlatList,
19
+ useWindowDimensions,
20
20
  } from 'react-native';
21
21
  import {layoutProps} from '../../theme.json';
22
- import {layoutComponent, useRtc} from 'customization-api';
22
+ import {
23
+ layoutComponent,
24
+ useLocalUid,
25
+ useRender,
26
+ useRtc,
27
+ } from 'customization-api';
23
28
  import RenderComponent from '../pages/video-call/RenderComponent';
29
+ import IconButton from '../atoms/IconButton';
30
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
31
+ import {BREAKPOINTS, isMobileUA, useIsDesktop} from '../utils/common';
24
32
  const {topPinned} = layoutProps;
25
33
 
26
34
  const PinnedVideo: layoutComponent = ({renderData}) => {
35
+ const {pinnedUid, activeUids, renderList, activeSpeaker} = useRender();
27
36
  const [collapse, setCollapse] = useState(false);
28
- const [dim, setDim] = useState<[number, number, boolean]>([
29
- Dimensions.get('window').width,
30
- Dimensions.get('window').height,
31
- Dimensions.get('window').width > Dimensions.get('window').height,
32
- ]);
33
- let onLayout = () => {
34
- setTimeout(() => {
35
- let {height, width} = Dimensions.get('window');
36
- let isLandscape = width > height;
37
- setDim([width, height, isLandscape]);
38
- }, 20);
39
- };
40
- const isSidePinnedlayout = topPinned === true ? false : dim[2]; // if either explicity set to false or auto evaluation
41
- const [maxUid, ...minUids] = renderData;
37
+ const localUid = useLocalUid();
38
+ const {width, height} = useWindowDimensions();
39
+ const isDesktop = width > BREAKPOINTS.xl;
40
+ const isSidePinnedlayout = topPinned === true ? false : isDesktop; // if either explicity set to false or auto evaluation
41
+ //const [maxUid, ...minUids] = renderData;
42
42
  const {dispatch} = useRtc();
43
+ const [uids, setUids] = useState(renderData);
44
+
45
+ const [screenShareOn, setScreenShareOn] = useState(false);
46
+
47
+ useEffect(() => {
48
+ const nonPinnedUids = activeUids.filter((uid) => uid !== pinnedUid);
49
+
50
+ const nonActiveSpeakerUids = nonPinnedUids.filter(
51
+ (uid) => uid !== activeSpeaker,
52
+ );
53
+
54
+ const remoteScreenShareUids = nonActiveSpeakerUids.filter((uid) => {
55
+ return (
56
+ renderList[uid].type === 'screenshare' &&
57
+ renderList[uid].parentUid !== localUid
58
+ );
59
+ });
60
+
61
+ const localScreenShareUids = nonActiveSpeakerUids.filter((uid) => {
62
+ return (
63
+ renderList[uid].type === 'screenshare' &&
64
+ renderList[uid].parentUid === localUid
65
+ );
66
+ });
67
+ if (remoteScreenShareUids?.length || localScreenShareUids?.length) {
68
+ setScreenShareOn(true);
69
+ }
70
+
71
+ const restOfTheUids = nonActiveSpeakerUids.filter(
72
+ (uid) => renderList[uid].type !== 'screenshare',
73
+ );
74
+
75
+ /**
76
+ * Order for pinned layout -
77
+ * - [1] means only one user
78
+ * - [N] means multiple users
79
+ * 1.Pinned User[1]
80
+ * 2.Remote screenshare users[N]
81
+ * 3.Active Speaker[1]
82
+ * 4.Local Screenshare[1]
83
+ * 5 and etc.Other Users[N]
84
+ */
85
+
86
+ const updatedOrder = [
87
+ pinnedUid,
88
+ ...remoteScreenShareUids,
89
+ pinnedUid !== activeSpeaker ? activeSpeaker : 0,
90
+ ...localScreenShareUids,
91
+ ...restOfTheUids,
92
+ ].filter((uid) => uid !== undefined && uid !== 0);
93
+
94
+ setUids(updatedOrder);
95
+ }, [activeUids, renderList, activeSpeaker, pinnedUid]);
43
96
 
44
97
  return (
45
98
  <View
46
99
  style={{
47
100
  flexDirection: isSidePinnedlayout ? 'row' : 'column',
48
101
  flex: 1,
49
- padding: 4,
50
- }}
51
- onLayout={onLayout}>
52
- {isSidePinnedlayout && (
53
- <Pressable
54
- onPress={() => setCollapse(!collapse)}
55
- style={{
56
- position: 'absolute',
57
- zIndex: 50,
58
- marginTop: 5,
59
- width: 35,
60
- height: 35,
61
- marginLeft: collapse ? 5 : '20.1%',
62
- backgroundColor: $config.SECONDARY_FONT_COLOR + 'aa',
63
- borderRadius: 50,
64
- justifyContent: 'center',
65
- }}>
66
- <Text
67
- style={{
68
- alignSelf: 'center',
69
- justifyContent: 'center',
70
- color: $config.PRIMARY_COLOR,
71
- fontWeight: '500',
72
- fontSize: 20,
73
- }}>
74
- {collapse ? '>' : '<'}
75
- </Text>
76
- </Pressable>
77
- )}
102
+ }}>
78
103
  {!collapse && (
79
104
  <ScrollView
80
105
  horizontal={!isSidePinnedlayout}
106
+ showsHorizontalScrollIndicator={isMobileUA() ? false : true}
81
107
  decelerationRate={0}
82
108
  style={
83
109
  isSidePinnedlayout
84
- ? {width: '20%', paddingHorizontal: 8}
85
- : {flex: 1}
110
+ ? {
111
+ width: '20%',
112
+ paddingRight: 8,
113
+ }
114
+ : {
115
+ flex: 1,
116
+ minHeight: 160,
117
+ marginBottom: 8,
118
+ }
86
119
  }>
87
- {minUids.map((minUid, i) => (
88
- <Pressable
89
- style={
90
- isSidePinnedlayout
91
- ? {
92
- width: '100%',
93
- height: dim[0] * 0.1125 + 2, // width * 20/100 * 9/16 + 2
94
- zIndex: 40,
95
- paddingBottom: 8,
96
- }
97
- : {
98
- width: ((dim[1] / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
99
- height: '100%',
100
- zIndex: 40,
101
- paddingRight: 8,
102
- paddingVertical: 4,
103
- }
104
- }
105
- key={'minVideo' + i}
106
- onPress={() => {
107
- dispatch({type: 'SwapVideo', value: [minUid]});
108
- }}>
109
- <RenderComponent uid={minUid} />
110
- </Pressable>
111
- ))}
120
+ {/* Pinned Video Top View(Desktop minimized and Mobile native and Mobile web) / Side View(Desktop maximized)*/}
121
+ {uids?.map((minUid, i) => {
122
+ //first item -> maximized view so returning null
123
+ if (i === 0) return null;
124
+ //remaining items -> minimized view
125
+ {
126
+ /**Rendering minimized views */
127
+ }
128
+ return (
129
+ <Pressable
130
+ //old
131
+ //if user pinned somebody then side panel items should not be clickable - swap video should be called
132
+ //instead we will show replace pin button on hovering the video tile
133
+ //old
134
+ disabled={
135
+ //old fix
136
+ //activeSpeaker || pinnedUid || screenShareOn ? true : false
137
+ //old fix
138
+
139
+ //latest fix : pinned video sidepanel layout should not be clickable
140
+ //if user hover on it we will show pin for me/replace pin(if someone already pinned) button
141
+ true
142
+ }
143
+ style={
144
+ isSidePinnedlayout
145
+ ? {
146
+ width: '100%',
147
+ height: width * 0.1125 + 2, // width * 20/100 * 9/16 + 2
148
+ zIndex: 40,
149
+ paddingBottom: 8,
150
+ }
151
+ : {
152
+ // width: ((height / 3) * 16) / 9 / 2 + 12, //dim[1] /4.3
153
+ width: 254,
154
+ height: '100%',
155
+ zIndex: 40,
156
+ marginRight: 8,
157
+ }
158
+ }
159
+ key={'minVideo' + i}
160
+ onPress={() => {
161
+ dispatch({type: 'SwapVideo', value: [minUid]});
162
+ }}>
163
+ <RenderComponent uid={minUid} />
164
+ </Pressable>
165
+ );
166
+ })}
112
167
  </ScrollView>
113
168
  )}
114
- <View
115
- style={
116
- isSidePinnedlayout
117
- ? collapse
118
- ? style.width100
119
- : style.width80
120
- : style.flex4
121
- }>
122
- <View style={style.flex1} key={'maxVideo' + maxUid}>
123
- <RenderComponent uid={maxUid} />
169
+ {uids && uids?.length && (
170
+ <View
171
+ style={
172
+ isSidePinnedlayout
173
+ ? collapse
174
+ ? style.width100
175
+ : style.width80
176
+ : style.flex8
177
+ }>
178
+ <View style={style.flex1} key={'maxVideo' + uids[0]}>
179
+ {isSidePinnedlayout && (
180
+ <IconButton
181
+ containerStyle={{
182
+ position: 'absolute',
183
+ top: 8,
184
+ left: 8,
185
+ zIndex: 999,
186
+ elevation: 999,
187
+ }}
188
+ onPress={() => setCollapse(!collapse)}
189
+ iconProps={{
190
+ iconContainerStyle: {
191
+ padding: 8,
192
+ backgroundColor:
193
+ $config.CARD_LAYER_5_COLOR +
194
+ hexadecimalTransparency['10%'],
195
+ },
196
+ name: collapse ? 'collapse' : 'expand',
197
+ tintColor: $config.SECONDARY_ACTION_COLOR,
198
+ iconSize: 24,
199
+ }}
200
+ />
201
+ )}
202
+ {pinnedUid ? (
203
+ <IconButton
204
+ containerStyle={{
205
+ paddingHorizontal: 8,
206
+ paddingVertical: 10,
207
+ backgroundColor: $config.VIDEO_AUDIO_TILE_OVERLAY_COLOR,
208
+ borderRadius: 8,
209
+ flexDirection: 'row',
210
+ position: 'absolute',
211
+ top: 8,
212
+ left: 8 + (isSidePinnedlayout ? 32 + 12 + 8 : 0),
213
+ zIndex: 999,
214
+ elevation: 999,
215
+ }}
216
+ iconProps={{
217
+ iconType: 'plain',
218
+ iconContainerStyle: {
219
+ padding: 0,
220
+ },
221
+ name: 'unpin-filled',
222
+ iconSize: 20,
223
+ tintColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
224
+ }}
225
+ onPress={() => {
226
+ dispatch({type: 'UserPin', value: [0]});
227
+ }}
228
+ btnTextProps={{
229
+ text: 'Unpin',
230
+ textColor: $config.VIDEO_AUDIO_TILE_TEXT_COLOR,
231
+ textStyle: {
232
+ marginTop: 0,
233
+ marginLeft: 6,
234
+ marginRight: 2,
235
+ fontWeight: '700',
236
+ },
237
+ }}
238
+ />
239
+ ) : (
240
+ <></>
241
+ )}
242
+ {/** Render the maximized view */}
243
+ <RenderComponent uid={uids[0]} isMax={true} />
244
+ </View>
124
245
  </View>
125
- </View>
246
+ )}
126
247
  </View>
127
248
  );
128
249
  };
@@ -131,42 +252,8 @@ const style = StyleSheet.create({
131
252
  width80: {width: '80%'},
132
253
  width100: {width: '100%'},
133
254
  flex2: {flex: 2},
134
- flex4: {flex: 4, backgroundColor: '#ffffff00'},
255
+ flex8: {flex: 8},
135
256
  flex1: {flex: 1},
136
- nameHolder: {
137
- marginTop: -25,
138
- backgroundColor: $config.SECONDARY_FONT_COLOR + 'aa',
139
- alignSelf: 'flex-end',
140
- paddingHorizontal: 8,
141
- height: 25,
142
- borderTopLeftRadius: 15,
143
- borderBottomRightRadius: 15,
144
- flexDirection: 'row',
145
- zIndex: 5,
146
- maxWidth: '100%',
147
- },
148
- name: {
149
- color: $config.PRIMARY_FONT_COLOR,
150
- lineHeight: 25,
151
- fontWeight: '700',
152
- flexShrink: 1,
153
- },
154
- MicBackdrop: {
155
- width: 20,
156
- height: 20,
157
- borderRadius: 15,
158
- marginHorizontal: 10,
159
- backgroundColor: $config.SECONDARY_FONT_COLOR,
160
- display: 'flex',
161
- alignSelf: 'center',
162
- justifyContent: 'center',
163
- },
164
- MicIcon: {
165
- width: '80%',
166
- height: '80%',
167
- alignSelf: 'center',
168
- resizeMode: 'contain',
169
- },
170
257
  });
171
258
 
172
259
  export default PinnedVideo;