@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 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,GAC1B,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
+ {"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, useCall, useHasPermissions, useI18n, useLocalParticipant, } from '@stream-io/video-react-bindings';
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 call = useCall();
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":"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"}
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 { useCallback, useEffect, useState } from 'react';
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 { DEVICE_STATE, useMediaDevices } from '../../core';
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 call = useCall();
31
- const hasPermission = useHasPermissions(OwnCapability.SEND_VIDEO);
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":"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"}
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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"}
@@ -1,2 +1,4 @@
1
1
  export * from './useFloatingUIPreset';
2
2
  export * from './useScrollPosition';
3
+ export * from './useToggleAudioMuteState';
4
+ export * from './useToggleVideoMuteState';
@@ -1,3 +1,5 @@
1
1
  export * from './useFloatingUIPreset';
2
2
  export * from './useScrollPosition';
3
+ export * from './useToggleAudioMuteState';
4
+ export * from './useToggleVideoMuteState';
3
5
  //# sourceMappingURL=index.js.map
@@ -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,4 @@
1
+ export declare const useToggleAudioMuteState: () => {
2
+ toggleAudioMuteState: () => Promise<void>;
3
+ isAwaitingApproval: boolean;
4
+ };
@@ -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,4 @@
1
+ export declare const useToggleVideoMuteState: () => {
2
+ toggleVideoMuteState: () => Promise<void>;
3
+ isAwaitingApproval: boolean;
4
+ };
@@ -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
@@ -11,6 +11,8 @@ export * from './src/types';
11
11
  export {
12
12
  useHorizontalScrollPosition,
13
13
  useVerticalScrollPosition,
14
+ useToggleAudioMuteState,
15
+ useToggleVideoMuteState,
14
16
  } from './src/hooks';
15
17
 
16
18
  // TODO: set valid version
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.94",
29
- "@stream-io/video-client": "^0.0.2-alpha.23",
30
- "@stream-io/video-react-bindings": "^0.0.1-alpha.105",
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.89",
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.112"
50
+ "version": "0.0.1-alpha.113"
51
51
  }
@@ -1,9 +1,7 @@
1
- import { ComponentType, useCallback, useEffect, useState } from 'react';
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 call = useCall();
63
- const hasPermission = useHasPermissions(OwnCapability.SEND_AUDIO);
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, useCallback, useEffect, useState } from 'react';
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 { DEVICE_STATE, useMediaDevices } from '../../core';
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 handleClick = useCallback(async () => {
69
- if (
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
- <GenericMenuButtonItem onClick={toggleFullscreenMode}>
236
- {fullscreenModeOn ? 'Leave' : 'Enter'} fullscreen
237
- </GenericMenuButtonItem>
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)}
@@ -1,2 +1,4 @@
1
1
  export * from './useFloatingUIPreset';
2
2
  export * from './useScrollPosition';
3
+ export * from './useToggleAudioMuteState';
4
+ export * from './useToggleVideoMuteState';
@@ -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
+ };