@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 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
- callId: string;
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
- callId?: never;
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;AAqC7E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,yBAAyB,GACU,EAAE,EAAE;IACvC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAmB,GAAG,EAAE;QAClE,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,MAAM,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,aAAa,CAAC,OAAO,CAAC,CAAC;SACxB;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,IAAI,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,YAAY,MAAK,YAAY,CAAC,IAAI,EAAE;YACpE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAEjC,OAAO,CACL,KAAC,kBAAkB,kBAAC,IAAI,EAAE,UAAU,gBAClC,KAAC,oBAAoB,oBAAK,yBAAyB,cAChD,QAAQ,IACY,IACJ,CACtB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"StreamCall.js","sourceRoot":"","sources":["../../../../src/components/StreamCall/StreamCall.tsx"],"names":[],"mappings":"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"}
@@ -56,7 +56,6 @@ export type MediaDevicesContextAPI = {
56
56
  * @internal
57
57
  */
58
58
  export type MediaDevicesProviderProps = PropsWithChildren<{
59
- enumerate?: boolean;
60
59
  initialAudioEnabled?: boolean;
61
60
  initialVideoEnabled?: boolean;
62
61
  initialAudioInputDeviceId?: string;
@@ -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":"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"}
1
+ {"version":3,"file":"MediaDevicesContext.js","sourceRoot":"","sources":["../../../../src/core/contexts/MediaDevicesContext.tsx"],"names":[],"mappings":"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"}
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.34",
29
- "@stream-io/video-client": "^0.0.1-alpha.158",
30
- "@stream-io/video-react-bindings": "^0.0.1-alpha.45",
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.28",
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.50"
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
- callId: string;
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
- callId?: never;
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,