@stream-io/video-react-native-sdk 0.0.1-alpha.141
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/CHANGELOG.md +739 -0
- package/LICENSE +219 -0
- package/README.md +19 -0
- package/dist/__tests__/components/ActiveCall.test.d.ts +1 -0
- package/dist/__tests__/components/ActiveCall.test.js +89 -0
- package/dist/__tests__/components/ActiveCall.test.js.map +1 -0
- package/dist/__tests__/components/Avatar.test.d.ts +1 -0
- package/dist/__tests__/components/Avatar.test.js +34 -0
- package/dist/__tests__/components/Avatar.test.js.map +1 -0
- package/dist/__tests__/components/ParticipantView.test.d.ts +1 -0
- package/dist/__tests__/components/ParticipantView.test.js +66 -0
- package/dist/__tests__/components/ParticipantView.test.js.map +1 -0
- package/dist/__tests__/mocks/call.d.ts +2 -0
- package/dist/__tests__/mocks/call.js +21 -0
- package/dist/__tests__/mocks/call.js.map +1 -0
- package/dist/__tests__/mocks/client.d.ts +2 -0
- package/dist/__tests__/mocks/client.js +31 -0
- package/dist/__tests__/mocks/client.js.map +1 -0
- package/dist/__tests__/mocks/participant.d.ts +3 -0
- package/dist/__tests__/mocks/participant.js +25 -0
- package/dist/__tests__/mocks/participant.js.map +1 -0
- package/dist/__tests__/utils/RNTLTools.d.ts +15 -0
- package/dist/__tests__/utils/RNTLTools.js +54 -0
- package/dist/__tests__/utils/RNTLTools.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/jest-setup.d.ts +1 -0
- package/dist/jest-setup.js +34 -0
- package/dist/jest-setup.js.map +1 -0
- package/dist/src/components/ActiveCall.d.ts +18 -0
- package/dist/src/components/ActiveCall.js +117 -0
- package/dist/src/components/ActiveCall.js.map +1 -0
- package/dist/src/components/Avatar.d.ts +25 -0
- package/dist/src/components/Avatar.js +55 -0
- package/dist/src/components/Avatar.js.map +1 -0
- package/dist/src/components/CallControlsButton.d.ts +22 -0
- package/dist/src/components/CallControlsButton.js +43 -0
- package/dist/src/components/CallControlsButton.js.map +1 -0
- package/dist/src/components/CallControlsView.d.ts +9 -0
- package/dist/src/components/CallControlsView.js +95 -0
- package/dist/src/components/CallControlsView.js.map +1 -0
- package/dist/src/components/CallParticipantsBadge.d.ts +1 -0
- package/dist/src/components/CallParticipantsBadge.js +48 -0
- package/dist/src/components/CallParticipantsBadge.js.map +1 -0
- package/dist/src/components/CallParticipantsInfoView.d.ts +21 -0
- package/dist/src/components/CallParticipantsInfoView.js +213 -0
- package/dist/src/components/CallParticipantsInfoView.js.map +1 -0
- package/dist/src/components/CallParticipantsList.d.ts +25 -0
- package/dist/src/components/CallParticipantsList.js +124 -0
- package/dist/src/components/CallParticipantsList.js.map +1 -0
- package/dist/src/components/CallParticipantsOptions.d.ts +8 -0
- package/dist/src/components/CallParticipantsOptions.js +189 -0
- package/dist/src/components/CallParticipantsOptions.js.map +1 -0
- package/dist/src/components/CallParticipantsSpotlightView.d.ts +1 -0
- package/dist/src/components/CallParticipantsSpotlightView.js +40 -0
- package/dist/src/components/CallParticipantsSpotlightView.js.map +1 -0
- package/dist/src/components/CallParticipantsView.d.ts +1 -0
- package/dist/src/components/CallParticipantsView.js +31 -0
- package/dist/src/components/CallParticipantsView.js.map +1 -0
- package/dist/src/components/IncomingCallView.d.ts +1 -0
- package/dist/src/components/IncomingCallView.js +98 -0
- package/dist/src/components/IncomingCallView.js.map +1 -0
- package/dist/src/components/LobbyView.d.ts +1 -0
- package/dist/src/components/LobbyView.js +215 -0
- package/dist/src/components/LobbyView.js.map +1 -0
- package/dist/src/components/LocalVideoView.d.ts +34 -0
- package/dist/src/components/LocalVideoView.js +100 -0
- package/dist/src/components/LocalVideoView.js.map +1 -0
- package/dist/src/components/NetworkQualityIndicator.d.ts +8 -0
- package/dist/src/components/NetworkQualityIndicator.js +36 -0
- package/dist/src/components/NetworkQualityIndicator.js.map +1 -0
- package/dist/src/components/OutgoingCallView.d.ts +1 -0
- package/dist/src/components/OutgoingCallView.js +103 -0
- package/dist/src/components/OutgoingCallView.js.map +1 -0
- package/dist/src/components/ParticipantReaction.d.ts +7 -0
- package/dist/src/components/ParticipantReaction.js +45 -0
- package/dist/src/components/ParticipantReaction.js.map +1 -0
- package/dist/src/components/ParticipantView.d.ts +42 -0
- package/dist/src/components/ParticipantView.js +256 -0
- package/dist/src/components/ParticipantView.js.map +1 -0
- package/dist/src/components/ReactionsModal.d.ts +7 -0
- package/dist/src/components/ReactionsModal.js +65 -0
- package/dist/src/components/ReactionsModal.js.map +1 -0
- package/dist/src/components/ToggleAudioButton.d.ts +1 -0
- package/dist/src/components/ToggleAudioButton.js +78 -0
- package/dist/src/components/ToggleAudioButton.js.map +1 -0
- package/dist/src/components/ToggleVideoButton.d.ts +1 -0
- package/dist/src/components/ToggleVideoButton.js +78 -0
- package/dist/src/components/ToggleVideoButton.js.map +1 -0
- package/dist/src/components/UserInfoView.d.ts +13 -0
- package/dist/src/components/UserInfoView.js +82 -0
- package/dist/src/components/UserInfoView.js.map +1 -0
- package/dist/src/components/VideoRenderer.d.ts +65 -0
- package/dist/src/components/VideoRenderer.js +18 -0
- package/dist/src/components/VideoRenderer.js.map +1 -0
- package/dist/src/components/index.d.ts +12 -0
- package/dist/src/components/index.js +29 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/constants/A11yLabels.d.ts +20 -0
- package/dist/src/constants/A11yLabels.js +29 -0
- package/dist/src/constants/A11yLabels.js.map +1 -0
- package/dist/src/constants/index.d.ts +11 -0
- package/dist/src/constants/index.js +30 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/contexts/StreamVideoContext/createStoreContext.d.ts +14 -0
- package/dist/src/contexts/StreamVideoContext/createStoreContext.js +100 -0
- package/dist/src/contexts/StreamVideoContext/createStoreContext.js.map +1 -0
- package/dist/src/contexts/StreamVideoContext/index.d.ts +30 -0
- package/dist/src/contexts/StreamVideoContext/index.js +18 -0
- package/dist/src/contexts/StreamVideoContext/index.js.map +1 -0
- package/dist/src/contexts/index.d.ts +1 -0
- package/dist/src/contexts/index.js +18 -0
- package/dist/src/contexts/index.js.map +1 -0
- package/dist/src/hooks/index.d.ts +10 -0
- package/dist/src/hooks/index.js +27 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/useCallControls.d.ts +14 -0
- package/dist/src/hooks/useCallControls.js +148 -0
- package/dist/src/hooks/useCallControls.js.map +1 -0
- package/dist/src/hooks/useCallCycleEffect.d.ts +8 -0
- package/dist/src/hooks/useCallCycleEffect.js +62 -0
- package/dist/src/hooks/useCallCycleEffect.js.map +1 -0
- package/dist/src/hooks/useCallKeep.d.ts +11 -0
- package/dist/src/hooks/useCallKeep.js +41 -0
- package/dist/src/hooks/useCallKeep.js.map +1 -0
- package/dist/src/hooks/useCreateStreamVideoClient.d.ts +33 -0
- package/dist/src/hooks/useCreateStreamVideoClient.js +40 -0
- package/dist/src/hooks/useCreateStreamVideoClient.js.map +1 -0
- package/dist/src/hooks/useIncallManager.d.ts +13 -0
- package/dist/src/hooks/useIncallManager.js +24 -0
- package/dist/src/hooks/useIncallManager.js.map +1 -0
- package/dist/src/hooks/useLocalVideoStream.d.ts +7 -0
- package/dist/src/hooks/useLocalVideoStream.js +34 -0
- package/dist/src/hooks/useLocalVideoStream.js.map +1 -0
- package/dist/src/hooks/useMutingState.d.ts +12 -0
- package/dist/src/hooks/useMutingState.js +25 -0
- package/dist/src/hooks/useMutingState.js.map +1 -0
- package/dist/src/hooks/usePermissionNotification.d.ts +18 -0
- package/dist/src/hooks/usePermissionNotification.js +33 -0
- package/dist/src/hooks/usePermissionNotification.js.map +1 -0
- package/dist/src/hooks/usePermissionRequest.d.ts +1 -0
- package/dist/src/hooks/usePermissionRequest.js +62 -0
- package/dist/src/hooks/usePermissionRequest.js.map +1 -0
- package/dist/src/hooks/usePublishMediaStreams.d.ts +6 -0
- package/dist/src/hooks/usePublishMediaStreams.js +49 -0
- package/dist/src/hooks/usePublishMediaStreams.js.map +1 -0
- package/dist/src/icons/ArrowRight.d.ts +5 -0
- package/dist/src/icons/ArrowRight.js +9 -0
- package/dist/src/icons/ArrowRight.js.map +1 -0
- package/dist/src/icons/CameraSwitch.d.ts +5 -0
- package/dist/src/icons/CameraSwitch.js +9 -0
- package/dist/src/icons/CameraSwitch.js.map +1 -0
- package/dist/src/icons/Chat.d.ts +5 -0
- package/dist/src/icons/Chat.js +9 -0
- package/dist/src/icons/Chat.js.map +1 -0
- package/dist/src/icons/Cross.d.ts +5 -0
- package/dist/src/icons/Cross.js +9 -0
- package/dist/src/icons/Cross.js.map +1 -0
- package/dist/src/icons/Mic.d.ts +5 -0
- package/dist/src/icons/Mic.js +10 -0
- package/dist/src/icons/Mic.js.map +1 -0
- package/dist/src/icons/MicOff.d.ts +5 -0
- package/dist/src/icons/MicOff.js +9 -0
- package/dist/src/icons/MicOff.js.map +1 -0
- package/dist/src/icons/Participants.d.ts +5 -0
- package/dist/src/icons/Participants.js +9 -0
- package/dist/src/icons/Participants.js.map +1 -0
- package/dist/src/icons/Phone.d.ts +5 -0
- package/dist/src/icons/Phone.js +9 -0
- package/dist/src/icons/Phone.js.map +1 -0
- package/dist/src/icons/PhoneDown.d.ts +5 -0
- package/dist/src/icons/PhoneDown.js +10 -0
- package/dist/src/icons/PhoneDown.js.map +1 -0
- package/dist/src/icons/Pin.d.ts +5 -0
- package/dist/src/icons/Pin.js +9 -0
- package/dist/src/icons/Pin.js.map +1 -0
- package/dist/src/icons/Reaction.d.ts +5 -0
- package/dist/src/icons/Reaction.js +9 -0
- package/dist/src/icons/Reaction.js.map +1 -0
- package/dist/src/icons/ScreenShare.d.ts +5 -0
- package/dist/src/icons/ScreenShare.js +40 -0
- package/dist/src/icons/ScreenShare.js.map +1 -0
- package/dist/src/icons/Settings.d.ts +5 -0
- package/dist/src/icons/Settings.js +34 -0
- package/dist/src/icons/Settings.js.map +1 -0
- package/dist/src/icons/Spotlight.d.ts +5 -0
- package/dist/src/icons/Spotlight.js +9 -0
- package/dist/src/icons/Spotlight.js.map +1 -0
- package/dist/src/icons/ThreeDots.d.ts +5 -0
- package/dist/src/icons/ThreeDots.js +11 -0
- package/dist/src/icons/ThreeDots.js.map +1 -0
- package/dist/src/icons/Video.d.ts +5 -0
- package/dist/src/icons/Video.js +9 -0
- package/dist/src/icons/Video.js.map +1 -0
- package/dist/src/icons/VideoDisabled.d.ts +5 -0
- package/dist/src/icons/VideoDisabled.js +10 -0
- package/dist/src/icons/VideoDisabled.js.map +1 -0
- package/dist/src/icons/VideoOff.d.ts +5 -0
- package/dist/src/icons/VideoOff.js +10 -0
- package/dist/src/icons/VideoOff.js.map +1 -0
- package/dist/src/icons/VideoSlash.d.ts +5 -0
- package/dist/src/icons/VideoSlash.js +10 -0
- package/dist/src/icons/VideoSlash.js.map +1 -0
- package/dist/src/icons/index.d.ts +19 -0
- package/dist/src/icons/index.js +36 -0
- package/dist/src/icons/index.js.map +1 -0
- package/dist/src/providers/MediaDevices.d.ts +9 -0
- package/dist/src/providers/MediaDevices.js +43 -0
- package/dist/src/providers/MediaDevices.js.map +1 -0
- package/dist/src/providers/StreamCall.d.ts +81 -0
- package/dist/src/providers/StreamCall.js +74 -0
- package/dist/src/providers/StreamCall.js.map +1 -0
- package/dist/src/providers/StreamVideo.d.ts +10 -0
- package/dist/src/providers/StreamVideo.js +66 -0
- package/dist/src/providers/StreamVideo.js.map +1 -0
- package/dist/src/providers/index.d.ts +2 -0
- package/dist/src/providers/index.js +19 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/theme/avatar.d.ts +2 -0
- package/dist/src/theme/avatar.js +11 -0
- package/dist/src/theme/avatar.js.map +1 -0
- package/dist/src/theme/button.d.ts +2 -0
- package/dist/src/theme/button.js +11 -0
- package/dist/src/theme/button.js.map +1 -0
- package/dist/src/theme/colors.d.ts +3 -0
- package/dist/src/theme/colors.js +49 -0
- package/dist/src/theme/colors.js.map +1 -0
- package/dist/src/theme/constants.d.ts +47 -0
- package/dist/src/theme/constants.js +54 -0
- package/dist/src/theme/constants.js.map +1 -0
- package/dist/src/theme/fonts.d.ts +2 -0
- package/dist/src/theme/fonts.js +67 -0
- package/dist/src/theme/fonts.js.map +1 -0
- package/dist/src/theme/icon.d.ts +2 -0
- package/dist/src/theme/icon.js +11 -0
- package/dist/src/theme/icon.js.map +1 -0
- package/dist/src/theme/index.d.ts +2 -0
- package/dist/src/theme/index.js +26 -0
- package/dist/src/theme/index.js.map +1 -0
- package/dist/src/theme/margin.d.ts +2 -0
- package/dist/src/theme/margin.js +11 -0
- package/dist/src/theme/margin.js.map +1 -0
- package/dist/src/theme/padding.d.ts +2 -0
- package/dist/src/theme/padding.js +11 -0
- package/dist/src/theme/padding.js.map +1 -0
- package/dist/src/theme/rounded.d.ts +2 -0
- package/dist/src/theme/rounded.js +11 -0
- package/dist/src/theme/rounded.js.map +1 -0
- package/dist/src/theme/spacing.d.ts +2 -0
- package/dist/src/theme/spacing.js +11 -0
- package/dist/src/theme/spacing.js.map +1 -0
- package/dist/src/theme/types.d.ts +45 -0
- package/dist/src/theme/types.js +3 -0
- package/dist/src/theme/types.js.map +1 -0
- package/dist/src/utils/StreamVideoRN.d.ts +25 -0
- package/dist/src/utils/StreamVideoRN.js +23 -0
- package/dist/src/utils/StreamVideoRN.js.map +1 -0
- package/dist/src/utils/hooks/index.d.ts +3 -0
- package/dist/src/utils/hooks/index.js +20 -0
- package/dist/src/utils/hooks/index.js.map +1 -0
- package/dist/src/utils/hooks/useAppStateListener.d.ts +1 -0
- package/dist/src/utils/hooks/useAppStateListener.js +41 -0
- package/dist/src/utils/hooks/useAppStateListener.js.map +1 -0
- package/dist/src/utils/hooks/useDebouncedValue.d.ts +7 -0
- package/dist/src/utils/hooks/useDebouncedValue.js +22 -0
- package/dist/src/utils/hooks/useDebouncedValue.js.map +1 -0
- package/dist/src/utils/hooks/usePrevious.d.ts +1 -0
- package/dist/src/utils/hooks/usePrevious.js +13 -0
- package/dist/src/utils/hooks/usePrevious.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.js +53 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/verifyAndroidBluetoothPermissions.d.ts +1 -0
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js +30 -0
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js.map +1 -0
- package/index.ts +22 -0
- package/package.json +70 -0
- package/src/components/ActiveCall.tsx +122 -0
- package/src/components/Avatar.tsx +88 -0
- package/src/components/CallControlsButton.tsx +72 -0
- package/src/components/CallControlsView.tsx +128 -0
- package/src/components/CallParticipantsBadge.tsx +57 -0
- package/src/components/CallParticipantsInfoView.tsx +287 -0
- package/src/components/CallParticipantsList.tsx +172 -0
- package/src/components/CallParticipantsOptions.tsx +248 -0
- package/src/components/CallParticipantsSpotlightView.tsx +53 -0
- package/src/components/CallParticipantsView.tsx +30 -0
- package/src/components/IncomingCallView.tsx +133 -0
- package/src/components/LobbyView.tsx +236 -0
- package/src/components/LocalVideoView.tsx +141 -0
- package/src/components/NetworkQualityIndicator.tsx +72 -0
- package/src/components/OutgoingCallView.tsx +133 -0
- package/src/components/ParticipantReaction.tsx +59 -0
- package/src/components/ParticipantView.tsx +315 -0
- package/src/components/ReactionsModal.tsx +90 -0
- package/src/components/ToggleAudioButton.tsx +103 -0
- package/src/components/ToggleVideoButton.tsx +103 -0
- package/src/components/UserInfoView.tsx +118 -0
- package/src/components/VideoRenderer.tsx +85 -0
- package/src/components/index.ts +12 -0
- package/src/constants/A11yLabels.ts +24 -0
- package/src/constants/index.ts +28 -0
- package/src/contexts/StreamVideoContext/createStoreContext.tsx +117 -0
- package/src/contexts/StreamVideoContext/index.tsx +37 -0
- package/src/contexts/index.ts +1 -0
- package/src/hooks/index.ts +10 -0
- package/src/hooks/useCallControls.tsx +186 -0
- package/src/hooks/useCallCycleEffect.tsx +68 -0
- package/src/hooks/useCallKeep.tsx +51 -0
- package/src/hooks/useCreateStreamVideoClient.tsx +77 -0
- package/src/hooks/useIncallManager.tsx +23 -0
- package/src/hooks/useLocalVideoStream.ts +36 -0
- package/src/hooks/useMutingState.ts +24 -0
- package/src/hooks/usePermissionNotification.tsx +53 -0
- package/src/hooks/usePermissionRequest.tsx +67 -0
- package/src/hooks/usePublishMediaStreams.ts +59 -0
- package/src/icons/ArrowRight.tsx +16 -0
- package/src/icons/CameraSwitch.tsx +14 -0
- package/src/icons/Chat.tsx +14 -0
- package/src/icons/Cross.tsx +14 -0
- package/src/icons/Mic.tsx +18 -0
- package/src/icons/MicOff.tsx +14 -0
- package/src/icons/Participants.tsx +16 -0
- package/src/icons/Phone.tsx +14 -0
- package/src/icons/PhoneDown.tsx +15 -0
- package/src/icons/Pin.tsx +16 -0
- package/src/icons/Reaction.tsx +14 -0
- package/src/icons/ScreenShare.tsx +32 -0
- package/src/icons/Settings.tsx +13 -0
- package/src/icons/Spotlight.tsx +16 -0
- package/src/icons/ThreeDots.tsx +13 -0
- package/src/icons/Video.tsx +14 -0
- package/src/icons/VideoDisabled.tsx +22 -0
- package/src/icons/VideoOff.tsx +20 -0
- package/src/icons/VideoSlash.tsx +15 -0
- package/src/icons/index.tsx +19 -0
- package/src/providers/MediaDevices.tsx +45 -0
- package/src/providers/StreamCall.tsx +136 -0
- package/src/providers/StreamVideo.tsx +50 -0
- package/src/providers/index.ts +2 -0
- package/src/theme/avatar.ts +9 -0
- package/src/theme/button.ts +9 -0
- package/src/theme/colors.ts +49 -0
- package/src/theme/constants.ts +51 -0
- package/src/theme/fonts.ts +65 -0
- package/src/theme/icon.ts +9 -0
- package/src/theme/index.ts +25 -0
- package/src/theme/margin.ts +9 -0
- package/src/theme/padding.ts +9 -0
- package/src/theme/rounded.ts +9 -0
- package/src/theme/spacing.ts +9 -0
- package/src/theme/types.ts +64 -0
- package/src/utils/StreamVideoRN.ts +35 -0
- package/src/utils/hooks/index.ts +3 -0
- package/src/utils/hooks/useAppStateListener.ts +48 -0
- package/src/utils/hooks/useDebouncedValue.ts +21 -0
- package/src/utils/hooks/usePrevious.ts +11 -0
- package/src/utils/index.ts +45 -0
- package/src/utils/verifyAndroidBluetoothPermissions.ts +31 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CallParticipantsInfoView = void 0;
|
|
27
|
+
const video_client_1 = require("@stream-io/video-client");
|
|
28
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
29
|
+
const react_native_1 = require("react-native");
|
|
30
|
+
const icons_1 = require("../icons");
|
|
31
|
+
const react_1 = __importStar(require("react"));
|
|
32
|
+
const utils_1 = require("../utils");
|
|
33
|
+
const CallParticipantsOptions_1 = require("./CallParticipantsOptions");
|
|
34
|
+
const Avatar_1 = require("./Avatar");
|
|
35
|
+
const theme_1 = require("../theme");
|
|
36
|
+
const CallParticipantInfoItem = (props) => {
|
|
37
|
+
const { participant, setSelectedParticipant } = props;
|
|
38
|
+
const connectedUser = (0, video_react_bindings_1.useConnectedUser)();
|
|
39
|
+
const participantIsLoggedInUser = participant.userId === connectedUser?.id;
|
|
40
|
+
const userHasMuteUsersCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.MUTE_USERS);
|
|
41
|
+
const userHasUpdateCallPermissionsCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.UPDATE_CALL_PERMISSIONS);
|
|
42
|
+
const userHasBlockUserCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.BLOCK_USERS);
|
|
43
|
+
const optionsOpenHandler = (0, react_1.useCallback)(() => {
|
|
44
|
+
if (!participantIsLoggedInUser)
|
|
45
|
+
setSelectedParticipant(participant);
|
|
46
|
+
}, [participant, setSelectedParticipant, participantIsLoggedInUser]);
|
|
47
|
+
if (!participant)
|
|
48
|
+
return null;
|
|
49
|
+
const { publishedTracks } = participant;
|
|
50
|
+
const isAudioMuted = !publishedTracks.includes(video_client_1.SfuModels.TrackType.AUDIO);
|
|
51
|
+
const isVideoMuted = !publishedTracks.includes(video_client_1.SfuModels.TrackType.VIDEO);
|
|
52
|
+
const isScreenSharing = publishedTracks.includes(video_client_1.SfuModels.TrackType.SCREEN_SHARE);
|
|
53
|
+
const isParticipantItemPressable = userHasBlockUserCapability ||
|
|
54
|
+
userHasMuteUsersCapability ||
|
|
55
|
+
userHasUpdateCallPermissionsCapability;
|
|
56
|
+
return (<react_native_1.Pressable style={styles.participant} onPress={optionsOpenHandler} disabled={!isParticipantItemPressable}>
|
|
57
|
+
<Avatar_1.Avatar radius={theme_1.theme.avatar.xs} participant={participant}/>
|
|
58
|
+
|
|
59
|
+
<react_native_1.Text style={styles.name}>
|
|
60
|
+
{(participant.name || (0, utils_1.generateParticipantTitle)(participant.userId)) +
|
|
61
|
+
(participantIsLoggedInUser ? ' (You)' : '')}
|
|
62
|
+
</react_native_1.Text>
|
|
63
|
+
<react_native_1.View style={styles.icons}>
|
|
64
|
+
{isScreenSharing && (<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.md]}>
|
|
65
|
+
<icons_1.ScreenShare color={theme_1.theme.light.info}/>
|
|
66
|
+
</react_native_1.View>)}
|
|
67
|
+
{isAudioMuted && (<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.sm]}>
|
|
68
|
+
<icons_1.MicOff color={theme_1.theme.light.error}/>
|
|
69
|
+
</react_native_1.View>)}
|
|
70
|
+
{isVideoMuted && (<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.sm]}>
|
|
71
|
+
<icons_1.VideoSlash color={theme_1.theme.light.error}/>
|
|
72
|
+
</react_native_1.View>)}
|
|
73
|
+
{!participantIsLoggedInUser && (<video_react_bindings_1.Restricted requiredGrants={[
|
|
74
|
+
video_client_1.OwnCapability.MUTE_USERS,
|
|
75
|
+
video_client_1.OwnCapability.UPDATE_CALL_PERMISSIONS,
|
|
76
|
+
video_client_1.OwnCapability.BLOCK_USERS,
|
|
77
|
+
]}>
|
|
78
|
+
<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.sm]}>
|
|
79
|
+
<icons_1.ArrowRight color={theme_1.theme.light.text_high_emphasis}/>
|
|
80
|
+
</react_native_1.View>
|
|
81
|
+
</video_react_bindings_1.Restricted>)}
|
|
82
|
+
</react_native_1.View>
|
|
83
|
+
</react_native_1.Pressable>);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Shows information about the call, it's participants in the call and
|
|
87
|
+
* their mute states, handler to trigger options (TBD, permissions not impl)
|
|
88
|
+
* and options to invite more people to the call.
|
|
89
|
+
*
|
|
90
|
+
* | Participants List | Options Modal is Open |
|
|
91
|
+
* | :--- | :----: |
|
|
92
|
+
* | | |
|
|
93
|
+
**/
|
|
94
|
+
const CallParticipantsInfoView = ({ isCallParticipantsViewVisible, setIsCallParticipantsViewVisible, }) => {
|
|
95
|
+
const participants = (0, video_react_bindings_1.useParticipants)();
|
|
96
|
+
const participantCount = (0, video_react_bindings_1.useParticipantCount)();
|
|
97
|
+
const [selectedParticipant, setSelectedParticipant] = (0, react_1.useState)(undefined);
|
|
98
|
+
const call = (0, video_react_bindings_1.useCall)();
|
|
99
|
+
const muteAllParticipantsHandler = async () => {
|
|
100
|
+
try {
|
|
101
|
+
await call?.muteAllUsers('audio');
|
|
102
|
+
react_native_1.Alert.alert('Users Muted Successfully');
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.log('Error muting users', error);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const onCloseCallParticipantsViewVisible = () => {
|
|
109
|
+
setIsCallParticipantsViewVisible(false);
|
|
110
|
+
};
|
|
111
|
+
const renderItem = (0, react_1.useCallback)(({ item }) => {
|
|
112
|
+
return (<CallParticipantInfoItem key={item.sessionId} participant={item} setSelectedParticipant={setSelectedParticipant}/>);
|
|
113
|
+
}, []);
|
|
114
|
+
return (<react_native_1.Modal animationType="slide" transparent={true} visible={isCallParticipantsViewVisible} onRequestClose={onCloseCallParticipantsViewVisible}>
|
|
115
|
+
<react_native_1.View style={styles.container}>
|
|
116
|
+
<react_native_1.View style={styles.content}>
|
|
117
|
+
<react_native_1.View style={styles.header}>
|
|
118
|
+
<react_native_1.View style={styles.leftHeaderElement}/>
|
|
119
|
+
<react_native_1.Text style={styles.headerText}>
|
|
120
|
+
Participants ({participantCount})
|
|
121
|
+
</react_native_1.Text>
|
|
122
|
+
<react_native_1.Pressable style={[styles.closeIcon, theme_1.theme.icon.sm]} onPress={onCloseCallParticipantsViewVisible}>
|
|
123
|
+
<icons_1.Cross color={theme_1.theme.light.primary}/>
|
|
124
|
+
</react_native_1.Pressable>
|
|
125
|
+
</react_native_1.View>
|
|
126
|
+
<react_native_1.View style={styles.buttonGroup}>
|
|
127
|
+
<video_react_bindings_1.Restricted requiredGrants={[video_client_1.OwnCapability.MUTE_USERS]}>
|
|
128
|
+
<react_native_1.Pressable style={styles.button} onPress={muteAllParticipantsHandler}>
|
|
129
|
+
<react_native_1.Text style={styles.buttonText}>Mute All</react_native_1.Text>
|
|
130
|
+
</react_native_1.Pressable>
|
|
131
|
+
</video_react_bindings_1.Restricted>
|
|
132
|
+
</react_native_1.View>
|
|
133
|
+
<react_native_1.FlatList data={participants} renderItem={renderItem}/>
|
|
134
|
+
{selectedParticipant && (<react_native_1.View style={[react_native_1.StyleSheet.absoluteFill, styles.modal]}>
|
|
135
|
+
<CallParticipantsOptions_1.CallParticipantOptions participant={selectedParticipant} setSelectedParticipant={setSelectedParticipant}/>
|
|
136
|
+
</react_native_1.View>)}
|
|
137
|
+
</react_native_1.View>
|
|
138
|
+
</react_native_1.View>
|
|
139
|
+
</react_native_1.Modal>);
|
|
140
|
+
};
|
|
141
|
+
exports.CallParticipantsInfoView = CallParticipantsInfoView;
|
|
142
|
+
const styles = react_native_1.StyleSheet.create({
|
|
143
|
+
container: {
|
|
144
|
+
flex: 1,
|
|
145
|
+
justifyContent: 'center',
|
|
146
|
+
},
|
|
147
|
+
content: {
|
|
148
|
+
flex: 1,
|
|
149
|
+
backgroundColor: theme_1.theme.light.bars,
|
|
150
|
+
borderRadius: theme_1.theme.rounded.md,
|
|
151
|
+
marginVertical: theme_1.theme.margin.lg,
|
|
152
|
+
marginHorizontal: theme_1.theme.margin.md,
|
|
153
|
+
},
|
|
154
|
+
header: {
|
|
155
|
+
display: 'flex',
|
|
156
|
+
flexDirection: 'row',
|
|
157
|
+
justifyContent: 'space-between',
|
|
158
|
+
alignItems: 'center',
|
|
159
|
+
paddingVertical: theme_1.theme.padding.md,
|
|
160
|
+
width: '100%',
|
|
161
|
+
},
|
|
162
|
+
leftHeaderElement: {
|
|
163
|
+
marginLeft: theme_1.theme.margin.md,
|
|
164
|
+
},
|
|
165
|
+
headerText: {
|
|
166
|
+
...theme_1.theme.fonts.bodyBold,
|
|
167
|
+
color: theme_1.theme.light.text_high_emphasis,
|
|
168
|
+
},
|
|
169
|
+
closeIcon: {
|
|
170
|
+
marginRight: theme_1.theme.margin.md,
|
|
171
|
+
},
|
|
172
|
+
buttonGroup: {},
|
|
173
|
+
button: {
|
|
174
|
+
backgroundColor: theme_1.theme.light.primary,
|
|
175
|
+
borderRadius: theme_1.theme.rounded.lg,
|
|
176
|
+
padding: theme_1.theme.padding.md,
|
|
177
|
+
margin: theme_1.theme.margin.lg,
|
|
178
|
+
},
|
|
179
|
+
buttonText: {
|
|
180
|
+
textAlign: 'center',
|
|
181
|
+
color: theme_1.theme.light.static_white,
|
|
182
|
+
...theme_1.theme.fonts.subtitleBold,
|
|
183
|
+
},
|
|
184
|
+
participant: {
|
|
185
|
+
paddingHorizontal: theme_1.theme.padding.sm,
|
|
186
|
+
paddingVertical: theme_1.theme.padding.xs,
|
|
187
|
+
display: 'flex',
|
|
188
|
+
flexDirection: 'row',
|
|
189
|
+
alignItems: 'center',
|
|
190
|
+
borderBottomColor: theme_1.theme.light.borders,
|
|
191
|
+
borderBottomWidth: 1,
|
|
192
|
+
},
|
|
193
|
+
name: {
|
|
194
|
+
marginLeft: theme_1.theme.margin.sm,
|
|
195
|
+
color: theme_1.theme.light.text_high_emphasis,
|
|
196
|
+
...theme_1.theme.fonts.subtitleBold,
|
|
197
|
+
},
|
|
198
|
+
icons: {
|
|
199
|
+
position: 'absolute',
|
|
200
|
+
right: theme_1.theme.spacing.lg,
|
|
201
|
+
display: 'flex',
|
|
202
|
+
flexDirection: 'row',
|
|
203
|
+
},
|
|
204
|
+
svgContainerStyle: {
|
|
205
|
+
marginLeft: theme_1.theme.margin.sm,
|
|
206
|
+
},
|
|
207
|
+
modal: {
|
|
208
|
+
alignItems: 'center',
|
|
209
|
+
justifyContent: 'center',
|
|
210
|
+
backgroundColor: theme_1.theme.light.overlay,
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=CallParticipantsInfoView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallParticipantsInfoView.js","sourceRoot":"","sources":["../../../src/components/CallParticipantsInfoView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StreamVideoLocalParticipant, StreamVideoParticipant } from '@stream-io/video-client';
|
|
2
|
+
/**
|
|
3
|
+
* The props for the CallParticipantsList component
|
|
4
|
+
*/
|
|
5
|
+
interface CallParticipantsListProps {
|
|
6
|
+
/**
|
|
7
|
+
* The list of participants to display in the list
|
|
8
|
+
*/
|
|
9
|
+
participants: (StreamVideoParticipant | StreamVideoLocalParticipant)[];
|
|
10
|
+
/**
|
|
11
|
+
* The number of columns to display in the list of participants while in vertical or horizontal scrolling mode
|
|
12
|
+
* @default 2
|
|
13
|
+
*/
|
|
14
|
+
numColumns?: number;
|
|
15
|
+
/**
|
|
16
|
+
* If true, the list will be displayed in horizontal scrolling mode
|
|
17
|
+
*/
|
|
18
|
+
horizontal?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The CallParticipantsList component displays a list of participants in a FlatList
|
|
22
|
+
* NOTE: this component depends on a flex container to calculate the width and height of the participant view, hence it should be used only in a flex parent container
|
|
23
|
+
*/
|
|
24
|
+
export declare const CallParticipantsList: (props: CallParticipantsListProps) => JSX.Element;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CallParticipantsList = void 0;
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
28
|
+
const react_native_1 = require("react-native");
|
|
29
|
+
const ParticipantView_1 = require("./ParticipantView");
|
|
30
|
+
const video_client_1 = require("@stream-io/video-client");
|
|
31
|
+
const theme_1 = require("../theme");
|
|
32
|
+
const useDebouncedValue_1 = require("../utils/hooks/useDebouncedValue");
|
|
33
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
34
|
+
const A11yLabels_1 = require("../constants/A11yLabels");
|
|
35
|
+
const VIEWABILITY_CONFIG = {
|
|
36
|
+
waitForInteraction: false,
|
|
37
|
+
itemVisiblePercentThreshold: 60,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The CallParticipantsList component displays a list of participants in a FlatList
|
|
41
|
+
* NOTE: this component depends on a flex container to calculate the width and height of the participant view, hence it should be used only in a flex parent container
|
|
42
|
+
*/
|
|
43
|
+
const CallParticipantsList = (props) => {
|
|
44
|
+
const { numColumns = 2, horizontal, participants } = props;
|
|
45
|
+
const [containerWidth, setContainerWidth] = (0, react_1.useState)(0);
|
|
46
|
+
// we use a HashSet to track the currently viewable participants
|
|
47
|
+
// and a separate force update state to rerender the component to inform that the HashSet has changed
|
|
48
|
+
// NOTE: we use set instead of array or object for O(1) lookup, add and delete
|
|
49
|
+
const viewableParticipantSessionIds = (0, react_1.useRef)(new Set());
|
|
50
|
+
const [_forceUpdateValue, forceUpdate] = (0, react_1.useReducer)((x) => x + 1, 0);
|
|
51
|
+
const forceUpdateValue = (0, useDebouncedValue_1.useDebouncedValue)(_forceUpdateValue, 500); // we debounce forced value to avoid multiple viewability change continuous rerenders due to callbacks that occurs simultaneously during a large list scroll or when scrolling is completed
|
|
52
|
+
// we use a ref to store the active call object
|
|
53
|
+
// so that it can be used in the onViewableItemsChanged callback
|
|
54
|
+
const activeCall = (0, video_react_bindings_1.useCall)();
|
|
55
|
+
const activeCallRef = (0, react_1.useRef)(activeCall);
|
|
56
|
+
activeCallRef.current = activeCall;
|
|
57
|
+
// This is the function that gets called when the user scrolls the list of participants.
|
|
58
|
+
// It updates viewableParticipantSessionIds HashSet with the session IDs
|
|
59
|
+
// of the participants that are currently visible.
|
|
60
|
+
const onViewableItemsChanged = (0, react_1.useRef)(({ viewableItems }) => {
|
|
61
|
+
const participantPatches = {};
|
|
62
|
+
let mustUpdate = false;
|
|
63
|
+
const newVisibleParticipantSessionIds = new Set(viewableItems.map((v) => v.key));
|
|
64
|
+
const oldVisibleParticipantSessionIds = viewableParticipantSessionIds.current;
|
|
65
|
+
newVisibleParticipantSessionIds.forEach((key) => {
|
|
66
|
+
if (!oldVisibleParticipantSessionIds.has(key)) {
|
|
67
|
+
mustUpdate = true;
|
|
68
|
+
participantPatches[key] = {
|
|
69
|
+
viewportVisibilityState: video_client_1.VisibilityState.VISIBLE,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
oldVisibleParticipantSessionIds.forEach((key) => {
|
|
74
|
+
if (!newVisibleParticipantSessionIds.has(key)) {
|
|
75
|
+
mustUpdate = true;
|
|
76
|
+
participantPatches[key] = {
|
|
77
|
+
viewportVisibilityState: video_client_1.VisibilityState.INVISIBLE,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
viewableParticipantSessionIds.current = newVisibleParticipantSessionIds;
|
|
82
|
+
if (mustUpdate) {
|
|
83
|
+
activeCallRef.current?.state.updateParticipants(participantPatches);
|
|
84
|
+
forceUpdate();
|
|
85
|
+
}
|
|
86
|
+
}).current;
|
|
87
|
+
// NOTE: key must be sessionId always as it is used to track viewable participants
|
|
88
|
+
const keyExtractor = (0, react_1.useRef)((item) => item.sessionId).current;
|
|
89
|
+
const onLayout = (0, react_1.useRef)((event) => {
|
|
90
|
+
const { width } = event.nativeEvent.layout;
|
|
91
|
+
setContainerWidth(width);
|
|
92
|
+
}).current;
|
|
93
|
+
const itemContainerStyle = (0, react_1.useMemo)(() => {
|
|
94
|
+
// we calculate the size of the participant view based on the containerWidth (the phone's screen width),
|
|
95
|
+
// number of columns and the margin between the views
|
|
96
|
+
const size = containerWidth / numColumns - theme_1.theme.margin.sm * 2;
|
|
97
|
+
const style = { width: size, height: size };
|
|
98
|
+
if (horizontal) {
|
|
99
|
+
return [styles.participantWrapperHorizontal, style];
|
|
100
|
+
}
|
|
101
|
+
return [styles.participantWrapperVertical, style];
|
|
102
|
+
}, [horizontal, numColumns, containerWidth]);
|
|
103
|
+
const renderItem = (0, react_1.useCallback)(({ item: participant }) => {
|
|
104
|
+
const isVisible = viewableParticipantSessionIds.current.has(participant.sessionId);
|
|
105
|
+
return (<ParticipantView_1.ParticipantView participant={participant} containerStyle={itemContainerStyle} kind="video" isVisible={isVisible}/>);
|
|
106
|
+
}, [itemContainerStyle]);
|
|
107
|
+
return (<react_native_1.FlatList onLayout={onLayout} key={!horizontal ? numColumns : undefined} // setting numColumns as key is a strict requirement of react-native to support changing numColumns on the fly
|
|
108
|
+
data={participants} keyExtractor={keyExtractor} viewabilityConfig={VIEWABILITY_CONFIG} onViewableItemsChanged={onViewableItemsChanged} renderItem={renderItem} numColumns={!horizontal ? numColumns : undefined} horizontal={horizontal} showsHorizontalScrollIndicator={false} extraData={`${forceUpdateValue}${containerWidth}`} // this is important to force re-render when visibility changes
|
|
109
|
+
accessibilityLabel={A11yLabels_1.A11yComponents.CALL_PARTICIPANTS_LIST}/>);
|
|
110
|
+
};
|
|
111
|
+
exports.CallParticipantsList = CallParticipantsList;
|
|
112
|
+
const styles = react_native_1.StyleSheet.create({
|
|
113
|
+
participantWrapperVertical: {
|
|
114
|
+
margin: theme_1.theme.margin.sm,
|
|
115
|
+
overflow: 'hidden',
|
|
116
|
+
borderRadius: theme_1.theme.rounded.sm,
|
|
117
|
+
},
|
|
118
|
+
participantWrapperHorizontal: {
|
|
119
|
+
marginHorizontal: theme_1.theme.margin.sm,
|
|
120
|
+
overflow: 'hidden',
|
|
121
|
+
borderRadius: theme_1.theme.rounded.sm,
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=CallParticipantsList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallParticipantsList.js","sourceRoot":"","sources":["../../../src/components/CallParticipantsList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { StreamVideoParticipant } from '@stream-io/video-client';
|
|
3
|
+
type CallParticipantOptionsType = {
|
|
4
|
+
participant: StreamVideoParticipant;
|
|
5
|
+
setSelectedParticipant: React.Dispatch<React.SetStateAction<StreamVideoParticipant | undefined>>;
|
|
6
|
+
};
|
|
7
|
+
export declare const CallParticipantOptions: (props: CallParticipantOptionsType) => JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CallParticipantOptions = void 0;
|
|
4
|
+
const video_client_1 = require("@stream-io/video-client");
|
|
5
|
+
const icons_1 = require("../icons");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const Avatar_1 = require("./Avatar");
|
|
10
|
+
const theme_1 = require("../theme");
|
|
11
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
12
|
+
const CallParticipantOptions = (props) => {
|
|
13
|
+
const { participant, setSelectedParticipant } = props;
|
|
14
|
+
const call = (0, video_react_bindings_1.useCall)();
|
|
15
|
+
const grantPermission = async (permission) => {
|
|
16
|
+
await call?.updateUserPermissions({
|
|
17
|
+
user_id: participant.userId,
|
|
18
|
+
grant_permissions: [permission],
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
const revokePermission = async (permission) => {
|
|
22
|
+
await call?.updateUserPermissions({
|
|
23
|
+
user_id: participant.userId,
|
|
24
|
+
revoke_permissions: [permission],
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const muteUser = async (mediaType) => {
|
|
28
|
+
await call?.muteUser(participant.userId, mediaType);
|
|
29
|
+
};
|
|
30
|
+
const muteUserAudio = async () => {
|
|
31
|
+
await muteUser('audio');
|
|
32
|
+
};
|
|
33
|
+
const muteUserVideo = async () => {
|
|
34
|
+
await muteUser('video');
|
|
35
|
+
};
|
|
36
|
+
const blockUser = async () => {
|
|
37
|
+
await call?.blockUser(participant.userId);
|
|
38
|
+
};
|
|
39
|
+
const userHasMuteUsersCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.MUTE_USERS);
|
|
40
|
+
const userHasUpdateCallPermissionsCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.UPDATE_CALL_PERMISSIONS);
|
|
41
|
+
const userHasBlockUserCapability = (0, video_react_bindings_1.useHasPermissions)(video_client_1.OwnCapability.BLOCK_USERS);
|
|
42
|
+
const participantCanPublishVideo = participant.publishedTracks.includes(video_client_1.SfuModels.TrackType.VIDEO);
|
|
43
|
+
const participantCanPublishAudio = participant.publishedTracks.includes(video_client_1.SfuModels.TrackType.AUDIO);
|
|
44
|
+
const callMediaStreamMutePermissions = userHasMuteUsersCapability
|
|
45
|
+
? [
|
|
46
|
+
participantCanPublishVideo
|
|
47
|
+
? {
|
|
48
|
+
title: 'Mute Video',
|
|
49
|
+
onPressHandler: muteUserVideo,
|
|
50
|
+
}
|
|
51
|
+
: null,
|
|
52
|
+
participantCanPublishAudio
|
|
53
|
+
? {
|
|
54
|
+
title: 'Mute Audio',
|
|
55
|
+
onPressHandler: muteUserAudio,
|
|
56
|
+
}
|
|
57
|
+
: null,
|
|
58
|
+
]
|
|
59
|
+
: [];
|
|
60
|
+
const callMediaStreamPermissions = userHasUpdateCallPermissionsCapability
|
|
61
|
+
? [
|
|
62
|
+
{
|
|
63
|
+
icon: <icons_1.VideoDisabled color={theme_1.theme.light.text_high_emphasis}/>,
|
|
64
|
+
title: 'Disable Video',
|
|
65
|
+
onPressHandler: async () => await revokePermission(video_client_1.OwnCapability.SEND_VIDEO),
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
title: 'Disable Audio',
|
|
69
|
+
onPressHandler: async () => await revokePermission(video_client_1.OwnCapability.SEND_AUDIO),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
title: 'Allow Audio',
|
|
73
|
+
onPressHandler: async () => await grantPermission(video_client_1.OwnCapability.SEND_AUDIO),
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: 'Allow Video',
|
|
77
|
+
onPressHandler: async () => await grantPermission(video_client_1.OwnCapability.SEND_VIDEO),
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
title: 'Allow Screen Sharing',
|
|
81
|
+
onPressHandler: async () => await grantPermission(video_client_1.OwnCapability.SCREENSHARE),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
title: 'Disable Screen Sharing',
|
|
85
|
+
onPressHandler: async () => await revokePermission(video_client_1.OwnCapability.SCREENSHARE),
|
|
86
|
+
},
|
|
87
|
+
]
|
|
88
|
+
: [];
|
|
89
|
+
const options = [
|
|
90
|
+
userHasBlockUserCapability
|
|
91
|
+
? {
|
|
92
|
+
title: 'Block',
|
|
93
|
+
onPressHandler: blockUser,
|
|
94
|
+
}
|
|
95
|
+
: null,
|
|
96
|
+
...callMediaStreamMutePermissions,
|
|
97
|
+
...callMediaStreamPermissions,
|
|
98
|
+
];
|
|
99
|
+
const onCloseParticipantOptions = (0, react_1.useCallback)(() => {
|
|
100
|
+
setSelectedParticipant(undefined);
|
|
101
|
+
}, [setSelectedParticipant]);
|
|
102
|
+
const showYouLabel = participant.isLoggedInUser;
|
|
103
|
+
return (<react_native_1.View style={styles.container}>
|
|
104
|
+
<react_native_1.View style={styles.menu}>
|
|
105
|
+
<react_native_1.View style={styles.participantInfo}>
|
|
106
|
+
<react_native_1.View style={styles.userInfo}>
|
|
107
|
+
<Avatar_1.Avatar radius={theme_1.theme.avatar.xs} participant={participant}/>
|
|
108
|
+
|
|
109
|
+
<react_native_1.Text style={styles.name}>
|
|
110
|
+
{(0, utils_1.generateParticipantTitle)(participant.userId) +
|
|
111
|
+
(showYouLabel ? ' (You)' : '')}
|
|
112
|
+
</react_native_1.Text>
|
|
113
|
+
</react_native_1.View>
|
|
114
|
+
|
|
115
|
+
<react_native_1.Pressable style={[styles.svgContainerStyle, theme_1.theme.icon.sm]} onPress={onCloseParticipantOptions}>
|
|
116
|
+
<icons_1.Cross color={theme_1.theme.light.primary}/>
|
|
117
|
+
</react_native_1.Pressable>
|
|
118
|
+
</react_native_1.View>
|
|
119
|
+
<react_native_1.View style={styles.options}>
|
|
120
|
+
{options.map((option, index) => {
|
|
121
|
+
if (!option) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const applyBottomPadding = index < options.length - 1 ? styles.borderBottom : null;
|
|
125
|
+
const onPressHandler = () => {
|
|
126
|
+
option?.onPressHandler();
|
|
127
|
+
onCloseParticipantOptions();
|
|
128
|
+
};
|
|
129
|
+
return (<react_native_1.Pressable style={[applyBottomPadding, styles.option]} key={option.title} onPress={onPressHandler}>
|
|
130
|
+
<react_native_1.View style={[styles.svgContainerStyle, theme_1.theme.icon.sm]}>
|
|
131
|
+
{option.icon}
|
|
132
|
+
</react_native_1.View>
|
|
133
|
+
<react_native_1.Text style={styles.title}>{option.title}</react_native_1.Text>
|
|
134
|
+
</react_native_1.Pressable>);
|
|
135
|
+
})}
|
|
136
|
+
</react_native_1.View>
|
|
137
|
+
</react_native_1.View>
|
|
138
|
+
</react_native_1.View>);
|
|
139
|
+
};
|
|
140
|
+
exports.CallParticipantOptions = CallParticipantOptions;
|
|
141
|
+
const styles = react_native_1.StyleSheet.create({
|
|
142
|
+
container: {
|
|
143
|
+
width: '100%',
|
|
144
|
+
height: '100%',
|
|
145
|
+
display: 'flex',
|
|
146
|
+
justifyContent: 'center',
|
|
147
|
+
paddingHorizontal: theme_1.theme.padding.xl,
|
|
148
|
+
},
|
|
149
|
+
menu: {
|
|
150
|
+
backgroundColor: theme_1.theme.light.bars,
|
|
151
|
+
borderRadius: theme_1.theme.rounded.md,
|
|
152
|
+
},
|
|
153
|
+
participantInfo: {
|
|
154
|
+
display: 'flex',
|
|
155
|
+
flexDirection: 'row',
|
|
156
|
+
alignItems: 'center',
|
|
157
|
+
justifyContent: 'space-between',
|
|
158
|
+
padding: theme_1.theme.padding.md,
|
|
159
|
+
},
|
|
160
|
+
userInfo: {
|
|
161
|
+
display: 'flex',
|
|
162
|
+
flexDirection: 'row',
|
|
163
|
+
alignItems: 'center',
|
|
164
|
+
},
|
|
165
|
+
name: {
|
|
166
|
+
marginLeft: theme_1.theme.margin.sm,
|
|
167
|
+
...theme_1.theme.fonts.subtitleBold,
|
|
168
|
+
color: theme_1.theme.light.text_high_emphasis,
|
|
169
|
+
},
|
|
170
|
+
svgContainerStyle: {},
|
|
171
|
+
options: {},
|
|
172
|
+
option: {
|
|
173
|
+
paddingHorizontal: theme_1.theme.padding.md,
|
|
174
|
+
paddingVertical: theme_1.theme.padding.sm,
|
|
175
|
+
display: 'flex',
|
|
176
|
+
flexDirection: 'row',
|
|
177
|
+
alignItems: 'center',
|
|
178
|
+
},
|
|
179
|
+
title: {
|
|
180
|
+
marginLeft: theme_1.theme.margin.md,
|
|
181
|
+
color: theme_1.theme.light.text_high_emphasis,
|
|
182
|
+
...theme_1.theme.fonts.subtitle,
|
|
183
|
+
},
|
|
184
|
+
borderBottom: {
|
|
185
|
+
borderBottomColor: theme_1.theme.light.borders,
|
|
186
|
+
borderBottomWidth: 1,
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=CallParticipantsOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallParticipantsOptions.js","sourceRoot":"","sources":["../../../src/components/CallParticipantsOptions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CallParticipantsSpotlightView: () => JSX.Element;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CallParticipantsSpotlightView = void 0;
|
|
4
|
+
const video_client_1 = require("@stream-io/video-client");
|
|
5
|
+
const video_react_bindings_1 = require("@stream-io/video-react-bindings");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const ParticipantView_1 = require("./ParticipantView");
|
|
8
|
+
const theme_1 = require("../theme");
|
|
9
|
+
const useDebouncedValue_1 = require("../utils/hooks/useDebouncedValue");
|
|
10
|
+
const CallParticipantsList_1 = require("./CallParticipantsList");
|
|
11
|
+
const video_client_2 = require("@stream-io/video-client");
|
|
12
|
+
const hasScreenShare = (p) => p.publishedTracks.includes(video_client_1.SfuModels.TrackType.SCREEN_SHARE);
|
|
13
|
+
const CallParticipantsSpotlightView = () => {
|
|
14
|
+
const _allParticipants = (0, video_react_bindings_1.useParticipants)({
|
|
15
|
+
sortBy: video_client_2.speakerLayoutSortPreset,
|
|
16
|
+
});
|
|
17
|
+
const allParticipants = (0, useDebouncedValue_1.useDebouncedValue)(_allParticipants, 300); // we debounce the participants to avoid unnecessary rerenders that happen when participant tracks are all subscribed simultaneously
|
|
18
|
+
const [participantInSpotlight, ...otherParticipants] = allParticipants;
|
|
19
|
+
const isScreenShareOnSpotlight = hasScreenShare(participantInSpotlight);
|
|
20
|
+
return (<react_native_1.View style={styles.container}>
|
|
21
|
+
{participantInSpotlight && (<ParticipantView_1.ParticipantView participant={participantInSpotlight} containerStyle={styles.participantView} kind={isScreenShareOnSpotlight ? 'screen' : 'video'}/>)}
|
|
22
|
+
<react_native_1.View style={styles.participantVideoContainer}>
|
|
23
|
+
<CallParticipantsList_1.CallParticipantsList participants={isScreenShareOnSpotlight ? allParticipants : otherParticipants} horizontal/>
|
|
24
|
+
</react_native_1.View>
|
|
25
|
+
</react_native_1.View>);
|
|
26
|
+
};
|
|
27
|
+
exports.CallParticipantsSpotlightView = CallParticipantsSpotlightView;
|
|
28
|
+
const styles = react_native_1.StyleSheet.create({
|
|
29
|
+
container: { flex: 1 },
|
|
30
|
+
participantView: {
|
|
31
|
+
flex: 1,
|
|
32
|
+
overflow: 'hidden',
|
|
33
|
+
borderRadius: theme_1.theme.rounded.sm,
|
|
34
|
+
marginHorizontal: theme_1.theme.padding.sm,
|
|
35
|
+
},
|
|
36
|
+
participantVideoContainer: {
|
|
37
|
+
paddingVertical: theme_1.theme.padding.sm,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=CallParticipantsSpotlightView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallParticipantsSpotlightView.js","sourceRoot":"","sources":["../../../src/components/CallParticipantsSpotlightView.tsx"],"names":[],"mappings":";;;AAAA,0DAA4E;AAC5E,0EAAkE;AAClE,+CAAgD;AAChD,uDAAoD;AACpD,oCAAiC;AACjC,wEAAqE;AACrE,iEAA8D;AAC9D,0DAAkE;AAElE,MAAM,cAAc,GAAG,CAAC,CAAyB,EAAE,EAAE,CACnD,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,wBAAS,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAExD,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAChD,MAAM,gBAAgB,GAAG,IAAA,sCAAe,EAAC;QACvC,MAAM,EAAE,sCAAuB;KAChC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,IAAA,qCAAiB,EAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,oIAAoI;IACtM,MAAM,CAAC,sBAAsB,EAAE,GAAG,iBAAiB,CAAC,GAAG,eAAe,CAAC;IACvE,MAAM,wBAAwB,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;IAExE,OAAO,CACL,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,sBAAsB,IAAI,CACzB,CAAC,iCAAe,CACd,WAAW,CAAC,CAAC,sBAAsB,CAAC,CACpC,cAAc,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CACvC,IAAI,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACpD,CACH,CACD;MAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAC5C;QAAA,CAAC,2CAAoB,CACnB,YAAY,CAAC,CACX,wBAAwB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAC/D,CACD,UAAU,EAEd;MAAA,EAAE,mBAAI,CACR;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,6BAA6B,iCA2BxC;AAEF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACtB,eAAe,EAAE;QACf,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,aAAK,CAAC,OAAO,CAAC,EAAE;QAC9B,gBAAgB,EAAE,aAAK,CAAC,OAAO,CAAC,EAAE;KACnC;IACD,yBAAyB,EAAE;QACzB,eAAe,EAAE,aAAK,CAAC,OAAO,CAAC,EAAE;KAClC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CallParticipantsView: () => JSX.Element;
|