@stream-io/video-react-sdk 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/src/core/components/Audio/Audio.d.ts +4 -4
  3. package/dist/src/core/components/Audio/Audio.js +11 -18
  4. package/dist/src/core/components/Audio/Audio.js.map +1 -1
  5. package/dist/src/core/components/CallLayout/PaginatedGridLayout.js +2 -3
  6. package/dist/src/core/components/CallLayout/PaginatedGridLayout.js.map +1 -1
  7. package/dist/src/core/components/CallLayout/SpeakerLayout.js +2 -2
  8. package/dist/src/core/components/CallLayout/SpeakerLayout.js.map +1 -1
  9. package/dist/src/core/components/ParticipantView/DefaultParticipantViewUI.js +3 -2
  10. package/dist/src/core/components/ParticipantView/DefaultParticipantViewUI.js.map +1 -1
  11. package/dist/src/core/components/ParticipantView/ParticipantView.d.ts +4 -4
  12. package/dist/src/core/components/ParticipantView/ParticipantView.js +6 -8
  13. package/dist/src/core/components/ParticipantView/ParticipantView.js.map +1 -1
  14. package/dist/src/core/components/Video/Video.d.ts +9 -3
  15. package/dist/src/core/components/Video/Video.js +26 -109
  16. package/dist/src/core/components/Video/Video.js.map +1 -1
  17. package/dist/src/core/hooks/useTrackElementVisibility.d.ts +4 -3
  18. package/dist/src/core/hooks/useTrackElementVisibility.js +5 -17
  19. package/dist/src/core/hooks/useTrackElementVisibility.js.map +1 -1
  20. package/dist/version.d.ts +1 -1
  21. package/dist/version.js +1 -1
  22. package/dist/version.js.map +1 -1
  23. package/package.json +3 -3
  24. package/src/core/components/Audio/Audio.tsx +26 -31
  25. package/src/core/components/CallLayout/PaginatedGridLayout.tsx +2 -9
  26. package/src/core/components/CallLayout/SpeakerLayout.tsx +4 -3
  27. package/src/core/components/ParticipantView/DefaultParticipantViewUI.tsx +4 -3
  28. package/src/core/components/ParticipantView/ParticipantView.tsx +9 -14
  29. package/src/core/components/Video/Video.tsx +35 -152
  30. package/src/core/hooks/useTrackElementVisibility.ts +13 -28
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ### [0.3.11](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.10...@stream-io/video-react-sdk-0.3.11) (2023-08-30)
6
+
7
+ ### Dependency Updates
8
+
9
+ * `@stream-io/video-client` updated to version `0.1.0`
10
+ * `@stream-io/video-react-bindings` updated to version `0.2.11`
11
+
12
+ ### Features
13
+
14
+ * **Call:** Dynascale support for Plain-JS SDK ([#914](https://github.com/GetStream/stream-video-js/issues/914)) ([d295fd3](https://github.com/GetStream/stream-video-js/commit/d295fd341bbe325310fc6479f24ef647b013429b))
15
+
16
+ ### [0.3.10](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.9...@stream-io/video-react-sdk-0.3.10) (2023-08-29)
17
+
18
+ ### Dependency Updates
19
+
20
+ * `@stream-io/video-client` updated to version `0.1.0`
21
+ * `@stream-io/video-react-bindings` updated to version `0.2.10`
5
22
  ### [0.3.9](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.8...@stream-io/video-react-sdk-0.3.9) (2023-08-29)
6
23
 
7
24
  ### Dependency Updates
@@ -1,6 +1,6 @@
1
- import { AudioHTMLAttributes, DetailedHTMLProps } from 'react';
1
+ import { ComponentPropsWithoutRef } from 'react';
2
2
  import { StreamVideoParticipant } from '@stream-io/video-client';
3
- export type AudioProps = DetailedHTMLProps<AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement> & Pick<StreamVideoParticipant, 'audioStream'> & {
4
- sinkId?: string;
3
+ export type AudioProps = ComponentPropsWithoutRef<'audio'> & {
4
+ participant: StreamVideoParticipant;
5
5
  };
6
- export declare const Audio: ({ audioStream, sinkId, ...rest }: AudioProps) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const Audio: ({ participant, ...rest }: AudioProps) => import("react/jsx-runtime").JSX.Element;
@@ -10,28 +10,21 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { useEffect, useRef, } from 'react';
14
- // TODO: rename to BaseAudio
13
+ import { useEffect, useState } from 'react';
14
+ import { useCall } from '@stream-io/video-react-bindings';
15
15
  export const Audio = (_a) => {
16
- var { audioStream, sinkId } = _a, rest = __rest(_a, ["audioStream", "sinkId"]);
17
- const audioRef = useRef(null);
16
+ var { participant } = _a, rest = __rest(_a, ["participant"]);
17
+ const call = useCall();
18
+ const [audioElement, setAudioElement] = useState(null);
19
+ const { userId, sessionId } = participant;
18
20
  useEffect(() => {
19
- const $el = audioRef.current;
20
- if (!($el && audioStream))
21
+ if (!call || !audioElement)
21
22
  return;
22
- $el.srcObject = audioStream;
23
+ const cleanup = call.bindAudioElement(audioElement, sessionId);
23
24
  return () => {
24
- $el.srcObject = null;
25
+ cleanup === null || cleanup === void 0 ? void 0 : cleanup();
25
26
  };
26
- }, [audioStream]);
27
- useEffect(() => {
28
- const $el = audioRef.current;
29
- if (!$el || !sinkId)
30
- return;
31
- if ($el.setSinkId) {
32
- $el.setSinkId(sinkId);
33
- }
34
- }, [sinkId]);
35
- return _jsx("audio", Object.assign({ autoPlay: true, ref: audioRef }, rest));
27
+ }, [call, sessionId, audioElement]);
28
+ return (_jsx("audio", Object.assign({ autoPlay: true }, rest, { ref: setAudioElement, "data-user-id": userId, "data-session-id": sessionId })));
36
29
  };
37
30
  //# sourceMappingURL=Audio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Audio.js","sourceRoot":"","sources":["../../../../../src/core/components/Audio/Audio.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAGL,SAAS,EACT,MAAM,GACP,MAAM,OAAO,CAAC;AAWf,4BAA4B;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAA4C,EAAE,EAAE;QAAhD,EAAE,WAAW,EAAE,MAAM,OAAuB,EAAlB,IAAI,cAA9B,yBAAgC,CAAF;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC;YAAE,OAAO;QAElC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO;QAE5B,IAAK,GAAW,CAAC,SAAS,EAAE;YACzB,GAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAChC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,8BAAO,QAAQ,QAAC,GAAG,EAAE,QAAQ,IAAM,IAAI,EAAI,CAAC;AACrD,CAAC,CAAC"}
1
+ {"version":3,"file":"Audio.js","sourceRoot":"","sources":["../../../../../src/core/components/Audio/Audio.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAA4B,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAM1D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAoC,EAAE,EAAE;QAAxC,EAAE,WAAW,OAAuB,EAAlB,IAAI,cAAtB,eAAwB,CAAF;IAC1C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC9C,IAAI,CACL,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE/D,OAAO,GAAG,EAAE;YACV,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,8BACE,QAAQ,UACJ,IAAI,IACR,GAAG,EAAE,eAAe,kBACN,MAAM,qBACH,SAAS,IAC1B,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -17,11 +17,10 @@ const PaginatedGridLayoutGroup = ({ group, VideoPlaceholder, ParticipantViewUI,
17
17
  export const PaginatedGridLayout = ({ groupSize = GROUP_SIZE, excludeLocalParticipant = false, pageArrowsVisible = true, VideoPlaceholder, ParticipantViewUI = DefaultParticipantViewUI, }) => {
18
18
  const [page, setPage] = useState(0);
19
19
  const call = useCall();
20
- const { useParticipants, useRemoteParticipants, useLocalParticipant } = useCallStateHooks();
20
+ const { useParticipants, useRemoteParticipants } = useCallStateHooks();
21
21
  const participants = useParticipants();
22
22
  // used to render audio elements
23
23
  const remoteParticipants = useRemoteParticipants();
24
- const localParticipant = useLocalParticipant();
25
24
  // only used to render video elements
26
25
  const participantGroups = useMemo(() => chunk(excludeLocalParticipant ? remoteParticipants : participants, groupSize), [excludeLocalParticipant, remoteParticipants, participants, groupSize]);
27
26
  const pageCount = participantGroups.length;
@@ -34,6 +33,6 @@ export const PaginatedGridLayout = ({ groupSize = GROUP_SIZE, excludeLocalPartic
34
33
  const selectedGroup = participantGroups[page];
35
34
  if (!call)
36
35
  return null;
37
- return (_jsxs(_Fragment, { children: [remoteParticipants.map((participant) => (_jsx(Audio, { muted: false, sinkId: localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.audioOutputDeviceId, audioStream: participant.audioStream }, participant.sessionId))), _jsx("div", Object.assign({ className: "str-video__paginated-grid-layout__wrapper" }, { children: _jsxs("div", Object.assign({ className: "str-video__paginated-grid-layout" }, { children: [pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { icon: "caret-left", disabled: page === 0, onClick: () => setPage((currentPage) => Math.max(0, currentPage - 1)) })), selectedGroup && (_jsx(PaginatedGridLayoutGroup, { group: participantGroups[page], VideoPlaceholder: VideoPlaceholder, ParticipantViewUI: ParticipantViewUI })), pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { disabled: page === pageCount - 1, icon: "caret-right", onClick: () => setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1)) }))] })) }))] }));
36
+ return (_jsxs(_Fragment, { children: [remoteParticipants.map((participant) => (_jsx(Audio, { participant: participant }, participant.sessionId))), _jsx("div", Object.assign({ className: "str-video__paginated-grid-layout__wrapper" }, { children: _jsxs("div", Object.assign({ className: "str-video__paginated-grid-layout" }, { children: [pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { icon: "caret-left", disabled: page === 0, onClick: () => setPage((currentPage) => Math.max(0, currentPage - 1)) })), selectedGroup && (_jsx(PaginatedGridLayoutGroup, { group: participantGroups[page], VideoPlaceholder: VideoPlaceholder, ParticipantViewUI: ParticipantViewUI })), pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { disabled: page === pageCount - 1, icon: "caret-right", onClick: () => setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1)) }))] })) }))] }));
38
37
  };
39
38
  //# sourceMappingURL=PaginatedGridLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaginatedGridLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/PaginatedGridLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PaginatedGridLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/PaginatedGridLayout.tsx"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export const SpeakerLayout = ({ ParticipantViewUIBar = DefaultParticipantViewUIB
17
17
  useEffect(() => {
18
18
  if (!scrollWrapper || !call)
19
19
  return;
20
- const cleanup = call.viewportTracker.setViewport(scrollWrapper);
20
+ const cleanup = call.setViewport(scrollWrapper);
21
21
  return () => cleanup();
22
22
  }, [scrollWrapper, call]);
23
23
  useEffect(() => {
@@ -40,7 +40,7 @@ export const SpeakerLayout = ({ ParticipantViewUIBar = DefaultParticipantViewUIB
40
40
  return null;
41
41
  const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);
42
42
  return (_jsx("div", Object.assign({ className: "str-video__speaker-layout__wrapper" }, { children: _jsxs("div", Object.assign({ className: clsx('str-video__speaker-layout', participantsBarPosition &&
43
- `str-video__speaker-layout--variant-${participantsBarPosition}`) }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__spotlight" }, { children: participantInSpotlight && (_jsx(ParticipantView, { participant: participantInSpotlight, muteAudio: isSpeakerScreenSharing, videoMode: isSpeakerScreenSharing ? 'screen' : 'video', ParticipantViewUI: ParticipantViewUISpotlight, VideoPlaceholder: VideoPlaceholder })) })), otherParticipants.length > 0 && participantsBarPosition && (_jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-buttons-wrapper" }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-wrapper", ref: setScrollWrapper }, { children: _jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar" }, { children: [isSpeakerScreenSharing && (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participantInSpotlight, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participantInSpotlight.sessionId)), otherParticipants.map((participant) => (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participant, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participant.sessionId)))] })) })), (participantsBarPosition === 'left' ||
43
+ `str-video__speaker-layout--variant-${participantsBarPosition}`) }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__spotlight" }, { children: participantInSpotlight && (_jsx(ParticipantView, { participant: participantInSpotlight, muteAudio: isSpeakerScreenSharing, trackType: isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack', ParticipantViewUI: ParticipantViewUISpotlight, VideoPlaceholder: VideoPlaceholder })) })), otherParticipants.length > 0 && participantsBarPosition && (_jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-buttons-wrapper" }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-wrapper", ref: setScrollWrapper }, { children: _jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar" }, { children: [isSpeakerScreenSharing && (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participantInSpotlight, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participantInSpotlight.sessionId)), otherParticipants.map((participant) => (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participant, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participant.sessionId)))] })) })), (participantsBarPosition === 'left' ||
44
44
  participantsBarPosition === 'right') && (_jsx(VerticalScrollButtons, { scrollWrapper: scrollWrapper })), (participantsBarPosition === 'top' ||
45
45
  participantsBarPosition === 'bottom') && (_jsx(HorizontalScrollButtons, { scrollWrapper: scrollWrapper }))] })))] })) })));
46
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SpeakerLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/SpeakerLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpeakerLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/SpeakerLayout.tsx"],"names":[],"mappings":"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"}
@@ -20,13 +20,14 @@ export const DefaultScreenShareOverlay = () => {
20
20
  return (_jsxs("div", Object.assign({ className: "str-video__screen-share-overlay" }, { children: [_jsx(Icon, { icon: "screen-share-off" }), _jsx("span", Object.assign({ className: "str-video__screen-share-overlay__title" }, { children: "You are presenting your screen" })), _jsxs("button", Object.assign({ onClick: stopScreenShare, className: "str-video__screen-share-overlay__button" }, { children: [_jsx(Icon, { icon: "close" }), " Stop Screen Sharing"] }))] })));
21
21
  };
22
22
  export const DefaultParticipantViewUI = ({ indicatorsVisible = true, menuPlacement = 'bottom-end', showMenuButton = true, }) => {
23
- const { participant, participantViewElement, videoMode, videoElement } = useParticipantViewContext();
23
+ const { participant, participantViewElement, trackType, videoElement } = useParticipantViewContext();
24
24
  const { publishedTracks } = participant;
25
25
  const hasScreenShare = publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE);
26
26
  if (participant.isLocalParticipant &&
27
27
  hasScreenShare &&
28
- videoMode === 'screen')
28
+ trackType === 'screenShareTrack') {
29
29
  return (_jsxs(_Fragment, { children: [_jsx(DefaultScreenShareOverlay, {}), _jsx(ParticipantDetails, { indicatorsVisible: indicatorsVisible })] }));
30
+ }
30
31
  return (_jsxs(_Fragment, { children: [showMenuButton && (_jsx(MenuToggle, Object.assign({ strategy: "fixed", placement: menuPlacement, ToggleButton: ToggleButton }, { children: _jsx(ParticipantActionsContextMenu, { participantViewElement: participantViewElement, participant: participant, videoElement: videoElement }) }))), _jsx(Reaction, { participant: participant }), _jsx(ParticipantDetails, { indicatorsVisible: indicatorsVisible })] }));
31
32
  };
32
33
  export const ParticipantDetails = ({ indicatorsVisible = true, }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultParticipantViewUI.js","sourceRoot":"","sources":["../../../../../src/core/components/ParticipantView/DefaultParticipantViewUI.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DefaultParticipantViewUI.js","sourceRoot":"","sources":["../../../../../src/core/components/ParticipantView/DefaultParticipantViewUI.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, ReactElement } from 'react';
2
- import { StreamVideoLocalParticipant, StreamVideoParticipant } from '@stream-io/video-client';
2
+ import { StreamVideoLocalParticipant, StreamVideoParticipant, VideoTrackType } from '@stream-io/video-client';
3
3
  import { VideoProps } from '../Video';
4
- export type ParticipantViewContextValue = Required<Pick<ParticipantViewProps, 'participant' | 'videoMode'>> & {
4
+ export type ParticipantViewContextValue = Required<Pick<ParticipantViewProps, 'participant' | 'trackType'>> & {
5
5
  participantViewElement: HTMLDivElement | null;
6
6
  videoElement: HTMLVideoElement | null;
7
7
  videoPlaceholderElement: HTMLDivElement | null;
@@ -21,7 +21,7 @@ export type ParticipantViewProps = {
21
21
  /**
22
22
  * The kind of video stream to play for the given participant. The default value is `video`. You can use `none` if you're building an audio-only call.
23
23
  */
24
- videoMode?: 'video' | 'screen' | 'none';
24
+ trackType?: VideoTrackType | 'none';
25
25
  /**
26
26
  * This prop is only useful for advanced use-cases (for example building your own paginated layout). When set to `true` it will mute the give participant's audio stream on the client side. The local participant is always muted.
27
27
  */
@@ -52,7 +52,7 @@ export declare const ParticipantView: import("react").ForwardRefExoticComponent<
52
52
  /**
53
53
  * The kind of video stream to play for the given participant. The default value is `video`. You can use `none` if you're building an audio-only call.
54
54
  */
55
- videoMode?: "video" | "none" | "screen" | undefined;
55
+ trackType?: "none" | VideoTrackType | undefined;
56
56
  /**
57
57
  * This prop is only useful for advanced use-cases (for example building your own paginated layout). When set to `true` it will mute the give participant's audio stream on the client side. The local participant is always muted.
58
58
  */
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { createContext, forwardRef, useContext, useMemo, useState, } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { SfuModels, } from '@stream-io/video-client';
5
- import { useCallStateHooks } from '@stream-io/video-react-bindings';
6
5
  import { Audio } from '../Audio';
7
6
  import { Video } from '../Video';
8
7
  import { useTrackElementVisibility } from '../../hooks';
@@ -10,10 +9,8 @@ import { DefaultParticipantViewUI } from './DefaultParticipantViewUI';
10
9
  import { applyElementToRef, isComponentType } from '../../../utilities';
11
10
  const ParticipantViewContext = createContext(undefined);
12
11
  export const useParticipantViewContext = () => useContext(ParticipantViewContext);
13
- export const ParticipantView = forwardRef(({ participant, videoMode = 'video', muteAudio, refs: { setVideoElement, setVideoPlaceholderElement } = {}, className, VideoPlaceholder, ParticipantViewUI = DefaultParticipantViewUI, }, ref) => {
14
- const { audioStream, isLocalParticipant, isSpeaking, isDominantSpeaker, publishedTracks, sessionId, } = participant;
15
- const { useLocalParticipant } = useCallStateHooks();
16
- const localParticipant = useLocalParticipant();
12
+ export const ParticipantView = forwardRef(({ participant, trackType = 'videoTrack', muteAudio, refs: { setVideoElement, setVideoPlaceholderElement } = {}, className, VideoPlaceholder, ParticipantViewUI = DefaultParticipantViewUI, }, ref) => {
13
+ const { isLocalParticipant, isSpeaking, isDominantSpeaker, publishedTracks, sessionId, } = participant;
17
14
  const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);
18
15
  const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);
19
16
  const [trackedElement, setTrackedElement] = useState(null);
@@ -23,19 +20,20 @@ export const ParticipantView = forwardRef(({ participant, videoMode = 'video', m
23
20
  useTrackElementVisibility({
24
21
  sessionId,
25
22
  trackedElement,
23
+ trackType,
26
24
  });
27
25
  const participantViewContextValue = useMemo(() => ({
28
26
  participant,
29
27
  participantViewElement: trackedElement,
30
28
  videoElement: contextVideoElement,
31
29
  videoPlaceholderElement: contextVideoPlaceholderElement,
32
- videoMode,
30
+ trackType,
33
31
  }), [
34
32
  contextVideoElement,
35
33
  contextVideoPlaceholderElement,
36
34
  participant,
37
35
  trackedElement,
38
- videoMode,
36
+ trackType,
39
37
  ]);
40
38
  const videoRefs = useMemo(() => ({
41
39
  setVideoElement: (element) => {
@@ -50,6 +48,6 @@ export const ParticipantView = forwardRef(({ participant, videoMode = 'video', m
50
48
  return (_jsx("div", Object.assign({ ref: (element) => {
51
49
  applyElementToRef(ref, element);
52
50
  setTrackedElement(element);
53
- }, className: clsx('str-video__participant-view', isDominantSpeaker && 'str-video__participant-view--dominant-speaker', isSpeaking && 'str-video__participant-view--speaking', !hasVideo && 'str-video__participant-view--no-video', !hasAudio && 'str-video__participant-view--no-audio', className) }, { children: _jsxs(ParticipantViewContext.Provider, Object.assign({ value: participantViewContextValue }, { children: [!isLocalParticipant && !muteAudio && (_jsx(Audio, { sinkId: localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.audioOutputDeviceId, audioStream: audioStream })), _jsx(Video, { VideoPlaceholder: VideoPlaceholder, participant: participant, kind: videoMode, refs: videoRefs, autoPlay: true }), isComponentType(ParticipantViewUI) ? (_jsx(ParticipantViewUI, {})) : (ParticipantViewUI)] })) })));
51
+ }, className: clsx('str-video__participant-view', isDominantSpeaker && 'str-video__participant-view--dominant-speaker', isSpeaking && 'str-video__participant-view--speaking', !hasVideo && 'str-video__participant-view--no-video', !hasAudio && 'str-video__participant-view--no-audio', className) }, { children: _jsxs(ParticipantViewContext.Provider, Object.assign({ value: participantViewContextValue }, { children: [!isLocalParticipant && !muteAudio && (_jsx(Audio, { participant: participant })), _jsx(Video, { VideoPlaceholder: VideoPlaceholder, participant: participant, trackType: trackType, refs: videoRefs, autoPlay: true }), isComponentType(ParticipantViewUI) ? (_jsx(ParticipantViewUI, {})) : (ParticipantViewUI)] })) })));
54
52
  });
55
53
  //# sourceMappingURL=ParticipantView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParticipantView.js","sourceRoot":"","sources":["../../../../../src/core/components/ParticipantView/ParticipantView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ParticipantView.js","sourceRoot":"","sources":["../../../../../src/core/components/ParticipantView/ParticipantView.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import { ComponentPropsWithoutRef, ComponentType } from 'react';
2
- import { StreamVideoParticipant } from '@stream-io/video-client';
2
+ import { StreamVideoParticipant, VideoTrackType } from '@stream-io/video-client';
3
3
  import { VideoPlaceholderProps } from './DefaultVideoPlaceholder';
4
4
  export type VideoProps = ComponentPropsWithoutRef<'video'> & {
5
- kind: 'video' | 'screen' | 'none';
5
+ /**
6
+ * The track type to display.
7
+ */
8
+ trackType: VideoTrackType | 'none';
9
+ /**
10
+ * The participant represented by this video element.
11
+ */
6
12
  participant: StreamVideoParticipant;
7
13
  /**
8
14
  * Override the default UI that's visible when a participant turned off their video.
@@ -13,4 +19,4 @@ export type VideoProps = ComponentPropsWithoutRef<'video'> & {
13
19
  setVideoPlaceholderElement?: (element: HTMLDivElement | null) => void;
14
20
  };
15
21
  };
16
- export declare const Video: ({ kind, participant, className, VideoPlaceholder, refs, ...rest }: VideoProps) => import("react/jsx-runtime").JSX.Element | null;
22
+ export declare const Video: ({ trackType, participant, className, VideoPlaceholder, refs, ...rest }: VideoProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -10,147 +10,64 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
- import { useCallback, useEffect, useRef, useState, } from 'react';
14
- import { DebounceType, SfuModels, VisibilityState, } from '@stream-io/video-client';
13
+ import { useEffect, useState, } from 'react';
14
+ import { SfuModels, VisibilityState, } from '@stream-io/video-client';
15
15
  import clsx from 'clsx';
16
16
  import { DefaultVideoPlaceholder, } from './DefaultVideoPlaceholder';
17
- import { BaseVideo } from './BaseVideo';
18
17
  import { useCall } from '@stream-io/video-react-bindings';
19
18
  export const Video = (_a) => {
20
- var { kind, participant, className, VideoPlaceholder = DefaultVideoPlaceholder, refs } = _a, rest = __rest(_a, ["kind", "participant", "className", "VideoPlaceholder", "refs"]);
19
+ var { trackType, participant, className, VideoPlaceholder = DefaultVideoPlaceholder, refs } = _a, rest = __rest(_a, ["trackType", "participant", "className", "VideoPlaceholder", "refs"]);
21
20
  const { sessionId, videoStream, screenShareStream, publishedTracks, viewportVisibilityState, isLocalParticipant, userId, } = participant;
22
21
  const call = useCall();
23
22
  const [videoElement, setVideoElement] = useState(null);
24
- // const [videoTrackMuted, setVideoTrackMuted] = useState(false);
25
23
  const [videoPlaying, setVideoPlaying] = useState(false);
26
- const viewportVisibilityRef = useRef(viewportVisibilityState);
27
- const stream = kind === 'none'
24
+ const [isWideMode, setIsWideMode] = useState(true);
25
+ const stream = trackType === 'none'
28
26
  ? undefined
29
- : kind === 'video'
27
+ : trackType === 'videoTrack'
30
28
  ? videoStream
31
29
  : screenShareStream;
32
- // TODO: handle track muting
33
- // useEffect(() => {
34
- // if (!stream) return;
35
- // const [track] = stream.getVideoTracks();
36
- // setVideoTrackMuted(track.muted);
37
- // const handleMute = () => {
38
- // setVideoTrackMuted(true);
39
- // };
40
- // const handleUnmute = () => {
41
- // setVideoTrackMuted(false);
42
- // };
43
- // track.addEventListener('mute', handleMute);
44
- // track.addEventListener('unmute', handleUnmute);
45
- // return () => {
46
- // track.removeEventListener('mute', handleMute);
47
- // track.removeEventListener('unmute', handleUnmute);
48
- // };
49
- // }, [stream]);
50
- const isPublishingTrack = kind === 'none'
30
+ const isPublishingTrack = trackType === 'none'
51
31
  ? false
52
- : publishedTracks.includes(kind === 'video'
32
+ : publishedTracks.includes(trackType === 'videoTrack'
53
33
  ? SfuModels.TrackType.VIDEO
54
34
  : SfuModels.TrackType.SCREEN_SHARE);
55
- const displayPlaceholder = !isPublishingTrack ||
56
- (viewportVisibilityState === VisibilityState.INVISIBLE &&
57
- !screenShareStream) ||
58
- !videoPlaying;
59
- const lastDimensionRef = useRef();
60
- const updateSubscription = useCallback((dimension, type = DebounceType.SLOW) => {
61
- if (!call || kind === 'none')
62
- return;
63
- call.updateSubscriptionsPartial(kind, {
64
- [sessionId]: {
65
- dimension,
66
- },
67
- }, type);
68
- }, [call, kind, sessionId]);
69
- // handle visibility subscription updates
70
- useEffect(() => {
71
- viewportVisibilityRef.current = viewportVisibilityState;
72
- if (!videoElement || !isPublishingTrack || isLocalParticipant)
73
- return;
74
- const isInvisibleVVS = viewportVisibilityState === VisibilityState.INVISIBLE;
75
- updateSubscription(isInvisibleVVS
76
- ? undefined
77
- : {
78
- height: videoElement.clientHeight,
79
- width: videoElement.clientWidth,
80
- }, DebounceType.MEDIUM);
81
- }, [
82
- updateSubscription,
83
- viewportVisibilityState,
84
- videoElement,
85
- isPublishingTrack,
86
- isLocalParticipant,
87
- ]);
88
- // handle resize subscription updates
89
- useEffect(() => {
90
- if (!videoElement || !isPublishingTrack || isLocalParticipant)
91
- return;
92
- const resizeObserver = new ResizeObserver(() => {
93
- const currentDimensions = `${videoElement.clientWidth},${videoElement.clientHeight}`;
94
- // skip initial trigger of the observer
95
- if (!lastDimensionRef.current) {
96
- return (lastDimensionRef.current = currentDimensions);
97
- }
98
- if (lastDimensionRef.current === currentDimensions ||
99
- viewportVisibilityRef.current === VisibilityState.INVISIBLE)
100
- return;
101
- updateSubscription({
102
- height: videoElement.clientHeight,
103
- width: videoElement.clientWidth,
104
- }, DebounceType.SLOW);
105
- lastDimensionRef.current = currentDimensions;
106
- });
107
- resizeObserver.observe(videoElement);
108
- return () => {
109
- resizeObserver.disconnect();
110
- };
111
- }, [
112
- updateSubscription,
113
- videoElement,
114
- viewportVisibilityState,
115
- isPublishingTrack,
116
- isLocalParticipant,
117
- ]);
118
- // handle generic subscription updates
35
+ const isInvisible = trackType === 'none' ||
36
+ (viewportVisibilityState === null || viewportVisibilityState === void 0 ? void 0 : viewportVisibilityState[trackType]) === VisibilityState.INVISIBLE;
37
+ const displayPlaceholder = !isPublishingTrack || isInvisible || !videoPlaying;
119
38
  useEffect(() => {
120
- if (!isPublishingTrack || !videoElement || isLocalParticipant)
39
+ if (!call || !videoElement || trackType === 'none')
121
40
  return;
122
- updateSubscription({
123
- height: videoElement.clientHeight,
124
- width: videoElement.clientWidth,
125
- }, DebounceType.FAST);
41
+ const cleanup = call.bindVideoElement(videoElement, sessionId, trackType);
126
42
  return () => {
127
- updateSubscription(undefined, DebounceType.FAST);
43
+ cleanup === null || cleanup === void 0 ? void 0 : cleanup();
128
44
  };
129
- }, [updateSubscription, videoElement, isPublishingTrack, isLocalParticipant]);
130
- const [isWideMode, setIsWideMode] = useState(true);
45
+ }, [call, trackType, sessionId, videoElement]);
131
46
  useEffect(() => {
132
47
  if (!stream || !videoElement)
133
48
  return;
134
- setVideoPlaying(!videoElement.paused);
135
- const calculateVideoRatio = () => {
136
- setVideoPlaying(true);
49
+ const handlePlayPause = () => {
50
+ setVideoPlaying(!videoElement.paused);
137
51
  const [track] = stream.getVideoTracks();
138
52
  if (!track)
139
53
  return;
54
+ // TODO: find out why track dimensions aren't coming in
140
55
  const { width = 0, height = 0 } = track.getSettings();
141
- setIsWideMode(width > height);
56
+ setIsWideMode(width >= height);
142
57
  };
143
- videoElement.addEventListener('play', calculateVideoRatio);
58
+ videoElement.addEventListener('play', handlePlayPause);
59
+ videoElement.addEventListener('pause', handlePlayPause);
144
60
  return () => {
145
- videoElement.removeEventListener('play', calculateVideoRatio);
61
+ videoElement.removeEventListener('play', handlePlayPause);
62
+ videoElement.removeEventListener('pause', handlePlayPause);
146
63
  };
147
64
  }, [stream, videoElement]);
148
65
  if (!call)
149
66
  return null;
150
- return (_jsxs(_Fragment, { children: [_jsx(BaseVideo, Object.assign({}, rest, { stream: stream, className: clsx(className, 'str-video__video', {
67
+ return (_jsxs(_Fragment, { children: [_jsx("video", Object.assign({}, rest, { className: clsx(className, 'str-video__video', {
151
68
  'str-video__video--tall': !isWideMode,
152
- 'str-video__video--mirror': isLocalParticipant && kind === 'video',
153
- 'str-video__video--screen-share': kind === 'screen',
69
+ 'str-video__video--mirror': isLocalParticipant && trackType === 'videoTrack',
70
+ 'str-video__video--screen-share': trackType === 'screenShareTrack',
154
71
  }), "data-user-id": userId, "data-session-id": sessionId, ref: (element) => {
155
72
  var _a;
156
73
  setVideoElement(element);
@@ -1 +1 @@
1
- {"version":3,"file":"Video.js","sourceRoot":"","sources":["../../../../../src/core/components/Video/Video.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAGL,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EACL,YAAY,EACZ,SAAS,EAET,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAe1D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAOT,EAAE,EAAE;QAPK,EACpB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,gBAAgB,GAAG,uBAAuB,EAC1C,IAAI,OAEO,EADR,IAAI,cANa,gEAOrB,CADQ;IAEP,MAAM,EACJ,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,MAAM,GACP,GAAG,WAAW,CAAC;IAEhB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC9C,IAAI,CACL,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,qBAAqB,GAAG,MAAM,CAClC,uBAAuB,CACxB,CAAC;IAEF,MAAM,MAAM,GACV,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,KAAK,OAAO;YAClB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,iBAAiB,CAAC;IAExB,4BAA4B;IAC5B,oBAAoB;IACpB,yBAAyB;IAEzB,6CAA6C;IAC7C,qCAAqC;IAErC,+BAA+B;IAC/B,gCAAgC;IAChC,OAAO;IACP,iCAAiC;IACjC,iCAAiC;IACjC,OAAO;IAEP,gDAAgD;IAChD,oDAAoD;IAEpD,mBAAmB;IACnB,qDAAqD;IACrD,yDAAyD;IACzD,OAAO;IACP,gBAAgB;IAEhB,MAAM,iBAAiB,GACrB,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,eAAe,CAAC,QAAQ,CACtB,IAAI,KAAK,OAAO;YACd,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK;YAC3B,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CACrC,CAAC;IAER,MAAM,kBAAkB,GACtB,CAAC,iBAAiB;QAClB,CAAC,uBAAuB,KAAK,eAAe,CAAC,SAAS;YACpD,CAAC,iBAAiB,CAAC;QACrB,CAAC,YAAY,CAAC;IAEhB,MAAM,gBAAgB,GAAG,MAAM,EAAsB,CAAC;IACtD,MAAM,kBAAkB,GAAG,WAAW,CACpC,CACE,SAAoC,EACpC,OAAqB,YAAY,CAAC,IAAI,EACtC,EAAE;QACF,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO;QAErC,IAAI,CAAC,0BAA0B,CAC7B,IAAI,EACJ;YACE,CAAC,SAAS,CAAC,EAAE;gBACX,SAAS;aACV;SACF,EACD,IAAI,CACL,CAAC;IACJ,CAAC,EACD,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CACxB,CAAC;IAEF,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,OAAO,GAAG,uBAAuB,CAAC;QAExD,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,IAAI,kBAAkB;YAAE,OAAO;QAEtE,MAAM,cAAc,GAClB,uBAAuB,KAAK,eAAe,CAAC,SAAS,CAAC;QAExD,kBAAkB,CAChB,cAAc;YACZ,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,MAAM,EAAE,YAAY,CAAC,YAAY;gBACjC,KAAK,EAAE,YAAY,CAAC,WAAW;aAChC,EACL,YAAY,CAAC,MAAM,CACpB,CAAC;IACJ,CAAC,EAAE;QACD,kBAAkB;QAClB,uBAAuB;QACvB,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;KACnB,CAAC,CAAC;IAEH,qCAAqC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,IAAI,kBAAkB;YAAE,OAAO;QAEtE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YAC7C,MAAM,iBAAiB,GAAG,GAAG,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAErF,uCAAuC;YACvC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBAC7B,OAAO,CAAC,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC;aACvD;YAED,IACE,gBAAgB,CAAC,OAAO,KAAK,iBAAiB;gBAC9C,qBAAqB,CAAC,OAAO,KAAK,eAAe,CAAC,SAAS;gBAE3D,OAAO;YAET,kBAAkB,CAChB;gBACE,MAAM,EAAE,YAAY,CAAC,YAAY;gBACjC,KAAK,EAAE,YAAY,CAAC,WAAW;aAChC,EACD,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAErC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,kBAAkB;QAClB,YAAY;QACZ,uBAAuB;QACvB,iBAAiB;QACjB,kBAAkB;KACnB,CAAC,CAAC;IAEH,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,IAAI,CAAC,YAAY,IAAI,kBAAkB;YAAE,OAAO;QAEtE,kBAAkB,CAChB;YACE,MAAM,EAAE,YAAY,CAAC,YAAY;YACjC,KAAK,EAAE,YAAY,CAAC,WAAW;SAChC,EACD,YAAY,CAAC,IAAI,CAClB,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE9E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;YAAE,OAAO;QAErC,eAAe,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,GAAG,EAAE;YAC/B,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACtD,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC3D,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,OAAO,CACL,8BACE,KAAC,SAAS,oBACJ,IAAI,IACR,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE;oBAC7C,wBAAwB,EAAE,CAAC,UAAU;oBACrC,0BAA0B,EAAE,kBAAkB,IAAI,IAAI,KAAK,OAAO;oBAClE,gCAAgC,EAAE,IAAI,KAAK,QAAQ;iBACpD,CAAC,kBACY,MAAM,qBACH,SAAS,EAC1B,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;;oBACf,eAAe,CAAC,OAAO,CAAC,CAAC;oBACzB,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,qDAAG,OAAO,CAAC,CAAC;gBACnC,CAAC,IACD,EACD,kBAAkB,IAAI,CACrB,KAAC,gBAAgB,IACf,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAC/B,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,0BAA0B,GACrC,CACH,IACA,CACJ,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Video.js","sourceRoot":"","sources":["../../../../../src/core/components/Video/Video.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { ViewportTracker } from '@stream-io/video-client';
2
- export declare const useTrackElementVisibility: <T extends HTMLElement>({ trackedElement, viewportTracker: propsViewportTracker, sessionId, }: {
1
+ import { DynascaleManager, VideoTrackType } from '@stream-io/video-client';
2
+ export declare const useTrackElementVisibility: <T extends HTMLElement>({ trackedElement, dynascaleManager: propsDynascaleManager, sessionId, trackType, }: {
3
3
  trackedElement: T | null;
4
4
  sessionId: string;
5
- viewportTracker?: ViewportTracker | undefined;
5
+ dynascaleManager?: DynascaleManager | undefined;
6
+ trackType: VideoTrackType | 'none';
6
7
  }) => void;
@@ -1,27 +1,15 @@
1
1
  import { useEffect } from 'react';
2
- import { VisibilityState } from '@stream-io/video-client';
3
2
  import { useCall } from '@stream-io/video-react-bindings';
4
- export const useTrackElementVisibility = ({ trackedElement, viewportTracker: propsViewportTracker, sessionId, }) => {
3
+ export const useTrackElementVisibility = ({ trackedElement, dynascaleManager: propsDynascaleManager, sessionId, trackType, }) => {
5
4
  const call = useCall();
6
- const viewportTracker = propsViewportTracker !== null && propsViewportTracker !== void 0 ? propsViewportTracker : call === null || call === void 0 ? void 0 : call.viewportTracker;
5
+ const manager = propsDynascaleManager !== null && propsDynascaleManager !== void 0 ? propsDynascaleManager : call === null || call === void 0 ? void 0 : call.dynascaleManager;
7
6
  useEffect(() => {
8
- if (!trackedElement || !viewportTracker || !call)
7
+ if (!trackedElement || !manager || !call || trackType === 'none')
9
8
  return;
10
- const unobserve = viewportTracker.observe(trackedElement, (entry) => {
11
- call.state.updateParticipant(sessionId, (p) => (Object.assign(Object.assign({}, p), { viewportVisibilityState:
12
- // observer triggers when element is "moved" to be a fullscreen element
13
- // keep it VISIBLE if that happens to prevent fullscreen with placeholder
14
- entry.isIntersecting || document.fullscreenElement === trackedElement
15
- ? VisibilityState.VISIBLE
16
- : VisibilityState.INVISIBLE })));
17
- });
9
+ const unobserve = manager.trackElementVisibility(trackedElement, sessionId, trackType);
18
10
  return () => {
19
11
  unobserve();
20
- // reset visibility state to UNKNOWN upon cleanup
21
- // so that the layouts that are not actively observed
22
- // can still function normally (runtime layout switching)
23
- call.state.updateParticipant(sessionId, (p) => (Object.assign(Object.assign({}, p), { viewportVisibilityState: VisibilityState.UNKNOWN })));
24
12
  };
25
- }, [trackedElement, viewportTracker, call, sessionId]);
13
+ }, [trackedElement, manager, call, sessionId, trackType]);
26
14
  };
27
15
  //# sourceMappingURL=useTrackElementVisibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackElementVisibility.js","sourceRoot":"","sources":["../../../../src/core/hooks/useTrackElementVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAmB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAwB,EAC/D,cAAc,EACd,eAAe,EAAE,oBAAoB,EACrC,SAAS,GAKV,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,eAAe,GAAG,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI;YAAE,OAAO;QAEzD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YAClE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAC1C,CAAC,KACJ,uBAAuB;gBACrB,uEAAuE;gBACvE,yEAAyE;gBACzE,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,iBAAiB,KAAK,cAAc;oBACnE,CAAC,CAAC,eAAe,CAAC,OAAO;oBACzB,CAAC,CAAC,eAAe,CAAC,SAAS,IAC/B,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,SAAS,EAAE,CAAC;YACZ,iDAAiD;YACjD,qDAAqD;YACrD,yDAAyD;YACzD,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAC1C,CAAC,KACJ,uBAAuB,EAAE,eAAe,CAAC,OAAO,IAChD,CAAC,CAAC;QACN,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC"}
1
+ {"version":3,"file":"useTrackElementVisibility.js","sourceRoot":"","sources":["../../../../src/core/hooks/useTrackElementVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAwB,EAC/D,cAAc,EACd,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,EACT,SAAS,GAMV,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAC;IAChE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO;QACzE,MAAM,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAC9C,cAAc,EACd,SAAS,EACT,SAAS,CACV,CAAC;QACF,OAAO,GAAG,EAAE;YACV,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "0.3.9";
1
+ export declare const version = "0.3.11";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '0.3.9';
1
+ export const version = '0.3.11';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-sdk",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -33,8 +33,8 @@
33
33
  "@nivo/core": "^0.80.0",
34
34
  "@nivo/line": "^0.80.0",
35
35
  "@stream-io/i18n": "^0.1.1",
36
- "@stream-io/video-client": "^0.3.8",
37
- "@stream-io/video-react-bindings": "^0.2.9",
36
+ "@stream-io/video-client": "^0.3.10",
37
+ "@stream-io/video-react-bindings": "^0.2.11",
38
38
  "clsx": "^1.2.1",
39
39
  "prop-types": "^15.8.1",
40
40
  "rxjs": "~7.8.1"
@@ -1,40 +1,35 @@
1
- import {
2
- AudioHTMLAttributes,
3
- DetailedHTMLProps,
4
- useEffect,
5
- useRef,
6
- } from 'react';
1
+ import { ComponentPropsWithoutRef, useEffect, useState } from 'react';
7
2
  import { StreamVideoParticipant } from '@stream-io/video-client';
3
+ import { useCall } from '@stream-io/video-react-bindings';
8
4
 
9
- export type AudioProps = DetailedHTMLProps<
10
- AudioHTMLAttributes<HTMLAudioElement>,
11
- HTMLAudioElement
12
- > &
13
- Pick<StreamVideoParticipant, 'audioStream'> & {
14
- sinkId?: string;
15
- };
5
+ export type AudioProps = ComponentPropsWithoutRef<'audio'> & {
6
+ participant: StreamVideoParticipant;
7
+ };
8
+
9
+ export const Audio = ({ participant, ...rest }: AudioProps) => {
10
+ const call = useCall();
11
+ const [audioElement, setAudioElement] = useState<HTMLAudioElement | null>(
12
+ null,
13
+ );
14
+ const { userId, sessionId } = participant;
16
15
 
17
- // TODO: rename to BaseAudio
18
- export const Audio = ({ audioStream, sinkId, ...rest }: AudioProps) => {
19
- const audioRef = useRef<HTMLAudioElement>(null);
20
16
  useEffect(() => {
21
- const $el = audioRef.current;
22
- if (!($el && audioStream)) return;
17
+ if (!call || !audioElement) return;
18
+
19
+ const cleanup = call.bindAudioElement(audioElement, sessionId);
23
20
 
24
- $el.srcObject = audioStream;
25
21
  return () => {
26
- $el.srcObject = null;
22
+ cleanup?.();
27
23
  };
28
- }, [audioStream]);
29
-
30
- useEffect(() => {
31
- const $el = audioRef.current;
32
- if (!$el || !sinkId) return;
33
-
34
- if (($el as any).setSinkId) {
35
- ($el as any).setSinkId(sinkId);
36
- }
37
- }, [sinkId]);
24
+ }, [call, sessionId, audioElement]);
38
25
 
39
- return <audio autoPlay ref={audioRef} {...rest} />;
26
+ return (
27
+ <audio
28
+ autoPlay
29
+ {...rest}
30
+ ref={setAudioElement}
31
+ data-user-id={userId}
32
+ data-session-id={sessionId}
33
+ />
34
+ );
40
35
  };
@@ -80,12 +80,10 @@ export const PaginatedGridLayout = ({
80
80
  const [page, setPage] = useState(0);
81
81
 
82
82
  const call = useCall();
83
- const { useParticipants, useRemoteParticipants, useLocalParticipant } =
84
- useCallStateHooks();
83
+ const { useParticipants, useRemoteParticipants } = useCallStateHooks();
85
84
  const participants = useParticipants();
86
85
  // used to render audio elements
87
86
  const remoteParticipants = useRemoteParticipants();
88
- const localParticipant = useLocalParticipant();
89
87
 
90
88
  // only used to render video elements
91
89
  const participantGroups = useMemo(
@@ -113,12 +111,7 @@ export const PaginatedGridLayout = ({
113
111
  return (
114
112
  <>
115
113
  {remoteParticipants.map((participant) => (
116
- <Audio
117
- muted={false}
118
- sinkId={localParticipant?.audioOutputDeviceId}
119
- key={participant.sessionId}
120
- audioStream={participant.audioStream}
121
- />
114
+ <Audio key={participant.sessionId} participant={participant} />
122
115
  ))}
123
116
  <div className="str-video__paginated-grid-layout__wrapper">
124
117
  <div className="str-video__paginated-grid-layout">
@@ -57,8 +57,7 @@ export const SpeakerLayout = ({
57
57
  useEffect(() => {
58
58
  if (!scrollWrapper || !call) return;
59
59
 
60
- const cleanup = call.viewportTracker.setViewport(scrollWrapper);
61
-
60
+ const cleanup = call.setViewport(scrollWrapper);
62
61
  return () => cleanup();
63
62
  }, [scrollWrapper, call]);
64
63
 
@@ -97,7 +96,9 @@ export const SpeakerLayout = ({
97
96
  <ParticipantView
98
97
  participant={participantInSpotlight}
99
98
  muteAudio={isSpeakerScreenSharing}
100
- videoMode={isSpeakerScreenSharing ? 'screen' : 'video'}
99
+ trackType={
100
+ isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack'
101
+ }
101
102
  ParticipantViewUI={ParticipantViewUISpotlight}
102
103
  VideoPlaceholder={VideoPlaceholder}
103
104
  />
@@ -68,7 +68,7 @@ export const DefaultParticipantViewUI = ({
68
68
  menuPlacement = 'bottom-end',
69
69
  showMenuButton = true,
70
70
  }: DefaultParticipantViewUIProps) => {
71
- const { participant, participantViewElement, videoMode, videoElement } =
71
+ const { participant, participantViewElement, trackType, videoElement } =
72
72
  useParticipantViewContext();
73
73
  const { publishedTracks } = participant;
74
74
 
@@ -79,14 +79,15 @@ export const DefaultParticipantViewUI = ({
79
79
  if (
80
80
  participant.isLocalParticipant &&
81
81
  hasScreenShare &&
82
- videoMode === 'screen'
83
- )
82
+ trackType === 'screenShareTrack'
83
+ ) {
84
84
  return (
85
85
  <>
86
86
  <DefaultScreenShareOverlay />
87
87
  <ParticipantDetails indicatorsVisible={indicatorsVisible} />
88
88
  </>
89
89
  );
90
+ }
90
91
 
91
92
  return (
92
93
  <>
@@ -12,8 +12,8 @@ import {
12
12
  SfuModels,
13
13
  StreamVideoLocalParticipant,
14
14
  StreamVideoParticipant,
15
+ VideoTrackType,
15
16
  } from '@stream-io/video-client';
16
- import { useCallStateHooks } from '@stream-io/video-react-bindings';
17
17
 
18
18
  import { Audio } from '../Audio';
19
19
  import { Video, VideoProps } from '../Video';
@@ -22,7 +22,7 @@ import { DefaultParticipantViewUI } from './DefaultParticipantViewUI';
22
22
  import { applyElementToRef, isComponentType } from '../../../utilities';
23
23
 
24
24
  export type ParticipantViewContextValue = Required<
25
- Pick<ParticipantViewProps, 'participant' | 'videoMode'>
25
+ Pick<ParticipantViewProps, 'participant' | 'trackType'>
26
26
  > & {
27
27
  participantViewElement: HTMLDivElement | null;
28
28
  videoElement: HTMLVideoElement | null;
@@ -52,7 +52,7 @@ export type ParticipantViewProps = {
52
52
  /**
53
53
  * The kind of video stream to play for the given participant. The default value is `video`. You can use `none` if you're building an audio-only call.
54
54
  */
55
- videoMode?: 'video' | 'screen' | 'none';
55
+ trackType?: VideoTrackType | 'none';
56
56
 
57
57
  /**
58
58
  * This prop is only useful for advanced use-cases (for example building your own paginated layout). When set to `true` it will mute the give participant's audio stream on the client side. The local participant is always muted.
@@ -77,7 +77,7 @@ export const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(
77
77
  (
78
78
  {
79
79
  participant,
80
- videoMode = 'video',
80
+ trackType = 'videoTrack',
81
81
  muteAudio,
82
82
  refs: { setVideoElement, setVideoPlaceholderElement } = {},
83
83
  className,
@@ -87,15 +87,12 @@ export const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(
87
87
  ref,
88
88
  ) => {
89
89
  const {
90
- audioStream,
91
90
  isLocalParticipant,
92
91
  isSpeaking,
93
92
  isDominantSpeaker,
94
93
  publishedTracks,
95
94
  sessionId,
96
95
  } = participant;
97
- const { useLocalParticipant } = useCallStateHooks();
98
- const localParticipant = useLocalParticipant();
99
96
 
100
97
  const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);
101
98
  const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);
@@ -114,6 +111,7 @@ export const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(
114
111
  useTrackElementVisibility({
115
112
  sessionId,
116
113
  trackedElement,
114
+ trackType,
117
115
  });
118
116
 
119
117
  const participantViewContextValue = useMemo(
@@ -122,14 +120,14 @@ export const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(
122
120
  participantViewElement: trackedElement,
123
121
  videoElement: contextVideoElement,
124
122
  videoPlaceholderElement: contextVideoPlaceholderElement,
125
- videoMode,
123
+ trackType,
126
124
  }),
127
125
  [
128
126
  contextVideoElement,
129
127
  contextVideoPlaceholderElement,
130
128
  participant,
131
129
  trackedElement,
132
- videoMode,
130
+ trackType,
133
131
  ],
134
132
  );
135
133
 
@@ -165,15 +163,12 @@ export const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(
165
163
  <ParticipantViewContext.Provider value={participantViewContextValue}>
166
164
  {/* mute the local participant, as we don't want to hear ourselves */}
167
165
  {!isLocalParticipant && !muteAudio && (
168
- <Audio
169
- sinkId={localParticipant?.audioOutputDeviceId}
170
- audioStream={audioStream}
171
- />
166
+ <Audio participant={participant} />
172
167
  )}
173
168
  <Video
174
169
  VideoPlaceholder={VideoPlaceholder}
175
170
  participant={participant}
176
- kind={videoMode}
171
+ trackType={trackType}
177
172
  refs={videoRefs}
178
173
  autoPlay
179
174
  />
@@ -1,15 +1,13 @@
1
1
  import {
2
2
  ComponentPropsWithoutRef,
3
3
  ComponentType,
4
- useCallback,
5
4
  useEffect,
6
- useRef,
7
5
  useState,
8
6
  } from 'react';
9
7
  import {
10
- DebounceType,
11
8
  SfuModels,
12
9
  StreamVideoParticipant,
10
+ VideoTrackType,
13
11
  VisibilityState,
14
12
  } from '@stream-io/video-client';
15
13
  import clsx from 'clsx';
@@ -17,11 +15,16 @@ import {
17
15
  DefaultVideoPlaceholder,
18
16
  VideoPlaceholderProps,
19
17
  } from './DefaultVideoPlaceholder';
20
- import { BaseVideo } from './BaseVideo';
21
18
  import { useCall } from '@stream-io/video-react-bindings';
22
19
 
23
20
  export type VideoProps = ComponentPropsWithoutRef<'video'> & {
24
- kind: 'video' | 'screen' | 'none';
21
+ /**
22
+ * The track type to display.
23
+ */
24
+ trackType: VideoTrackType | 'none';
25
+ /**
26
+ * The participant represented by this video element.
27
+ */
25
28
  participant: StreamVideoParticipant;
26
29
  /**
27
30
  * Override the default UI that's visible when a participant turned off their video.
@@ -34,7 +37,7 @@ export type VideoProps = ComponentPropsWithoutRef<'video'> & {
34
37
  };
35
38
 
36
39
  export const Video = ({
37
- kind,
40
+ trackType,
38
41
  participant,
39
42
  className,
40
43
  VideoPlaceholder = DefaultVideoPlaceholder,
@@ -52,183 +55,63 @@ export const Video = ({
52
55
  } = participant;
53
56
 
54
57
  const call = useCall();
55
-
56
58
  const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>(
57
59
  null,
58
60
  );
59
-
60
- // const [videoTrackMuted, setVideoTrackMuted] = useState(false);
61
61
  const [videoPlaying, setVideoPlaying] = useState(false);
62
- const viewportVisibilityRef = useRef<VisibilityState | undefined>(
63
- viewportVisibilityState,
64
- );
62
+ const [isWideMode, setIsWideMode] = useState(true);
65
63
 
66
64
  const stream =
67
- kind === 'none'
65
+ trackType === 'none'
68
66
  ? undefined
69
- : kind === 'video'
67
+ : trackType === 'videoTrack'
70
68
  ? videoStream
71
69
  : screenShareStream;
72
70
 
73
- // TODO: handle track muting
74
- // useEffect(() => {
75
- // if (!stream) return;
76
-
77
- // const [track] = stream.getVideoTracks();
78
- // setVideoTrackMuted(track.muted);
79
-
80
- // const handleMute = () => {
81
- // setVideoTrackMuted(true);
82
- // };
83
- // const handleUnmute = () => {
84
- // setVideoTrackMuted(false);
85
- // };
86
-
87
- // track.addEventListener('mute', handleMute);
88
- // track.addEventListener('unmute', handleUnmute);
89
-
90
- // return () => {
91
- // track.removeEventListener('mute', handleMute);
92
- // track.removeEventListener('unmute', handleUnmute);
93
- // };
94
- // }, [stream]);
95
-
96
71
  const isPublishingTrack =
97
- kind === 'none'
72
+ trackType === 'none'
98
73
  ? false
99
74
  : publishedTracks.includes(
100
- kind === 'video'
75
+ trackType === 'videoTrack'
101
76
  ? SfuModels.TrackType.VIDEO
102
77
  : SfuModels.TrackType.SCREEN_SHARE,
103
78
  );
104
79
 
105
- const displayPlaceholder =
106
- !isPublishingTrack ||
107
- (viewportVisibilityState === VisibilityState.INVISIBLE &&
108
- !screenShareStream) ||
109
- !videoPlaying;
110
-
111
- const lastDimensionRef = useRef<string | undefined>();
112
- const updateSubscription = useCallback(
113
- (
114
- dimension?: SfuModels.VideoDimension,
115
- type: DebounceType = DebounceType.SLOW,
116
- ) => {
117
- if (!call || kind === 'none') return;
118
-
119
- call.updateSubscriptionsPartial(
120
- kind,
121
- {
122
- [sessionId]: {
123
- dimension,
124
- },
125
- },
126
- type,
127
- );
128
- },
129
- [call, kind, sessionId],
130
- );
131
-
132
- // handle visibility subscription updates
133
- useEffect(() => {
134
- viewportVisibilityRef.current = viewportVisibilityState;
135
-
136
- if (!videoElement || !isPublishingTrack || isLocalParticipant) return;
137
-
138
- const isInvisibleVVS =
139
- viewportVisibilityState === VisibilityState.INVISIBLE;
140
-
141
- updateSubscription(
142
- isInvisibleVVS
143
- ? undefined
144
- : {
145
- height: videoElement.clientHeight,
146
- width: videoElement.clientWidth,
147
- },
148
- DebounceType.MEDIUM,
149
- );
150
- }, [
151
- updateSubscription,
152
- viewportVisibilityState,
153
- videoElement,
154
- isPublishingTrack,
155
- isLocalParticipant,
156
- ]);
157
-
158
- // handle resize subscription updates
159
- useEffect(() => {
160
- if (!videoElement || !isPublishingTrack || isLocalParticipant) return;
161
-
162
- const resizeObserver = new ResizeObserver(() => {
163
- const currentDimensions = `${videoElement.clientWidth},${videoElement.clientHeight}`;
80
+ const isInvisible =
81
+ trackType === 'none' ||
82
+ viewportVisibilityState?.[trackType] === VisibilityState.INVISIBLE;
164
83
 
165
- // skip initial trigger of the observer
166
- if (!lastDimensionRef.current) {
167
- return (lastDimensionRef.current = currentDimensions);
168
- }
84
+ const displayPlaceholder = !isPublishingTrack || isInvisible || !videoPlaying;
169
85
 
170
- if (
171
- lastDimensionRef.current === currentDimensions ||
172
- viewportVisibilityRef.current === VisibilityState.INVISIBLE
173
- )
174
- return;
175
-
176
- updateSubscription(
177
- {
178
- height: videoElement.clientHeight,
179
- width: videoElement.clientWidth,
180
- },
181
- DebounceType.SLOW,
182
- );
183
- lastDimensionRef.current = currentDimensions;
184
- });
185
- resizeObserver.observe(videoElement);
186
-
187
- return () => {
188
- resizeObserver.disconnect();
189
- };
190
- }, [
191
- updateSubscription,
192
- videoElement,
193
- viewportVisibilityState,
194
- isPublishingTrack,
195
- isLocalParticipant,
196
- ]);
197
-
198
- // handle generic subscription updates
199
86
  useEffect(() => {
200
- if (!isPublishingTrack || !videoElement || isLocalParticipant) return;
87
+ if (!call || !videoElement || trackType === 'none') return;
201
88
 
202
- updateSubscription(
203
- {
204
- height: videoElement.clientHeight,
205
- width: videoElement.clientWidth,
206
- },
207
- DebounceType.FAST,
208
- );
89
+ const cleanup = call.bindVideoElement(videoElement, sessionId, trackType);
209
90
 
210
91
  return () => {
211
- updateSubscription(undefined, DebounceType.FAST);
92
+ cleanup?.();
212
93
  };
213
- }, [updateSubscription, videoElement, isPublishingTrack, isLocalParticipant]);
94
+ }, [call, trackType, sessionId, videoElement]);
214
95
 
215
- const [isWideMode, setIsWideMode] = useState(true);
216
96
  useEffect(() => {
217
97
  if (!stream || !videoElement) return;
218
98
 
219
- setVideoPlaying(!videoElement.paused);
99
+ const handlePlayPause = () => {
100
+ setVideoPlaying(!videoElement.paused);
220
101
 
221
- const calculateVideoRatio = () => {
222
- setVideoPlaying(true);
223
102
  const [track] = stream.getVideoTracks();
224
103
  if (!track) return;
225
104
 
105
+ // TODO: find out why track dimensions aren't coming in
226
106
  const { width = 0, height = 0 } = track.getSettings();
227
- setIsWideMode(width > height);
107
+ setIsWideMode(width >= height);
228
108
  };
229
- videoElement.addEventListener('play', calculateVideoRatio);
109
+
110
+ videoElement.addEventListener('play', handlePlayPause);
111
+ videoElement.addEventListener('pause', handlePlayPause);
230
112
  return () => {
231
- videoElement.removeEventListener('play', calculateVideoRatio);
113
+ videoElement.removeEventListener('play', handlePlayPause);
114
+ videoElement.removeEventListener('pause', handlePlayPause);
232
115
  };
233
116
  }, [stream, videoElement]);
234
117
 
@@ -236,13 +119,13 @@ export const Video = ({
236
119
 
237
120
  return (
238
121
  <>
239
- <BaseVideo
122
+ <video
240
123
  {...rest}
241
- stream={stream}
242
124
  className={clsx(className, 'str-video__video', {
243
125
  'str-video__video--tall': !isWideMode,
244
- 'str-video__video--mirror': isLocalParticipant && kind === 'video',
245
- 'str-video__video--screen-share': kind === 'screen',
126
+ 'str-video__video--mirror':
127
+ isLocalParticipant && trackType === 'videoTrack',
128
+ 'str-video__video--screen-share': trackType === 'screenShareTrack',
246
129
  })}
247
130
  data-user-id={userId}
248
131
  data-session-id={sessionId}
@@ -1,44 +1,29 @@
1
1
  import { useEffect } from 'react';
2
- import { ViewportTracker, VisibilityState } from '@stream-io/video-client';
2
+ import { DynascaleManager, VideoTrackType } from '@stream-io/video-client';
3
3
  import { useCall } from '@stream-io/video-react-bindings';
4
4
 
5
5
  export const useTrackElementVisibility = <T extends HTMLElement>({
6
6
  trackedElement,
7
- viewportTracker: propsViewportTracker,
7
+ dynascaleManager: propsDynascaleManager,
8
8
  sessionId,
9
+ trackType,
9
10
  }: {
10
11
  trackedElement: T | null;
11
12
  sessionId: string;
12
- viewportTracker?: ViewportTracker;
13
+ dynascaleManager?: DynascaleManager;
14
+ trackType: VideoTrackType | 'none';
13
15
  }) => {
14
16
  const call = useCall();
15
-
16
- const viewportTracker = propsViewportTracker ?? call?.viewportTracker;
17
-
17
+ const manager = propsDynascaleManager ?? call?.dynascaleManager;
18
18
  useEffect(() => {
19
- if (!trackedElement || !viewportTracker || !call) return;
20
-
21
- const unobserve = viewportTracker.observe(trackedElement, (entry) => {
22
- call.state.updateParticipant(sessionId, (p) => ({
23
- ...p,
24
- viewportVisibilityState:
25
- // observer triggers when element is "moved" to be a fullscreen element
26
- // keep it VISIBLE if that happens to prevent fullscreen with placeholder
27
- entry.isIntersecting || document.fullscreenElement === trackedElement
28
- ? VisibilityState.VISIBLE
29
- : VisibilityState.INVISIBLE,
30
- }));
31
- });
32
-
19
+ if (!trackedElement || !manager || !call || trackType === 'none') return;
20
+ const unobserve = manager.trackElementVisibility(
21
+ trackedElement,
22
+ sessionId,
23
+ trackType,
24
+ );
33
25
  return () => {
34
26
  unobserve();
35
- // reset visibility state to UNKNOWN upon cleanup
36
- // so that the layouts that are not actively observed
37
- // can still function normally (runtime layout switching)
38
- call.state.updateParticipant(sessionId, (p) => ({
39
- ...p,
40
- viewportVisibilityState: VisibilityState.UNKNOWN,
41
- }));
42
27
  };
43
- }, [trackedElement, viewportTracker, call, sessionId]);
28
+ }, [trackedElement, manager, call, sessionId, trackType]);
44
29
  };