@microsoft/live-share-react 1.2.0-preview.0 → 1.2.1-preview.0
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/bin/live-hooks/useMediaSynchronizer.d.ts +2 -1
- package/bin/live-hooks/useMediaSynchronizer.d.ts.map +1 -1
- package/bin/live-hooks/useMediaSynchronizer.js +30 -6
- package/bin/live-hooks/useMediaSynchronizer.js.map +1 -1
- package/package.json +8 -8
- package/src/live-hooks/useMediaSynchronizer.ts +29 -8
|
@@ -17,7 +17,8 @@ import { IUseMediaSynchronizerResults } from "../types";
|
|
|
17
17
|
* @param initialTrack initial track to load. Either ExtendedMediaMetadata, trackId string, or null.
|
|
18
18
|
* @param allowedRoles Optional. Array of user roles that are eligible to modify group playback state.
|
|
19
19
|
* @param viewOnly Optional. Flag for whether or not the media synchronizer should be in viewOnly mode.
|
|
20
|
+
* @param canSendPositionUpdates Optional. Controls whether or not the local client is allowed to send position updates to the group.
|
|
20
21
|
* @returns IUseMediaSynchronizerResults object.
|
|
21
22
|
*/
|
|
22
|
-
export declare function useMediaSynchronizer(uniqueKey: string, mediaPlayerElement: React.RefObject<IMediaPlayer> | IMediaPlayer | string | null, initialTrack: Partial<ExtendedMediaMetadata> | string | null, allowedRoles?: UserMeetingRole[], viewOnly?: boolean): IUseMediaSynchronizerResults;
|
|
23
|
+
export declare function useMediaSynchronizer(uniqueKey: string, mediaPlayerElement: React.RefObject<IMediaPlayer> | IMediaPlayer | string | null, initialTrack: Partial<ExtendedMediaMetadata> | string | null, allowedRoles?: UserMeetingRole[], viewOnly?: boolean, canSendPositionUpdates?: boolean): IUseMediaSynchronizerResults;
|
|
23
24
|
//# sourceMappingURL=useMediaSynchronizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaSynchronizer.d.ts","sourceRoot":"","sources":["../../src/live-hooks/useMediaSynchronizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEH,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEH,qBAAqB,EACrB,YAAY,EAIf,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAOxD
|
|
1
|
+
{"version":3,"file":"useMediaSynchronizer.d.ts","sourceRoot":"","sources":["../../src/live-hooks/useMediaSynchronizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEH,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEH,qBAAqB,EACrB,YAAY,EAIf,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAOxD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,EAAE,MAAM,EACjB,kBAAkB,EACZ,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAC7B,YAAY,GACZ,MAAM,GACN,IAAI,EACV,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,GAAG,IAAI,EAC5D,YAAY,CAAC,EAAE,eAAe,EAAE,EAChC,QAAQ,CAAC,EAAE,OAAO,EAClB,sBAAsB,CAAC,EAAE,OAAO,GACjC,4BAA4B,CAiP9B"}
|
|
@@ -29,9 +29,10 @@ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } fr
|
|
|
29
29
|
* @param initialTrack initial track to load. Either ExtendedMediaMetadata, trackId string, or null.
|
|
30
30
|
* @param allowedRoles Optional. Array of user roles that are eligible to modify group playback state.
|
|
31
31
|
* @param viewOnly Optional. Flag for whether or not the media synchronizer should be in viewOnly mode.
|
|
32
|
+
* @param canSendPositionUpdates Optional. Controls whether or not the local client is allowed to send position updates to the group.
|
|
32
33
|
* @returns IUseMediaSynchronizerResults object.
|
|
33
34
|
*/
|
|
34
|
-
export function useMediaSynchronizer(uniqueKey, mediaPlayerElement, initialTrack, allowedRoles, viewOnly) {
|
|
35
|
+
export function useMediaSynchronizer(uniqueKey, mediaPlayerElement, initialTrack, allowedRoles, viewOnly, canSendPositionUpdates) {
|
|
35
36
|
/**
|
|
36
37
|
* User facing media synchronizer and non-user facing setter
|
|
37
38
|
*/
|
|
@@ -152,6 +153,10 @@ export function useMediaSynchronizer(uniqueKey, mediaPlayerElement, initialTrack
|
|
|
152
153
|
// Set synchronizer to view only mode provided by developer
|
|
153
154
|
synchronizer.viewOnly = viewOnly;
|
|
154
155
|
}
|
|
156
|
+
if (canSendPositionUpdates !== undefined) {
|
|
157
|
+
synchronizer.mediaSession.coordinator.canSendPositionUpdates =
|
|
158
|
+
canSendPositionUpdates;
|
|
159
|
+
}
|
|
155
160
|
if (mediaSession.initializeState ===
|
|
156
161
|
LiveDataObjectInitializeState.needed) {
|
|
157
162
|
// Start synchronizing the media session
|
|
@@ -189,12 +194,31 @@ export function useMediaSynchronizer(uniqueKey, mediaPlayerElement, initialTrack
|
|
|
189
194
|
* Change view in media synchronizer only if prop changes
|
|
190
195
|
*/
|
|
191
196
|
React.useEffect(() => {
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
+
if (!mediaSynchronizer)
|
|
198
|
+
return;
|
|
199
|
+
if (viewOnly === undefined)
|
|
200
|
+
return;
|
|
201
|
+
if (mediaSynchronizer.viewOnly === viewOnly)
|
|
202
|
+
return;
|
|
203
|
+
mediaSynchronizer.viewOnly = viewOnly;
|
|
197
204
|
}, [viewOnly, mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.viewOnly]);
|
|
205
|
+
/**
|
|
206
|
+
* Change canSendPositionUpdates when prop changes
|
|
207
|
+
*/
|
|
208
|
+
React.useEffect(() => {
|
|
209
|
+
if (!mediaSynchronizer)
|
|
210
|
+
return;
|
|
211
|
+
if (canSendPositionUpdates === undefined)
|
|
212
|
+
return;
|
|
213
|
+
if (mediaSynchronizer.mediaSession.coordinator
|
|
214
|
+
.canSendPositionUpdates === canSendPositionUpdates)
|
|
215
|
+
return;
|
|
216
|
+
mediaSynchronizer.mediaSession.coordinator.canSendPositionUpdates =
|
|
217
|
+
canSendPositionUpdates;
|
|
218
|
+
}, [
|
|
219
|
+
canSendPositionUpdates,
|
|
220
|
+
mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.mediaSession.coordinator.canSendPositionUpdates,
|
|
221
|
+
]);
|
|
198
222
|
return {
|
|
199
223
|
suspended: !!suspension,
|
|
200
224
|
mediaSynchronizer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaSynchronizer.js","sourceRoot":"","sources":["../../src/live-hooks/useMediaSynchronizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;AAEH,OAAO,EACH,6BAA6B,GAEhC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIH,gBAAgB,GAGnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACH,6BAA6B,EAC7B,kCAAkC,GACrC,MAAM,aAAa,CAAC;AAErB
|
|
1
|
+
{"version":3,"file":"useMediaSynchronizer.js","sourceRoot":"","sources":["../../src/live-hooks/useMediaSynchronizer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/live-share-react",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1-preview.0",
|
|
4
4
|
"description": "Build collaborative React apps using Microsoft's Fluid & Live Share frameworks with ease.",
|
|
5
5
|
"author": "Microsoft",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"typecheck": "tsc"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@microsoft/live-share-turbo": "1.2.
|
|
15
|
+
"@microsoft/live-share-turbo": "1.2.1-preview.0",
|
|
16
16
|
"url": "^0.11.0",
|
|
17
17
|
"uuid": "^9.0.0"
|
|
18
18
|
},
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"@babel/core": "^7.21.8",
|
|
21
21
|
"@fluidframework/azure-client": "^1.1.1",
|
|
22
22
|
"@fluidframework/test-client-utils": "^1.3.6",
|
|
23
|
-
"@microsoft/live-share": "1.2.
|
|
24
|
-
"@microsoft/live-share-canvas": "1.2.
|
|
25
|
-
"@microsoft/live-share-media": "1.2.
|
|
23
|
+
"@microsoft/live-share": "1.2.1",
|
|
24
|
+
"@microsoft/live-share-canvas": "1.2.1",
|
|
25
|
+
"@microsoft/live-share-media": "1.2.1",
|
|
26
26
|
"@types/react": "^18.0.0",
|
|
27
27
|
"@types/react-dom": "^18.0.0",
|
|
28
28
|
"@types/uuid": "^9.0.1",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@fluidframework/azure-client": "^1.0.0",
|
|
35
|
-
"@microsoft/live-share": "1.2.
|
|
36
|
-
"@microsoft/live-share-canvas": "1.2.
|
|
37
|
-
"@microsoft/live-share-media": "1.2.
|
|
35
|
+
"@microsoft/live-share": "1.2.1",
|
|
36
|
+
"@microsoft/live-share-canvas": "1.2.1",
|
|
37
|
+
"@microsoft/live-share-media": "1.2.1",
|
|
38
38
|
"fluid-framework": "^1.2.3",
|
|
39
39
|
"react": "^16.8.0 || ^17 || ^18",
|
|
40
40
|
"react-dom": "^16.8.0 || ^17 || ^18"
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
* @param initialTrack initial track to load. Either ExtendedMediaMetadata, trackId string, or null.
|
|
37
37
|
* @param allowedRoles Optional. Array of user roles that are eligible to modify group playback state.
|
|
38
38
|
* @param viewOnly Optional. Flag for whether or not the media synchronizer should be in viewOnly mode.
|
|
39
|
+
* @param canSendPositionUpdates Optional. Controls whether or not the local client is allowed to send position updates to the group.
|
|
39
40
|
* @returns IUseMediaSynchronizerResults object.
|
|
40
41
|
*/
|
|
41
42
|
export function useMediaSynchronizer(
|
|
@@ -47,7 +48,8 @@ export function useMediaSynchronizer(
|
|
|
47
48
|
| null,
|
|
48
49
|
initialTrack: Partial<ExtendedMediaMetadata> | string | null,
|
|
49
50
|
allowedRoles?: UserMeetingRole[],
|
|
50
|
-
viewOnly?: boolean
|
|
51
|
+
viewOnly?: boolean,
|
|
52
|
+
canSendPositionUpdates?: boolean
|
|
51
53
|
): IUseMediaSynchronizerResults {
|
|
52
54
|
/**
|
|
53
55
|
* User facing media synchronizer and non-user facing setter
|
|
@@ -213,6 +215,10 @@ export function useMediaSynchronizer(
|
|
|
213
215
|
// Set synchronizer to view only mode provided by developer
|
|
214
216
|
synchronizer.viewOnly = viewOnly;
|
|
215
217
|
}
|
|
218
|
+
if (canSendPositionUpdates !== undefined) {
|
|
219
|
+
synchronizer.mediaSession.coordinator.canSendPositionUpdates =
|
|
220
|
+
canSendPositionUpdates;
|
|
221
|
+
}
|
|
216
222
|
|
|
217
223
|
if (
|
|
218
224
|
mediaSession.initializeState ===
|
|
@@ -251,15 +257,30 @@ export function useMediaSynchronizer(
|
|
|
251
257
|
* Change view in media synchronizer only if prop changes
|
|
252
258
|
*/
|
|
253
259
|
React.useEffect(() => {
|
|
254
|
-
if (
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
) {
|
|
259
|
-
mediaSynchronizer.viewOnly = !!viewOnly;
|
|
260
|
-
}
|
|
260
|
+
if (!mediaSynchronizer) return;
|
|
261
|
+
if (viewOnly === undefined) return;
|
|
262
|
+
if (mediaSynchronizer.viewOnly === viewOnly) return;
|
|
263
|
+
mediaSynchronizer.viewOnly = viewOnly;
|
|
261
264
|
}, [viewOnly, mediaSynchronizer?.viewOnly]);
|
|
262
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Change canSendPositionUpdates when prop changes
|
|
268
|
+
*/
|
|
269
|
+
React.useEffect(() => {
|
|
270
|
+
if (!mediaSynchronizer) return;
|
|
271
|
+
if (canSendPositionUpdates === undefined) return;
|
|
272
|
+
if (
|
|
273
|
+
mediaSynchronizer.mediaSession.coordinator
|
|
274
|
+
.canSendPositionUpdates === canSendPositionUpdates
|
|
275
|
+
)
|
|
276
|
+
return;
|
|
277
|
+
mediaSynchronizer.mediaSession.coordinator.canSendPositionUpdates =
|
|
278
|
+
canSendPositionUpdates;
|
|
279
|
+
}, [
|
|
280
|
+
canSendPositionUpdates,
|
|
281
|
+
mediaSynchronizer?.mediaSession.coordinator.canSendPositionUpdates,
|
|
282
|
+
]);
|
|
283
|
+
|
|
263
284
|
return {
|
|
264
285
|
suspended: !!suspension,
|
|
265
286
|
mediaSynchronizer,
|