@stream-io/video-react-sdk 0.0.1-alpha.50 → 0.0.1-alpha.52
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 +13 -0
- package/dist/src/components/StreamCall/StreamCall.d.ts +42 -3
- package/dist/src/components/StreamCall/StreamCall.js +30 -2
- package/dist/src/components/StreamCall/StreamCall.js.map +1 -1
- package/dist/src/core/contexts/MediaDevicesContext.d.ts +0 -1
- package/dist/src/core/contexts/MediaDevicesContext.js +16 -1
- package/dist/src/core/contexts/MediaDevicesContext.js.map +1 -1
- package/package.json +5 -5
- package/src/components/StreamCall/StreamCall.tsx +72 -2
- package/src/core/contexts/MediaDevicesContext.tsx +19 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.1-alpha.52](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.51...@stream-io/video-react-sdk-0.0.1-alpha.52) (2023-05-18)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* server-side defaults for mic and camera ([#519](https://github.com/GetStream/stream-video-js/issues/519)) ([30c248e](https://github.com/GetStream/stream-video-js/commit/30c248edaca74888a2bfeaa1bb1c2599ad8a5c2f))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.0.1-alpha.51](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.50...@stream-io/video-react-sdk-0.0.1-alpha.51) (2023-05-18)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
5
18
|
## [0.0.1-alpha.50](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.49...@stream-io/video-react-sdk-0.0.1-alpha.50) (2023-05-18)
|
|
6
19
|
|
|
7
20
|
|
|
@@ -2,14 +2,32 @@ import { PropsWithChildren } from 'react';
|
|
|
2
2
|
import { Call, JoinCallData } from '@stream-io/video-client';
|
|
3
3
|
import { MediaDevicesProviderProps } from '../../core';
|
|
4
4
|
type InitWithCallCID = {
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The call type.
|
|
7
|
+
*/
|
|
6
8
|
callType: string;
|
|
9
|
+
/**
|
|
10
|
+
* The call id.
|
|
11
|
+
*/
|
|
12
|
+
callId: string;
|
|
13
|
+
/**
|
|
14
|
+
* The call instance to use.
|
|
15
|
+
*/
|
|
7
16
|
call?: never;
|
|
8
17
|
};
|
|
9
18
|
type InitWithCallInstance = {
|
|
19
|
+
/**
|
|
20
|
+
* The call instance to use.
|
|
21
|
+
*/
|
|
10
22
|
call: Call | undefined;
|
|
11
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The call type.
|
|
25
|
+
*/
|
|
12
26
|
callType?: never;
|
|
27
|
+
/**
|
|
28
|
+
* The call id.
|
|
29
|
+
*/
|
|
30
|
+
callId?: never;
|
|
13
31
|
};
|
|
14
32
|
type InitStreamCall = InitWithCallCID | InitWithCallInstance;
|
|
15
33
|
export type StreamCallProps = InitStreamCall & {
|
|
@@ -21,6 +39,27 @@ export type StreamCallProps = InitStreamCall & {
|
|
|
21
39
|
* @default false.
|
|
22
40
|
*/
|
|
23
41
|
autoJoin?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* If true, the call data will be loaded automatically from the server.
|
|
44
|
+
*
|
|
45
|
+
* This property is useful for the scenarios where you declaratively create
|
|
46
|
+
* the call instance by using the `callId` and `callType` props,
|
|
47
|
+
* and you have a UI that depends on the call metadata.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```jsx
|
|
51
|
+
* <StreamCall callId="call-id" callType="call-type" autoLoad>
|
|
52
|
+
* <CallMetadata /> // has access to `call.metadata` although not joined yet
|
|
53
|
+
* <CallUI />
|
|
54
|
+
* <CallControls />
|
|
55
|
+
* </StreamCall>
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* This property is ignored if you pass the `call` prop or enable `autoJoin`.
|
|
59
|
+
*
|
|
60
|
+
* @default true.
|
|
61
|
+
*/
|
|
62
|
+
autoLoad?: boolean;
|
|
24
63
|
/**
|
|
25
64
|
* An optional data to pass when joining the call.
|
|
26
65
|
*/
|
|
@@ -30,5 +69,5 @@ export type StreamCallProps = InitStreamCall & {
|
|
|
30
69
|
*/
|
|
31
70
|
mediaDevicesProviderProps?: MediaDevicesProviderProps;
|
|
32
71
|
};
|
|
33
|
-
export declare const StreamCall: ({ children, callId, callType, call, autoJoin, data, mediaDevicesProviderProps, }: PropsWithChildren<StreamCallProps>) => JSX.Element;
|
|
72
|
+
export declare const StreamCall: ({ children, callId, callType, call, autoJoin, autoLoad, data, mediaDevicesProviderProps, }: PropsWithChildren<StreamCallProps>) => JSX.Element;
|
|
34
73
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { CallingState } from '@stream-io/video-client';
|
|
4
|
-
import { StreamCallProvider, useStreamVideoClient, } from '@stream-io/video-react-bindings';
|
|
4
|
+
import { StreamCallProvider, useConnectedUser, useStreamVideoClient, } from '@stream-io/video-react-bindings';
|
|
5
5
|
import { MediaDevicesProvider } from '../../core';
|
|
6
|
-
export const StreamCall = ({ children, callId, callType, call, autoJoin = false, data, mediaDevicesProviderProps, }) => {
|
|
6
|
+
export const StreamCall = ({ children, callId, callType, call, autoJoin = false, autoLoad = true, data, mediaDevicesProviderProps, }) => {
|
|
7
7
|
const client = useStreamVideoClient();
|
|
8
8
|
const [activeCall, setActiveCall] = useState(() => {
|
|
9
9
|
if (call)
|
|
@@ -20,6 +20,34 @@ export const StreamCall = ({ children, callId, callType, call, autoJoin = false,
|
|
|
20
20
|
setActiveCall(newCall);
|
|
21
21
|
}
|
|
22
22
|
}, [activeCall, callId, callType, client]);
|
|
23
|
+
const connectedUser = useConnectedUser();
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
// run the effect only when the user is connected and the call
|
|
26
|
+
// is created declaratively by using the `callId` and `callType` props.
|
|
27
|
+
if (!connectedUser)
|
|
28
|
+
return;
|
|
29
|
+
if (activeCall && callType && callId && autoLoad && !autoJoin) {
|
|
30
|
+
activeCall
|
|
31
|
+
.getOrCreate({
|
|
32
|
+
ring: data === null || data === void 0 ? void 0 : data.ring,
|
|
33
|
+
data: data === null || data === void 0 ? void 0 : data.data,
|
|
34
|
+
members_limit: data === null || data === void 0 ? void 0 : data.members_limit,
|
|
35
|
+
})
|
|
36
|
+
.catch((err) => {
|
|
37
|
+
console.error(`Failed to get or create call`, err);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}, [
|
|
41
|
+
activeCall,
|
|
42
|
+
autoJoin,
|
|
43
|
+
autoLoad,
|
|
44
|
+
callId,
|
|
45
|
+
callType,
|
|
46
|
+
connectedUser,
|
|
47
|
+
data === null || data === void 0 ? void 0 : data.data,
|
|
48
|
+
data === null || data === void 0 ? void 0 : data.members_limit,
|
|
49
|
+
data === null || data === void 0 ? void 0 : data.ring,
|
|
50
|
+
]);
|
|
23
51
|
useEffect(() => {
|
|
24
52
|
if (autoJoin && (activeCall === null || activeCall === void 0 ? void 0 : activeCall.state.callingState) === CallingState.IDLE) {
|
|
25
53
|
activeCall.join(data).catch((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamCall.js","sourceRoot":"","sources":["../../../../src/components/StreamCall/StreamCall.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAQ,YAAY,EAAgB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAA6B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"StreamCall.js","sourceRoot":"","sources":["../../../../src/components/StreamCall/StreamCall.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
11
11
|
import { createContext, useCallback, useContext, useEffect, useState, } from 'react';
|
|
12
12
|
import { map } from 'rxjs';
|
|
13
13
|
import { CallingState, checkIfAudioOutputChangeSupported, disposeOfMediaStream, getAudioStream, getVideoStream, SfuModels, watchForDisconnectedAudioOutputDevice, } from '@stream-io/video-client';
|
|
14
|
-
import { useCall, useCallCallingState, useCallState, } from '@stream-io/video-react-bindings';
|
|
14
|
+
import { useCall, useCallCallingState, useCallMetadata, useCallState, } from '@stream-io/video-react-bindings';
|
|
15
15
|
import { useAudioInputDeviceFallback, useAudioOutputDeviceFallback, useAudioPublisher, useVideoDeviceFallback, useVideoPublisher, } from '../hooks';
|
|
16
16
|
const DEVICE_STATE_TOGGLE = {
|
|
17
17
|
starting: 'stopped',
|
|
@@ -45,6 +45,7 @@ export const MediaDevicesProvider = ({ children, initialAudioEnabled, initialVid
|
|
|
45
45
|
const call = useCall();
|
|
46
46
|
const callingState = useCallCallingState();
|
|
47
47
|
const callState = useCallState();
|
|
48
|
+
const metadata = useCallMetadata();
|
|
48
49
|
const { localParticipant$ } = callState;
|
|
49
50
|
const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState(initialAudioInputDeviceId);
|
|
50
51
|
const [selectedAudioOutputDeviceId, selectAudioOutputDeviceId] = useState(initialAudioOutputDeviceId);
|
|
@@ -52,6 +53,20 @@ export const MediaDevicesProvider = ({ children, initialAudioEnabled, initialVid
|
|
|
52
53
|
const [isAudioOutputChangeSupported] = useState(() => checkIfAudioOutputChangeSupported());
|
|
53
54
|
const [initAudioEnabled, setInitialAudioEnabled] = useState(!!initialAudioEnabled);
|
|
54
55
|
const [initialVideoState, setInitialVideoState] = useState(() => initialVideoEnabled ? DEVICE_STATE.starting : DEVICE_STATE.uninitialized);
|
|
56
|
+
const settings = metadata === null || metadata === void 0 ? void 0 : metadata.settings;
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!settings ||
|
|
59
|
+
![CallingState.IDLE, CallingState.RINGING].includes(callingState)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const { audio, video } = settings;
|
|
63
|
+
if (typeof initialAudioEnabled === 'undefined' && audio.mic_default_on) {
|
|
64
|
+
setInitialAudioEnabled(audio.mic_default_on);
|
|
65
|
+
}
|
|
66
|
+
if (typeof initialVideoEnabled === 'undefined' && video.camera_default_on) {
|
|
67
|
+
setInitialVideoState(DEVICE_STATE.starting);
|
|
68
|
+
}
|
|
69
|
+
}, [callingState, initialAudioEnabled, initialVideoEnabled, settings]);
|
|
55
70
|
const publishVideoStream = useVideoPublisher({
|
|
56
71
|
initialVideoMuted: !initialVideoState.enabled,
|
|
57
72
|
videoDeviceId: selectedVideoDeviceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaDevicesContext.js","sourceRoot":"","sources":["../../../../src/core/contexts/MediaDevicesContext.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EACL,aAAa,EAEb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,SAAS,EACT,qCAAqC,GACtC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,GACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AA0BlB,MAAM,mBAAmB,GAAoD;IAC3E,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,UAAU;IACzB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAMrB;IACF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE;IACxD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;CACtD,CAAC;AAEF,MAAM,iBAAiB,GAAG,SAAS,CAAC;AA2BpC,MAAM,mBAAmB,GAAG,aAAa,CAAgC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaDevicesContext.js","sourceRoot":"","sources":["../../../../src/core/contexts/MediaDevicesContext.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EACL,aAAa,EAEb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,SAAS,EACT,qCAAqC,GACtC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AA0BlB,MAAM,mBAAmB,GAAoD;IAC3E,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,UAAU;IACzB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAMrB;IACF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE;IACxD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;CACtD,CAAC;AAEF,MAAM,iBAAiB,GAAG,SAAS,CAAC;AA2BpC,MAAM,mBAAmB,GAAG,aAAa,CAAgC,IAAI,CAAC,CAAC;AAc/E,kEAAkE;AAClE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,QAAQ,EACR,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,GAAG,iBAAiB,EAC7C,0BAA0B,GAAG,iBAAiB,EAC9C,yBAAyB,GAAG,iBAAiB,GACnB,EAAE,EAAE;IAC9B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAExC,MAAM,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAErE,yBAAyB,CAAC,CAAC;IAC7B,MAAM,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAEvE,0BAA0B,CAAC,CAAC;IAC9B,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAE3D,yBAAyB,CAAC,CAAC;IAE7B,MAAM,CAAC,4BAA4B,CAAC,GAAG,QAAQ,CAAU,GAAG,EAAE,CAC5D,iCAAiC,EAAE,CACpC,CAAC;IACF,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CACzD,CAAC,CAAC,mBAAmB,CACtB,CAAC;IACF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAC3E,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CACzE,CAAC;IAEF,MAAM,QAAQ,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,IACE,CAAC,QAAQ;YACT,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EACjE;YACA,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAClC,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,KAAK,CAAC,cAAc,EAAE;YACtE,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;SAC9C;QACD,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,KAAK,CAAC,iBAAiB,EAAE;YACzE,oBAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;QAC3C,iBAAiB,EAAE,CAAC,iBAAiB,CAAC,OAAO;QAC7C,aAAa,EAAE,qBAAqB;KACrC,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;QAC3C,iBAAiB,EAAE,CAAC,gBAAgB;QACpC,aAAa,EAAE,0BAA0B;KAC1C,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,IACE,YAAY,KAAK,YAAY,CAAC,IAAI;YAClC,YAAY,KAAK,YAAY,CAAC,OAAO,EACrC;YACA,sBAAsB,CAAC,KAAK,CAAC,CAAC;SAC/B;aAAM;YACL,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC9C;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,IACE,YAAY,KAAK,YAAY,CAAC,IAAI;YAClC,YAAY,KAAK,YAAY,CAAC,OAAO,EACrC;YACA,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC5C;aAAM;YACL,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC9C;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,MAAM,2BAA2B,GAAG,WAAW,CAC7C,GAAG,EAAE,CACH,sBAAsB,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC;IACf,CAAC,CAAC,EACJ,EAAE,CACH,CAAC;IACF,MAAM,2BAA2B,GAAG,WAAW,CAC7C,GAAG,EAAE,CACH,oBAAoB,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,EACJ,EAAE,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,IAAqB,EAAE,QAAiB,EAAE,EAAE;QAC3C,IAAI,IAAI,KAAK,YAAY,EAAE;YACzB,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAC/B;QACD,IAAI,IAAI,KAAK,YAAY,EAAE;YACzB,wBAAwB,CAAC,QAAQ,CAAC,CAAC;SACpC;QACD,IAAI,IAAI,KAAK,aAAa,EAAE;YAC1B,yBAAyB,CAAC,QAAQ,CAAC,CAAC;SACrC;IACH,CAAC,EACD,EAAE,CACH,CAAC;IAEF,2BAA2B,CACzB,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,EACnD,0BAA0B,CAC3B,CAAC;IACF,4BAA4B,CAC1B,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,iBAAiB,CAAC,EACpD,2BAA2B,CAC5B,CAAC;IACF,sBAAsB,CACpB,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,EACnD,qBAAqB,CACtB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,YAAY,KAAK,YAAY,CAAC,MAAM;YAAE,OAAO;QAC1D,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,MAAM,YAAY,GAAG,qCAAqC,CACxD,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,mBAAmB,CAAC,CAAC,CAC3D,CAAC,SAAS,CAAC,GAAS,EAAE;YACrB,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QAC/C,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,YAAY,GAA2B;QAC3C,oBAAoB;QACpB,cAAc;QACd,cAAc;QACd,4BAA4B;QAC5B,0BAA0B;QAC1B,2BAA2B;QAC3B,qBAAqB;QACrB,YAAY;QACZ,mBAAmB,EAAE,gBAAgB;QACrC,iBAAiB;QACjB,sBAAsB;QACtB,oBAAoB;QACpB,2BAA2B;QAC3B,2BAA2B;QAC3B,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IAEF,OAAO,CACL,KAAC,mBAAmB,CAAC,QAAQ,kBAAC,KAAK,EAAE,YAAY,gBAC9C,QAAQ,IACoB,CAChC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;KAC1C;IACD,OAAO,KAA+B,CAAC;AACzC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"@floating-ui/react": "^0.22.0",
|
|
26
26
|
"@nivo/core": "^0.80.0",
|
|
27
27
|
"@nivo/line": "^0.80.0",
|
|
28
|
-
"@stream-io/i18n": "^0.0.1-alpha.
|
|
29
|
-
"@stream-io/video-client": "^0.0.1-alpha.
|
|
30
|
-
"@stream-io/video-react-bindings": "^0.0.1-alpha.
|
|
28
|
+
"@stream-io/i18n": "^0.0.1-alpha.36",
|
|
29
|
+
"@stream-io/video-client": "^0.0.1-alpha.160",
|
|
30
|
+
"@stream-io/video-react-bindings": "^0.0.1-alpha.47",
|
|
31
31
|
"clsx": "^1.2.1",
|
|
32
32
|
"rxjs": "~7.8.1"
|
|
33
33
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"react-dom": "^18.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@stream-io/video-styling": "^0.0.1-alpha.
|
|
39
|
+
"@stream-io/video-styling": "^0.0.1-alpha.30",
|
|
40
40
|
"@types/rimraf": "^3.0.2",
|
|
41
41
|
"react": "^18.2.0",
|
|
42
42
|
"react-dom": "^18.2.0",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"typedoc": "^0.24.7",
|
|
46
46
|
"typescript": "^4.9.5"
|
|
47
47
|
},
|
|
48
|
-
"version": "0.0.1-alpha.
|
|
48
|
+
"version": "0.0.1-alpha.52"
|
|
49
49
|
}
|
|
@@ -2,20 +2,39 @@ import { PropsWithChildren, useEffect, useState } from 'react';
|
|
|
2
2
|
import { Call, CallingState, JoinCallData } from '@stream-io/video-client';
|
|
3
3
|
import {
|
|
4
4
|
StreamCallProvider,
|
|
5
|
+
useConnectedUser,
|
|
5
6
|
useStreamVideoClient,
|
|
6
7
|
} from '@stream-io/video-react-bindings';
|
|
7
8
|
import { MediaDevicesProvider, MediaDevicesProviderProps } from '../../core';
|
|
8
9
|
|
|
9
10
|
type InitWithCallCID = {
|
|
10
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The call type.
|
|
13
|
+
*/
|
|
11
14
|
callType: string;
|
|
15
|
+
/**
|
|
16
|
+
* The call id.
|
|
17
|
+
*/
|
|
18
|
+
callId: string;
|
|
19
|
+
/**
|
|
20
|
+
* The call instance to use.
|
|
21
|
+
*/
|
|
12
22
|
call?: never;
|
|
13
23
|
};
|
|
14
24
|
|
|
15
25
|
type InitWithCallInstance = {
|
|
26
|
+
/**
|
|
27
|
+
* The call instance to use.
|
|
28
|
+
*/
|
|
16
29
|
call: Call | undefined;
|
|
17
|
-
|
|
30
|
+
/**
|
|
31
|
+
* The call type.
|
|
32
|
+
*/
|
|
18
33
|
callType?: never;
|
|
34
|
+
/**
|
|
35
|
+
* The call id.
|
|
36
|
+
*/
|
|
37
|
+
callId?: never;
|
|
19
38
|
};
|
|
20
39
|
|
|
21
40
|
type InitStreamCall = InitWithCallCID | InitWithCallInstance;
|
|
@@ -30,6 +49,28 @@ export type StreamCallProps = InitStreamCall & {
|
|
|
30
49
|
*/
|
|
31
50
|
autoJoin?: boolean;
|
|
32
51
|
|
|
52
|
+
/**
|
|
53
|
+
* If true, the call data will be loaded automatically from the server.
|
|
54
|
+
*
|
|
55
|
+
* This property is useful for the scenarios where you declaratively create
|
|
56
|
+
* the call instance by using the `callId` and `callType` props,
|
|
57
|
+
* and you have a UI that depends on the call metadata.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```jsx
|
|
61
|
+
* <StreamCall callId="call-id" callType="call-type" autoLoad>
|
|
62
|
+
* <CallMetadata /> // has access to `call.metadata` although not joined yet
|
|
63
|
+
* <CallUI />
|
|
64
|
+
* <CallControls />
|
|
65
|
+
* </StreamCall>
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* This property is ignored if you pass the `call` prop or enable `autoJoin`.
|
|
69
|
+
*
|
|
70
|
+
* @default true.
|
|
71
|
+
*/
|
|
72
|
+
autoLoad?: boolean;
|
|
73
|
+
|
|
33
74
|
/**
|
|
34
75
|
* An optional data to pass when joining the call.
|
|
35
76
|
*/
|
|
@@ -47,6 +88,7 @@ export const StreamCall = ({
|
|
|
47
88
|
callType,
|
|
48
89
|
call,
|
|
49
90
|
autoJoin = false,
|
|
91
|
+
autoLoad = true,
|
|
50
92
|
data,
|
|
51
93
|
mediaDevicesProviderProps,
|
|
52
94
|
}: PropsWithChildren<StreamCallProps>) => {
|
|
@@ -66,6 +108,34 @@ export const StreamCall = ({
|
|
|
66
108
|
}
|
|
67
109
|
}, [activeCall, callId, callType, client]);
|
|
68
110
|
|
|
111
|
+
const connectedUser = useConnectedUser();
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
// run the effect only when the user is connected and the call
|
|
114
|
+
// is created declaratively by using the `callId` and `callType` props.
|
|
115
|
+
if (!connectedUser) return;
|
|
116
|
+
if (activeCall && callType && callId && autoLoad && !autoJoin) {
|
|
117
|
+
activeCall
|
|
118
|
+
.getOrCreate({
|
|
119
|
+
ring: data?.ring,
|
|
120
|
+
data: data?.data,
|
|
121
|
+
members_limit: data?.members_limit,
|
|
122
|
+
})
|
|
123
|
+
.catch((err) => {
|
|
124
|
+
console.error(`Failed to get or create call`, err);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}, [
|
|
128
|
+
activeCall,
|
|
129
|
+
autoJoin,
|
|
130
|
+
autoLoad,
|
|
131
|
+
callId,
|
|
132
|
+
callType,
|
|
133
|
+
connectedUser,
|
|
134
|
+
data?.data,
|
|
135
|
+
data?.members_limit,
|
|
136
|
+
data?.ring,
|
|
137
|
+
]);
|
|
138
|
+
|
|
69
139
|
useEffect(() => {
|
|
70
140
|
if (autoJoin && activeCall?.state.callingState === CallingState.IDLE) {
|
|
71
141
|
activeCall.join(data).catch((err) => {
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
useCall,
|
|
21
21
|
useCallCallingState,
|
|
22
|
+
useCallMetadata,
|
|
22
23
|
useCallState,
|
|
23
24
|
} from '@stream-io/video-react-bindings';
|
|
24
25
|
|
|
@@ -114,7 +115,6 @@ const MediaDevicesContext = createContext<MediaDevicesContextAPI | null>(null);
|
|
|
114
115
|
* @internal
|
|
115
116
|
*/
|
|
116
117
|
export type MediaDevicesProviderProps = PropsWithChildren<{
|
|
117
|
-
enumerate?: boolean;
|
|
118
118
|
initialAudioEnabled?: boolean;
|
|
119
119
|
initialVideoEnabled?: boolean;
|
|
120
120
|
initialAudioInputDeviceId?: string;
|
|
@@ -141,6 +141,7 @@ export const MediaDevicesProvider = ({
|
|
|
141
141
|
const call = useCall();
|
|
142
142
|
const callingState = useCallCallingState();
|
|
143
143
|
const callState = useCallState();
|
|
144
|
+
const metadata = useCallMetadata();
|
|
144
145
|
const { localParticipant$ } = callState;
|
|
145
146
|
|
|
146
147
|
const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState<
|
|
@@ -163,6 +164,23 @@ export const MediaDevicesProvider = ({
|
|
|
163
164
|
initialVideoEnabled ? DEVICE_STATE.starting : DEVICE_STATE.uninitialized,
|
|
164
165
|
);
|
|
165
166
|
|
|
167
|
+
const settings = metadata?.settings;
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (
|
|
170
|
+
!settings ||
|
|
171
|
+
![CallingState.IDLE, CallingState.RINGING].includes(callingState)
|
|
172
|
+
) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const { audio, video } = settings;
|
|
176
|
+
if (typeof initialAudioEnabled === 'undefined' && audio.mic_default_on) {
|
|
177
|
+
setInitialAudioEnabled(audio.mic_default_on);
|
|
178
|
+
}
|
|
179
|
+
if (typeof initialVideoEnabled === 'undefined' && video.camera_default_on) {
|
|
180
|
+
setInitialVideoState(DEVICE_STATE.starting);
|
|
181
|
+
}
|
|
182
|
+
}, [callingState, initialAudioEnabled, initialVideoEnabled, settings]);
|
|
183
|
+
|
|
166
184
|
const publishVideoStream = useVideoPublisher({
|
|
167
185
|
initialVideoMuted: !initialVideoState.enabled,
|
|
168
186
|
videoDeviceId: selectedVideoDeviceId,
|