@stream-io/video-react-sdk 0.0.1-alpha.112 → 0.0.1-alpha.113
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 +9 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/components/CallControls/ToggleAudioButton.js +3 -54
- package/dist/src/components/CallControls/ToggleAudioButton.js.map +1 -1
- package/dist/src/components/CallControls/ToggleVideoButton.js +5 -56
- package/dist/src/components/CallControls/ToggleVideoButton.js.map +1 -1
- package/dist/src/components/CallParticipantsList/CallParticipantListingItem.js +1 -1
- package/dist/src/components/CallParticipantsList/CallParticipantListingItem.js.map +1 -1
- package/dist/src/hooks/index.d.ts +2 -0
- package/dist/src/hooks/index.js +2 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/useToggleAudioMuteState.d.ts +4 -0
- package/dist/src/hooks/useToggleAudioMuteState.js +62 -0
- package/dist/src/hooks/useToggleAudioMuteState.js.map +1 -0
- package/dist/src/hooks/useToggleVideoMuteState.d.ts +4 -0
- package/dist/src/hooks/useToggleVideoMuteState.js +62 -0
- package/dist/src/hooks/useToggleVideoMuteState.js.map +1 -0
- package/index.ts +2 -0
- package/package.json +5 -5
- package/src/components/CallControls/ToggleAudioButton.tsx +4 -48
- package/src/components/CallControls/ToggleVideoButton.tsx +8 -50
- package/src/components/CallParticipantsList/CallParticipantListingItem.tsx +5 -3
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useToggleAudioMuteState.ts +65 -0
- package/src/hooks/useToggleVideoMuteState.ts +65 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.1-alpha.113](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.112...@stream-io/video-react-sdk-0.0.1-alpha.113) (2023-06-02)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **react-dogfood:** keyboard shortcuts ([#579](https://github.com/GetStream/stream-video-js/issues/579)) ([80770a5](https://github.com/GetStream/stream-video-js/commit/80770a51e588c8f93f46558d6e88f5a98d50d71d))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## [0.0.1-alpha.112](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.111...@stream-io/video-react-sdk-0.0.1-alpha.112) (2023-06-02)
|
|
6
15
|
|
|
7
16
|
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export * from '@stream-io/i18n';
|
|
|
4
4
|
export * from './src/core';
|
|
5
5
|
export * from './src/components';
|
|
6
6
|
export * from './src/types';
|
|
7
|
-
export { useHorizontalScrollPosition, useVerticalScrollPosition, } from './src/hooks';
|
|
7
|
+
export { useHorizontalScrollPosition, useVerticalScrollPosition, useToggleAudioMuteState, useToggleVideoMuteState, } from './src/hooks';
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export * from '@stream-io/i18n';
|
|
|
5
5
|
export * from './src/core';
|
|
6
6
|
export * from './src/components';
|
|
7
7
|
export * from './src/types';
|
|
8
|
-
export { useHorizontalScrollPosition, useVerticalScrollPosition, } from './src/hooks';
|
|
8
|
+
export { useHorizontalScrollPosition, useVerticalScrollPosition, useToggleAudioMuteState, useToggleVideoMuteState, } from './src/hooks';
|
|
9
9
|
// TODO: set valid version
|
|
10
10
|
setSdkInfo({
|
|
11
11
|
type: SfuModels.SdkType.REACT,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEhE,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAEhC,cAAc,YAAY,CAAC;AAE3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEhE,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAEhC,cAAc,YAAY,CAAC;AAE3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,UAAU,CAAC;IACT,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK;IAC7B,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC,CAAC"}
|
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
12
2
|
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
13
|
-
import { Restricted,
|
|
3
|
+
import { Restricted, useI18n, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
14
4
|
import { useMediaDevices } from '../../core';
|
|
15
5
|
import { DeviceSelectorAudioInput } from '../DeviceSettings';
|
|
16
6
|
import { CompositeButton, IconButton } from '../Button';
|
|
17
7
|
import { PermissionNotification } from '../Notification';
|
|
8
|
+
import { useToggleAudioMuteState } from '../../hooks';
|
|
18
9
|
export const ToggleAudioPreviewButton = (props) => {
|
|
19
10
|
const { initialAudioEnabled, toggleInitialAudioMuteState } = useMediaDevices();
|
|
20
11
|
const { t } = useI18n();
|
|
@@ -22,53 +13,11 @@ export const ToggleAudioPreviewButton = (props) => {
|
|
|
22
13
|
return (_jsx(CompositeButton, Object.assign({ Menu: Menu, active: !initialAudioEnabled, caption: caption || t('Mic') }, { children: _jsx(IconButton, { icon: initialAudioEnabled ? 'mic' : 'mic-off', onClick: toggleInitialAudioMuteState }) })));
|
|
23
14
|
};
|
|
24
15
|
export const ToggleAudioPublishingButton = (props) => {
|
|
25
|
-
const { publishAudioStream, stopPublishingAudio, setInitialAudioEnabled } = useMediaDevices();
|
|
26
16
|
const localParticipant = useLocalParticipant();
|
|
27
17
|
const { t } = useI18n();
|
|
28
18
|
const { caption = t('Mic'), Menu = DeviceSelectorAudioInput } = props;
|
|
29
19
|
const isAudioMute = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.publishedTracks.includes(SfuModels.TrackType.AUDIO));
|
|
30
|
-
const
|
|
31
|
-
const hasPermission = useHasPermissions(OwnCapability.SEND_AUDIO);
|
|
32
|
-
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
if (hasPermission) {
|
|
35
|
-
setIsAwaitingApproval(false);
|
|
36
|
-
}
|
|
37
|
-
}, [hasPermission]);
|
|
38
|
-
const handleClick = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
if (!hasPermission &&
|
|
40
|
-
call &&
|
|
41
|
-
call.permissionsContext.canRequest(OwnCapability.SEND_AUDIO)) {
|
|
42
|
-
setIsAwaitingApproval(true);
|
|
43
|
-
yield call
|
|
44
|
-
.requestPermissions({
|
|
45
|
-
permissions: [OwnCapability.SEND_AUDIO],
|
|
46
|
-
})
|
|
47
|
-
.catch((reason) => {
|
|
48
|
-
console.log('RequestPermissions failed', reason);
|
|
49
|
-
});
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (isAudioMute) {
|
|
53
|
-
if (hasPermission) {
|
|
54
|
-
setInitialAudioEnabled(true);
|
|
55
|
-
yield publishAudioStream();
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
console.log('Cannot publish audio stream. Insufficient permissions.');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
stopPublishingAudio();
|
|
63
|
-
}
|
|
64
|
-
}), [
|
|
65
|
-
call,
|
|
66
|
-
hasPermission,
|
|
67
|
-
isAudioMute,
|
|
68
|
-
publishAudioStream,
|
|
69
|
-
setInitialAudioEnabled,
|
|
70
|
-
stopPublishingAudio,
|
|
71
|
-
]);
|
|
20
|
+
const { toggleAudioMuteState: handleClick, isAwaitingApproval } = useToggleAudioMuteState();
|
|
72
21
|
return (_jsx(Restricted, Object.assign({ requiredGrants: [OwnCapability.SEND_AUDIO] }, { children: _jsx(PermissionNotification, Object.assign({ permission: OwnCapability.SEND_AUDIO, isAwaitingApproval: isAwaitingApproval, messageApproved: "You can now speak.", messageAwaitingApproval: "Awaiting for an approval to speak.", messageRevoked: "You can no longer speak." }, { children: _jsx(CompositeButton, Object.assign({ Menu: Menu, active: isAudioMute, caption: caption }, { children: _jsx(IconButton, { icon: isAudioMute ? 'mic-off' : 'mic', onClick: handleClick }) })) })) })));
|
|
73
22
|
};
|
|
74
23
|
//# sourceMappingURL=ToggleAudioButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleAudioButton.js","sourceRoot":"","sources":["../../../../src/components/CallControls/ToggleAudioButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ToggleAudioButton.js","sourceRoot":"","sources":["../../../../src/components/CallControls/ToggleAudioButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,OAAO,EACP,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAOtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAoC,EACpC,EAAE;IACF,MAAM,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,GACxD,eAAe,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,wBAAwB,EAAE,GAAG,KAAK,CAAC;IAEtE,OAAO,CACL,KAAC,eAAe,kBACd,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,mBAAmB,EAC5B,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,gBAE5B,KAAC,UAAU,IACT,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC7C,OAAO,EAAE,2BAA2B,GACpC,IACc,CACnB,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAuC,EACvC,EAAE;IACF,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,wBAAwB,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,WAAW,GAAG,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAA,CAAC;IAEF,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAC7D,uBAAuB,EAAE,CAAC;IAE5B,OAAO,CACL,KAAC,UAAU,kBAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,gBACpD,KAAC,sBAAsB,kBACrB,UAAU,EAAE,aAAa,CAAC,UAAU,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAC,oBAAoB,EACpC,uBAAuB,EAAC,oCAAoC,EAC5D,cAAc,EAAC,0BAA0B,gBAEzC,KAAC,eAAe,kBAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,gBAChE,KAAC,UAAU,IACT,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EACrC,OAAO,EAAE,WAAW,GACpB,IACc,IACK,IACd,CACd,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
-
import {
|
|
12
|
-
import { Restricted, useCall, useHasPermissions, useI18n, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
2
|
+
import { Restricted, useI18n, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
13
3
|
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
14
4
|
import { CompositeButton, IconButton } from '../Button/';
|
|
15
|
-
import {
|
|
5
|
+
import { useMediaDevices } from '../../core';
|
|
16
6
|
import { DeviceSelectorVideo } from '../DeviceSettings';
|
|
17
7
|
import { PermissionNotification } from '../Notification';
|
|
8
|
+
import { useToggleVideoMuteState } from '../../hooks';
|
|
18
9
|
export const ToggleVideoPreviewButton = (props) => {
|
|
19
10
|
const { toggleInitialVideoMuteState, initialVideoState } = useMediaDevices();
|
|
20
11
|
const { t } = useI18n();
|
|
@@ -22,53 +13,11 @@ export const ToggleVideoPreviewButton = (props) => {
|
|
|
22
13
|
return (_jsx(CompositeButton, Object.assign({ Menu: Menu, active: !initialVideoState.enabled, caption: caption }, { children: _jsx(IconButton, { icon: initialVideoState.enabled ? 'camera' : 'camera-off', onClick: toggleInitialVideoMuteState }) })));
|
|
23
14
|
};
|
|
24
15
|
export const ToggleVideoPublishingButton = (props) => {
|
|
25
|
-
const { publishVideoStream, stopPublishingVideo, setInitialVideoState } = useMediaDevices();
|
|
26
16
|
const localParticipant = useLocalParticipant();
|
|
27
17
|
const { t } = useI18n();
|
|
28
|
-
const isVideoMute = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.publishedTracks.includes(SfuModels.TrackType.VIDEO));
|
|
29
18
|
const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
if (hasPermission) {
|
|
35
|
-
setIsAwaitingApproval(false);
|
|
36
|
-
}
|
|
37
|
-
}, [hasPermission]);
|
|
38
|
-
const handleClick = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
if (!hasPermission &&
|
|
40
|
-
call &&
|
|
41
|
-
call.permissionsContext.canRequest(OwnCapability.SEND_VIDEO)) {
|
|
42
|
-
setIsAwaitingApproval(true);
|
|
43
|
-
yield call
|
|
44
|
-
.requestPermissions({
|
|
45
|
-
permissions: [OwnCapability.SEND_VIDEO],
|
|
46
|
-
})
|
|
47
|
-
.catch((reason) => {
|
|
48
|
-
console.log('RequestPermissions failed', reason);
|
|
49
|
-
});
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (isVideoMute) {
|
|
53
|
-
if (hasPermission) {
|
|
54
|
-
setInitialVideoState(DEVICE_STATE.playing);
|
|
55
|
-
yield publishVideoStream();
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
console.log('Cannot publish video. Insufficient permissions.');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
stopPublishingVideo();
|
|
63
|
-
}
|
|
64
|
-
}), [
|
|
65
|
-
call,
|
|
66
|
-
hasPermission,
|
|
67
|
-
isVideoMute,
|
|
68
|
-
publishVideoStream,
|
|
69
|
-
setInitialVideoState,
|
|
70
|
-
stopPublishingVideo,
|
|
71
|
-
]);
|
|
19
|
+
const isVideoMute = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.publishedTracks.includes(SfuModels.TrackType.VIDEO));
|
|
20
|
+
const { toggleVideoMuteState: handleClick, isAwaitingApproval } = useToggleVideoMuteState();
|
|
72
21
|
return (_jsx(Restricted, Object.assign({ requiredGrants: [OwnCapability.SEND_VIDEO] }, { children: _jsx(PermissionNotification, Object.assign({ permission: OwnCapability.SEND_VIDEO, isAwaitingApproval: isAwaitingApproval, messageApproved: "You can now share your video.", messageAwaitingApproval: "Awaiting for an approval to share your video.", messageRevoked: "You can no longer share your video." }, { children: _jsx(CompositeButton, Object.assign({ Menu: Menu, active: isVideoMute, caption: caption }, { children: _jsx(IconButton, { icon: isVideoMute ? 'camera-off' : 'camera', onClick: handleClick }) })) })) })));
|
|
73
22
|
};
|
|
74
23
|
//# sourceMappingURL=ToggleVideoButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleVideoButton.js","sourceRoot":"","sources":["../../../../src/components/CallControls/ToggleVideoButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ToggleVideoButton.js","sourceRoot":"","sources":["../../../../src/components/CallControls/ToggleVideoButton.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,UAAU,EACV,OAAO,EACP,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAOtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAoC,EACpC,EAAE;IACF,MAAM,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7E,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE,GAAG,KAAK,CAAC;IAEnE,OAAO,CACL,KAAC,eAAe,kBACd,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAClC,OAAO,EAAE,OAAO,gBAEhB,KAAC,UAAU,IACT,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EACzD,OAAO,EAAE,2BAA2B,GACpC,IACc,CACnB,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAuC,EACvC,EAAE;IACF,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE,GAAG,KAAK,CAAC;IAEnE,MAAM,WAAW,GAAG,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAA,CAAC;IAEF,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAC7D,uBAAuB,EAAE,CAAC;IAE5B,OAAO,CACL,KAAC,UAAU,kBAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,gBACpD,KAAC,sBAAsB,kBACrB,UAAU,EAAE,aAAa,CAAC,UAAU,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAC,+BAA+B,EAC/C,uBAAuB,EAAC,+CAA+C,EACvE,cAAc,EAAC,qCAAqC,gBAEpD,KAAC,eAAe,kBAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,gBAChE,KAAC,UAAU,IACT,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAC3C,OAAO,EAAE,WAAW,GACpB,IACc,IACK,IACd,CACd,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -80,6 +80,6 @@ export const ParticipantActionsContextMenu = ({ participant, participantViewElem
|
|
|
80
80
|
.catch(console.error)
|
|
81
81
|
.finally(() => setFullscreenModeOn(false));
|
|
82
82
|
};
|
|
83
|
-
return (_jsxs(GenericMenu, { children: [_jsxs(GenericMenuButtonItem, Object.assign({ onClick: toggleParticipantPinnedAt }, { children: [_jsx(Icon, { icon: "pin" }), participant.pinnedAt ? 'Unpin' : 'Pin'] })), _jsx(Restricted, Object.assign({ requiredGrants: [OwnCapability.BLOCK_USERS] }, { children: _jsxs(GenericMenuButtonItem, Object.assign({ onClick: blockUser }, { children: [_jsx(Icon, { icon: "not-allowed" }), "Block"] })) })), _jsxs(Restricted, Object.assign({ requiredGrants: [OwnCapability.MUTE_USERS] }, { children: [_jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.VIDEO), onClick: muteVideo }, { children: [_jsx(Icon, { icon: "camera-off-outline" }), "Turn off video"] })), _jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE), onClick: muteScreenShare }, { children: [_jsx(Icon, { icon: "screen-share-off" }), "Turn off screen share"] })), _jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.AUDIO), onClick: muteAudio }, { children: [_jsx(Icon, { icon: "no-audio" }), "Mute audio"] }))] })), _jsxs(GenericMenuButtonItem, Object.assign({ onClick: toggleFullscreenMode }, { children: [fullscreenModeOn ? 'Leave' : 'Enter', " fullscreen"] })), _jsxs(Restricted, Object.assign({ requiredGrants: [OwnCapability.UPDATE_CALL_PERMISSIONS] }, { children: [_jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SEND_AUDIO) }, { children: "Allow audio" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SEND_VIDEO) }, { children: "Allow video" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SCREENSHARE) }, { children: "Allow screen sharing" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SEND_AUDIO) }, { children: "Disable audio" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SEND_VIDEO) }, { children: "Disable video" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SCREENSHARE) }, { children: "Disable screen sharing" }))] }))] }));
|
|
83
|
+
return (_jsxs(GenericMenu, { children: [_jsxs(GenericMenuButtonItem, Object.assign({ onClick: toggleParticipantPinnedAt }, { children: [_jsx(Icon, { icon: "pin" }), participant.pinnedAt ? 'Unpin' : 'Pin'] })), _jsx(Restricted, Object.assign({ requiredGrants: [OwnCapability.BLOCK_USERS] }, { children: _jsxs(GenericMenuButtonItem, Object.assign({ onClick: blockUser }, { children: [_jsx(Icon, { icon: "not-allowed" }), "Block"] })) })), _jsxs(Restricted, Object.assign({ requiredGrants: [OwnCapability.MUTE_USERS] }, { children: [_jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.VIDEO), onClick: muteVideo }, { children: [_jsx(Icon, { icon: "camera-off-outline" }), "Turn off video"] })), _jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE), onClick: muteScreenShare }, { children: [_jsx(Icon, { icon: "screen-share-off" }), "Turn off screen share"] })), _jsxs(GenericMenuButtonItem, Object.assign({ disabled: !participant.publishedTracks.includes(SfuModels.TrackType.AUDIO), onClick: muteAudio }, { children: [_jsx(Icon, { icon: "no-audio" }), "Mute audio"] }))] })), participantViewElement && (_jsxs(GenericMenuButtonItem, Object.assign({ onClick: toggleFullscreenMode }, { children: [fullscreenModeOn ? 'Leave' : 'Enter', " fullscreen"] }))), _jsxs(Restricted, Object.assign({ requiredGrants: [OwnCapability.UPDATE_CALL_PERMISSIONS] }, { children: [_jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SEND_AUDIO) }, { children: "Allow audio" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SEND_VIDEO) }, { children: "Allow video" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: grantPermission(OwnCapability.SCREENSHARE) }, { children: "Allow screen sharing" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SEND_AUDIO) }, { children: "Disable audio" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SEND_VIDEO) }, { children: "Disable video" })), _jsx(GenericMenuButtonItem, Object.assign({ onClick: revokePermission(OwnCapability.SCREENSHARE) }, { children: "Disable screen sharing" }))] }))] }));
|
|
84
84
|
};
|
|
85
85
|
//# sourceMappingURL=CallParticipantListingItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallParticipantListingItem.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/CallParticipantListingItem.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CallParticipantListingItem.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/CallParticipantListingItem.tsx"],"names":[],"mappings":"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"}
|
package/dist/src/hooks/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
11
|
+
import { useCall, useHasPermissions, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
12
|
+
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
13
|
+
import { useMediaDevices } from '../core';
|
|
14
|
+
export const useToggleAudioMuteState = () => {
|
|
15
|
+
const { publishAudioStream, stopPublishingAudio, setInitialAudioEnabled } = useMediaDevices();
|
|
16
|
+
const localParticipant = useLocalParticipant();
|
|
17
|
+
const call = useCall();
|
|
18
|
+
const hasPermission = useHasPermissions(OwnCapability.SEND_AUDIO);
|
|
19
|
+
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
20
|
+
const isAudioMute = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.publishedTracks.includes(SfuModels.TrackType.AUDIO));
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (hasPermission) {
|
|
23
|
+
setIsAwaitingApproval(false);
|
|
24
|
+
}
|
|
25
|
+
}, [hasPermission]);
|
|
26
|
+
const toggleAudioMuteState = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
+
if (!hasPermission &&
|
|
28
|
+
call &&
|
|
29
|
+
call.permissionsContext.canRequest(OwnCapability.SEND_AUDIO)) {
|
|
30
|
+
setIsAwaitingApproval(true);
|
|
31
|
+
yield call
|
|
32
|
+
.requestPermissions({
|
|
33
|
+
permissions: [OwnCapability.SEND_AUDIO],
|
|
34
|
+
})
|
|
35
|
+
.catch((reason) => {
|
|
36
|
+
console.log('RequestPermissions failed', reason);
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (isAudioMute) {
|
|
41
|
+
if (hasPermission) {
|
|
42
|
+
setInitialAudioEnabled(true);
|
|
43
|
+
yield publishAudioStream();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('Cannot publish audio stream. Insufficient permissions.');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
stopPublishingAudio();
|
|
51
|
+
}
|
|
52
|
+
}), [
|
|
53
|
+
call,
|
|
54
|
+
hasPermission,
|
|
55
|
+
isAudioMute,
|
|
56
|
+
publishAudioStream,
|
|
57
|
+
setInitialAudioEnabled,
|
|
58
|
+
stopPublishingAudio,
|
|
59
|
+
]);
|
|
60
|
+
return { toggleAudioMuteState, isAwaitingApproval };
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=useToggleAudioMuteState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToggleAudioMuteState.js","sourceRoot":"","sources":["../../../src/hooks/useToggleAudioMuteState.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,GACvE,eAAe,EAAE,CAAC;IACpB,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAA,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAC9B;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAS,EAAE;QAClD,IACE,CAAC,aAAa;YACd,IAAI;YACJ,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,EAC5D;YACA,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,IAAI;iBACP,kBAAkB,CAAC;gBAClB,WAAW,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;aACxC,CAAC;iBACD,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACL,OAAO;SACR;QACD,IAAI,WAAW,EAAE;YACf,IAAI,aAAa,EAAE;gBACjB,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,kBAAkB,EAAE,CAAC;aAC5B;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;aACvE;SACF;aAAM;YACL,mBAAmB,EAAE,CAAC;SACvB;IACH,CAAC,CAAA,EAAE;QACD,IAAI;QACJ,aAAa;QACb,WAAW;QACX,kBAAkB;QAClB,sBAAsB;QACtB,mBAAmB;KACpB,CAAC,CAAC;IAEH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;AACtD,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
11
|
+
import { useCall, useHasPermissions, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
12
|
+
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
13
|
+
import { DEVICE_STATE, useMediaDevices } from '../core';
|
|
14
|
+
export const useToggleVideoMuteState = () => {
|
|
15
|
+
const { publishVideoStream, stopPublishingVideo, setInitialVideoState } = useMediaDevices();
|
|
16
|
+
const localParticipant = useLocalParticipant();
|
|
17
|
+
const call = useCall();
|
|
18
|
+
const hasPermission = useHasPermissions(OwnCapability.SEND_VIDEO);
|
|
19
|
+
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
20
|
+
const isVideoMute = !(localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.publishedTracks.includes(SfuModels.TrackType.VIDEO));
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (hasPermission) {
|
|
23
|
+
setIsAwaitingApproval(false);
|
|
24
|
+
}
|
|
25
|
+
}, [hasPermission]);
|
|
26
|
+
const toggleVideoMuteState = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
+
if (!hasPermission &&
|
|
28
|
+
call &&
|
|
29
|
+
call.permissionsContext.canRequest(OwnCapability.SEND_VIDEO)) {
|
|
30
|
+
setIsAwaitingApproval(true);
|
|
31
|
+
yield call
|
|
32
|
+
.requestPermissions({
|
|
33
|
+
permissions: [OwnCapability.SEND_VIDEO],
|
|
34
|
+
})
|
|
35
|
+
.catch((reason) => {
|
|
36
|
+
console.log('RequestPermissions failed', reason);
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (isVideoMute) {
|
|
41
|
+
if (hasPermission) {
|
|
42
|
+
setInitialVideoState(DEVICE_STATE.playing);
|
|
43
|
+
yield publishVideoStream();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('Cannot publish video. Insufficient permissions.');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
stopPublishingVideo();
|
|
51
|
+
}
|
|
52
|
+
}), [
|
|
53
|
+
call,
|
|
54
|
+
hasPermission,
|
|
55
|
+
isVideoMute,
|
|
56
|
+
publishVideoStream,
|
|
57
|
+
setInitialVideoState,
|
|
58
|
+
stopPublishingVideo,
|
|
59
|
+
]);
|
|
60
|
+
return { toggleVideoMuteState, isAwaitingApproval };
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=useToggleVideoMuteState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToggleVideoMuteState.js","sourceRoot":"","sources":["../../../src/hooks/useToggleVideoMuteState.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GACrE,eAAe,EAAE,CAAC;IACpB,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAA,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAC9B;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAS,EAAE;QAClD,IACE,CAAC,aAAa;YACd,IAAI;YACJ,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,EAC5D;YACA,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,IAAI;iBACP,kBAAkB,CAAC;gBAClB,WAAW,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;aACxC,CAAC;iBACD,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACL,OAAO;SACR;QACD,IAAI,WAAW,EAAE;YACf,IAAI,aAAa,EAAE;gBACjB,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM,kBAAkB,EAAE,CAAC;aAC5B;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;aAChE;SACF;aAAM;YACL,mBAAmB,EAAE,CAAC;SACvB;IACH,CAAC,CAAA,EAAE;QACD,IAAI;QACJ,aAAa;QACb,WAAW;QACX,kBAAkB;QAClB,oBAAoB;QACpB,mBAAmB;KACpB,CAAC,CAAC;IAEH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;AACtD,CAAC,CAAC"}
|
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"@floating-ui/react": "^0.22.0",
|
|
26
26
|
"@nivo/core": "^0.80.0",
|
|
27
27
|
"@nivo/line": "^0.80.0",
|
|
28
|
-
"@stream-io/i18n": "^0.0.1-alpha.
|
|
29
|
-
"@stream-io/video-client": "^0.0.2-alpha.
|
|
30
|
-
"@stream-io/video-react-bindings": "^0.0.1-alpha.
|
|
28
|
+
"@stream-io/i18n": "^0.0.1-alpha.95",
|
|
29
|
+
"@stream-io/video-client": "^0.0.2-alpha.24",
|
|
30
|
+
"@stream-io/video-react-bindings": "^0.0.1-alpha.106",
|
|
31
31
|
"clsx": "^1.2.1",
|
|
32
32
|
"rxjs": "~7.8.1"
|
|
33
33
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"react-dom": "^18.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@stream-io/video-styling": "^0.0.1-alpha.
|
|
39
|
+
"@stream-io/video-styling": "^0.0.1-alpha.90",
|
|
40
40
|
"@types/prop-types": "^15.7.5",
|
|
41
41
|
"@types/rimraf": "^3.0.2",
|
|
42
42
|
"prop-types": "^15.8.1",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"typedoc": "^0.24.7",
|
|
48
48
|
"typescript": "^4.9.5"
|
|
49
49
|
},
|
|
50
|
-
"version": "0.0.1-alpha.
|
|
50
|
+
"version": "0.0.1-alpha.113"
|
|
51
51
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { ComponentType
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
2
|
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
3
3
|
import {
|
|
4
4
|
Restricted,
|
|
5
|
-
useCall,
|
|
6
|
-
useHasPermissions,
|
|
7
5
|
useI18n,
|
|
8
6
|
useLocalParticipant,
|
|
9
7
|
} from '@stream-io/video-react-bindings';
|
|
@@ -12,6 +10,7 @@ import { useMediaDevices } from '../../core';
|
|
|
12
10
|
import { DeviceSelectorAudioInput } from '../DeviceSettings';
|
|
13
11
|
import { CompositeButton, IconButton } from '../Button';
|
|
14
12
|
import { PermissionNotification } from '../Notification';
|
|
13
|
+
import { useToggleAudioMuteState } from '../../hooks';
|
|
15
14
|
|
|
16
15
|
export type ToggleAudioPreviewButtonProps = {
|
|
17
16
|
caption?: string;
|
|
@@ -48,8 +47,6 @@ export type ToggleAudioPublishingButtonProps = {
|
|
|
48
47
|
export const ToggleAudioPublishingButton = (
|
|
49
48
|
props: ToggleAudioPublishingButtonProps,
|
|
50
49
|
) => {
|
|
51
|
-
const { publishAudioStream, stopPublishingAudio, setInitialAudioEnabled } =
|
|
52
|
-
useMediaDevices();
|
|
53
50
|
const localParticipant = useLocalParticipant();
|
|
54
51
|
const { t } = useI18n();
|
|
55
52
|
|
|
@@ -59,49 +56,8 @@ export const ToggleAudioPublishingButton = (
|
|
|
59
56
|
SfuModels.TrackType.AUDIO,
|
|
60
57
|
);
|
|
61
58
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
if (hasPermission) {
|
|
67
|
-
setIsAwaitingApproval(false);
|
|
68
|
-
}
|
|
69
|
-
}, [hasPermission]);
|
|
70
|
-
|
|
71
|
-
const handleClick = useCallback(async () => {
|
|
72
|
-
if (
|
|
73
|
-
!hasPermission &&
|
|
74
|
-
call &&
|
|
75
|
-
call.permissionsContext.canRequest(OwnCapability.SEND_AUDIO)
|
|
76
|
-
) {
|
|
77
|
-
setIsAwaitingApproval(true);
|
|
78
|
-
await call
|
|
79
|
-
.requestPermissions({
|
|
80
|
-
permissions: [OwnCapability.SEND_AUDIO],
|
|
81
|
-
})
|
|
82
|
-
.catch((reason) => {
|
|
83
|
-
console.log('RequestPermissions failed', reason);
|
|
84
|
-
});
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
if (isAudioMute) {
|
|
88
|
-
if (hasPermission) {
|
|
89
|
-
setInitialAudioEnabled(true);
|
|
90
|
-
await publishAudioStream();
|
|
91
|
-
} else {
|
|
92
|
-
console.log('Cannot publish audio stream. Insufficient permissions.');
|
|
93
|
-
}
|
|
94
|
-
} else {
|
|
95
|
-
stopPublishingAudio();
|
|
96
|
-
}
|
|
97
|
-
}, [
|
|
98
|
-
call,
|
|
99
|
-
hasPermission,
|
|
100
|
-
isAudioMute,
|
|
101
|
-
publishAudioStream,
|
|
102
|
-
setInitialAudioEnabled,
|
|
103
|
-
stopPublishingAudio,
|
|
104
|
-
]);
|
|
59
|
+
const { toggleAudioMuteState: handleClick, isAwaitingApproval } =
|
|
60
|
+
useToggleAudioMuteState();
|
|
105
61
|
|
|
106
62
|
return (
|
|
107
63
|
<Restricted requiredGrants={[OwnCapability.SEND_AUDIO]}>
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { ComponentType
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
Restricted,
|
|
4
|
-
useCall,
|
|
5
|
-
useHasPermissions,
|
|
6
4
|
useI18n,
|
|
7
5
|
useLocalParticipant,
|
|
8
6
|
} from '@stream-io/video-react-bindings';
|
|
9
7
|
|
|
10
8
|
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
11
9
|
import { CompositeButton, IconButton } from '../Button/';
|
|
12
|
-
import {
|
|
10
|
+
import { useMediaDevices } from '../../core';
|
|
13
11
|
import { DeviceSelectorVideo } from '../DeviceSettings';
|
|
14
12
|
import { PermissionNotification } from '../Notification';
|
|
13
|
+
import { useToggleVideoMuteState } from '../../hooks';
|
|
15
14
|
|
|
16
15
|
export type ToggleVideoPreviewButtonProps = {
|
|
17
16
|
caption?: string;
|
|
@@ -47,58 +46,17 @@ type ToggleVideoPublishingButtonProps = {
|
|
|
47
46
|
export const ToggleVideoPublishingButton = (
|
|
48
47
|
props: ToggleVideoPublishingButtonProps,
|
|
49
48
|
) => {
|
|
50
|
-
const { publishVideoStream, stopPublishingVideo, setInitialVideoState } =
|
|
51
|
-
useMediaDevices();
|
|
52
49
|
const localParticipant = useLocalParticipant();
|
|
53
50
|
const { t } = useI18n();
|
|
51
|
+
|
|
52
|
+
const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;
|
|
53
|
+
|
|
54
54
|
const isVideoMute = !localParticipant?.publishedTracks.includes(
|
|
55
55
|
SfuModels.TrackType.VIDEO,
|
|
56
56
|
);
|
|
57
|
-
const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;
|
|
58
|
-
|
|
59
|
-
const call = useCall();
|
|
60
|
-
const hasPermission = useHasPermissions(OwnCapability.SEND_VIDEO);
|
|
61
|
-
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
if (hasPermission) {
|
|
64
|
-
setIsAwaitingApproval(false);
|
|
65
|
-
}
|
|
66
|
-
}, [hasPermission]);
|
|
67
57
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
!hasPermission &&
|
|
71
|
-
call &&
|
|
72
|
-
call.permissionsContext.canRequest(OwnCapability.SEND_VIDEO)
|
|
73
|
-
) {
|
|
74
|
-
setIsAwaitingApproval(true);
|
|
75
|
-
await call
|
|
76
|
-
.requestPermissions({
|
|
77
|
-
permissions: [OwnCapability.SEND_VIDEO],
|
|
78
|
-
})
|
|
79
|
-
.catch((reason) => {
|
|
80
|
-
console.log('RequestPermissions failed', reason);
|
|
81
|
-
});
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (isVideoMute) {
|
|
85
|
-
if (hasPermission) {
|
|
86
|
-
setInitialVideoState(DEVICE_STATE.playing);
|
|
87
|
-
await publishVideoStream();
|
|
88
|
-
} else {
|
|
89
|
-
console.log('Cannot publish video. Insufficient permissions.');
|
|
90
|
-
}
|
|
91
|
-
} else {
|
|
92
|
-
stopPublishingVideo();
|
|
93
|
-
}
|
|
94
|
-
}, [
|
|
95
|
-
call,
|
|
96
|
-
hasPermission,
|
|
97
|
-
isVideoMute,
|
|
98
|
-
publishVideoStream,
|
|
99
|
-
setInitialVideoState,
|
|
100
|
-
stopPublishingVideo,
|
|
101
|
-
]);
|
|
58
|
+
const { toggleVideoMuteState: handleClick, isAwaitingApproval } =
|
|
59
|
+
useToggleVideoMuteState();
|
|
102
60
|
|
|
103
61
|
return (
|
|
104
62
|
<Restricted requiredGrants={[OwnCapability.SEND_VIDEO]}>
|
|
@@ -232,9 +232,11 @@ export const ParticipantActionsContextMenu = ({
|
|
|
232
232
|
Mute audio
|
|
233
233
|
</GenericMenuButtonItem>
|
|
234
234
|
</Restricted>
|
|
235
|
-
|
|
236
|
-
{
|
|
237
|
-
|
|
235
|
+
{participantViewElement && (
|
|
236
|
+
<GenericMenuButtonItem onClick={toggleFullscreenMode}>
|
|
237
|
+
{fullscreenModeOn ? 'Leave' : 'Enter'} fullscreen
|
|
238
|
+
</GenericMenuButtonItem>
|
|
239
|
+
)}
|
|
238
240
|
<Restricted requiredGrants={[OwnCapability.UPDATE_CALL_PERMISSIONS]}>
|
|
239
241
|
<GenericMenuButtonItem
|
|
240
242
|
onClick={grantPermission(OwnCapability.SEND_AUDIO)}
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
useCall,
|
|
4
|
+
useHasPermissions,
|
|
5
|
+
useLocalParticipant,
|
|
6
|
+
} from '@stream-io/video-react-bindings';
|
|
7
|
+
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
8
|
+
|
|
9
|
+
import { useMediaDevices } from '../core';
|
|
10
|
+
|
|
11
|
+
export const useToggleAudioMuteState = () => {
|
|
12
|
+
const { publishAudioStream, stopPublishingAudio, setInitialAudioEnabled } =
|
|
13
|
+
useMediaDevices();
|
|
14
|
+
const localParticipant = useLocalParticipant();
|
|
15
|
+
const call = useCall();
|
|
16
|
+
const hasPermission = useHasPermissions(OwnCapability.SEND_AUDIO);
|
|
17
|
+
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
18
|
+
|
|
19
|
+
const isAudioMute = !localParticipant?.publishedTracks.includes(
|
|
20
|
+
SfuModels.TrackType.AUDIO,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (hasPermission) {
|
|
25
|
+
setIsAwaitingApproval(false);
|
|
26
|
+
}
|
|
27
|
+
}, [hasPermission]);
|
|
28
|
+
|
|
29
|
+
const toggleAudioMuteState = useCallback(async () => {
|
|
30
|
+
if (
|
|
31
|
+
!hasPermission &&
|
|
32
|
+
call &&
|
|
33
|
+
call.permissionsContext.canRequest(OwnCapability.SEND_AUDIO)
|
|
34
|
+
) {
|
|
35
|
+
setIsAwaitingApproval(true);
|
|
36
|
+
await call
|
|
37
|
+
.requestPermissions({
|
|
38
|
+
permissions: [OwnCapability.SEND_AUDIO],
|
|
39
|
+
})
|
|
40
|
+
.catch((reason) => {
|
|
41
|
+
console.log('RequestPermissions failed', reason);
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (isAudioMute) {
|
|
46
|
+
if (hasPermission) {
|
|
47
|
+
setInitialAudioEnabled(true);
|
|
48
|
+
await publishAudioStream();
|
|
49
|
+
} else {
|
|
50
|
+
console.log('Cannot publish audio stream. Insufficient permissions.');
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
stopPublishingAudio();
|
|
54
|
+
}
|
|
55
|
+
}, [
|
|
56
|
+
call,
|
|
57
|
+
hasPermission,
|
|
58
|
+
isAudioMute,
|
|
59
|
+
publishAudioStream,
|
|
60
|
+
setInitialAudioEnabled,
|
|
61
|
+
stopPublishingAudio,
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
return { toggleAudioMuteState, isAwaitingApproval };
|
|
65
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
useCall,
|
|
4
|
+
useHasPermissions,
|
|
5
|
+
useLocalParticipant,
|
|
6
|
+
} from '@stream-io/video-react-bindings';
|
|
7
|
+
import { OwnCapability, SfuModels } from '@stream-io/video-client';
|
|
8
|
+
|
|
9
|
+
import { DEVICE_STATE, useMediaDevices } from '../core';
|
|
10
|
+
|
|
11
|
+
export const useToggleVideoMuteState = () => {
|
|
12
|
+
const { publishVideoStream, stopPublishingVideo, setInitialVideoState } =
|
|
13
|
+
useMediaDevices();
|
|
14
|
+
const localParticipant = useLocalParticipant();
|
|
15
|
+
const call = useCall();
|
|
16
|
+
const hasPermission = useHasPermissions(OwnCapability.SEND_VIDEO);
|
|
17
|
+
const [isAwaitingApproval, setIsAwaitingApproval] = useState(false);
|
|
18
|
+
|
|
19
|
+
const isVideoMute = !localParticipant?.publishedTracks.includes(
|
|
20
|
+
SfuModels.TrackType.VIDEO,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (hasPermission) {
|
|
25
|
+
setIsAwaitingApproval(false);
|
|
26
|
+
}
|
|
27
|
+
}, [hasPermission]);
|
|
28
|
+
|
|
29
|
+
const toggleVideoMuteState = useCallback(async () => {
|
|
30
|
+
if (
|
|
31
|
+
!hasPermission &&
|
|
32
|
+
call &&
|
|
33
|
+
call.permissionsContext.canRequest(OwnCapability.SEND_VIDEO)
|
|
34
|
+
) {
|
|
35
|
+
setIsAwaitingApproval(true);
|
|
36
|
+
await call
|
|
37
|
+
.requestPermissions({
|
|
38
|
+
permissions: [OwnCapability.SEND_VIDEO],
|
|
39
|
+
})
|
|
40
|
+
.catch((reason) => {
|
|
41
|
+
console.log('RequestPermissions failed', reason);
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (isVideoMute) {
|
|
46
|
+
if (hasPermission) {
|
|
47
|
+
setInitialVideoState(DEVICE_STATE.playing);
|
|
48
|
+
await publishVideoStream();
|
|
49
|
+
} else {
|
|
50
|
+
console.log('Cannot publish video. Insufficient permissions.');
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
stopPublishingVideo();
|
|
54
|
+
}
|
|
55
|
+
}, [
|
|
56
|
+
call,
|
|
57
|
+
hasPermission,
|
|
58
|
+
isVideoMute,
|
|
59
|
+
publishVideoStream,
|
|
60
|
+
setInitialVideoState,
|
|
61
|
+
stopPublishingVideo,
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
return { toggleVideoMuteState, isAwaitingApproval };
|
|
65
|
+
};
|