@microsoft/live-share-react 2.0.0-internal.2 → 2.0.0-internal.20
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/LICENSE +64 -61
- package/README.md +175 -164
- package/bin/esm/index.d.ts +7 -0
- package/bin/esm/index.d.ts.map +1 -0
- package/bin/esm/index.js +7 -0
- package/bin/esm/index.js.map +1 -0
- package/bin/esm/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
- package/bin/esm/interfaces/LiveInterfaceExtensions.js.map +1 -0
- package/bin/esm/interfaces/index.d.ts +2 -0
- package/bin/esm/interfaces/index.d.ts.map +1 -0
- package/bin/esm/interfaces/index.js +2 -0
- package/bin/esm/interfaces/index.js.map +1 -0
- package/bin/esm/internal/errors.d.ts.map +1 -0
- package/bin/esm/internal/errors.js.map +1 -0
- package/bin/esm/internal/index.d.ts +3 -0
- package/bin/esm/internal/index.d.ts.map +1 -0
- package/bin/esm/internal/index.js +3 -0
- package/bin/esm/internal/index.js.map +1 -0
- package/bin/{internal → esm/internal}/type-guards.d.ts +1 -1
- package/bin/esm/internal/type-guards.d.ts.map +1 -0
- package/bin/esm/internal/type-guards.js.map +1 -0
- package/bin/esm/live-hooks/index.d.ts +8 -0
- package/bin/esm/live-hooks/index.d.ts.map +1 -0
- package/bin/esm/live-hooks/index.js +8 -0
- package/bin/esm/live-hooks/index.js.map +1 -0
- package/bin/esm/live-hooks/useLiveCanvas.d.ts +80 -0
- package/bin/esm/live-hooks/useLiveCanvas.d.ts.map +1 -0
- package/bin/esm/live-hooks/useLiveCanvas.js +237 -0
- package/bin/esm/live-hooks/useLiveCanvas.js.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveEvent.d.ts +37 -1
- package/bin/esm/live-hooks/useLiveEvent.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveEvent.js +45 -18
- package/bin/esm/live-hooks/useLiveEvent.js.map +1 -0
- package/bin/esm/live-hooks/useLiveFollowMode.d.ts +163 -0
- package/bin/esm/live-hooks/useLiveFollowMode.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveFollowMode.js +173 -39
- package/bin/esm/live-hooks/useLiveFollowMode.js.map +1 -0
- package/bin/esm/live-hooks/useLivePresence.d.ts +76 -0
- package/bin/esm/live-hooks/useLivePresence.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLivePresence.js +74 -25
- package/bin/esm/live-hooks/useLivePresence.js.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveState.d.ts +46 -1
- package/bin/esm/live-hooks/useLiveState.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveState.js +58 -18
- package/bin/esm/live-hooks/useLiveState.js.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveTimer.d.ts +56 -1
- package/bin/esm/live-hooks/useLiveTimer.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useLiveTimer.js +80 -34
- package/bin/esm/live-hooks/useLiveTimer.js.map +1 -0
- package/bin/esm/live-hooks/useMediaSynchronizer.d.ts +86 -0
- package/bin/esm/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
- package/bin/{live-hooks → esm/live-hooks}/useMediaSynchronizer.js +89 -37
- package/bin/esm/live-hooks/useMediaSynchronizer.js.map +1 -0
- package/bin/{providers → esm/providers}/AzureProvider.d.ts +9 -9
- package/bin/esm/providers/AzureProvider.d.ts.map +1 -0
- package/bin/{providers → esm/providers}/AzureProvider.js +28 -33
- package/bin/esm/providers/AzureProvider.js.map +1 -0
- package/bin/{providers → esm/providers}/LiveShareProvider.d.ts +106 -4
- package/bin/esm/providers/LiveShareProvider.d.ts.map +1 -0
- package/bin/esm/providers/LiveShareProvider.js +196 -0
- package/bin/esm/providers/LiveShareProvider.js.map +1 -0
- package/bin/esm/providers/index.d.ts +3 -0
- package/bin/esm/providers/index.d.ts.map +1 -0
- package/bin/esm/providers/index.js +3 -0
- package/bin/esm/providers/index.js.map +1 -0
- package/bin/esm/shared-hooks/index.d.ts +7 -0
- package/bin/esm/shared-hooks/index.d.ts.map +1 -0
- package/bin/esm/shared-hooks/index.js +7 -0
- package/bin/esm/shared-hooks/index.js.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts +3 -0
- package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-constants.js +3 -0
- package/bin/esm/shared-hooks/internals/tree-node-constants.js.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-types.d.ts +10 -0
- package/bin/esm/shared-hooks/internals/tree-node-types.d.ts.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-types.js +18 -0
- package/bin/esm/shared-hooks/internals/tree-node-types.js.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts +33 -0
- package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts.map +1 -0
- package/bin/esm/shared-hooks/internals/tree-node-utils.js +186 -0
- package/bin/esm/shared-hooks/internals/tree-node-utils.js.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useDynamicDDS.d.ts +4 -4
- package/bin/esm/shared-hooks/useDynamicDDS.d.ts.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useDynamicDDS.js +22 -22
- package/bin/esm/shared-hooks/useDynamicDDS.js.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedMap.d.ts +4 -2
- package/bin/esm/shared-hooks/useSharedMap.d.ts.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedMap.js +28 -14
- package/bin/esm/shared-hooks/useSharedMap.js.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedState.d.ts +1 -1
- package/bin/esm/shared-hooks/useSharedState.d.ts.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedState.js +2 -2
- package/bin/esm/shared-hooks/useSharedState.js.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedStateRegistry.d.ts +1 -1
- package/bin/esm/shared-hooks/useSharedStateRegistry.d.ts.map +1 -0
- package/bin/{shared-hooks → esm/shared-hooks}/useSharedStateRegistry.js +35 -24
- package/bin/esm/shared-hooks/useSharedStateRegistry.js.map +1 -0
- package/bin/esm/shared-hooks/useSharedTree.d.ts +57 -0
- package/bin/esm/shared-hooks/useSharedTree.d.ts.map +1 -0
- package/bin/esm/shared-hooks/useSharedTree.js +117 -0
- package/bin/esm/shared-hooks/useSharedTree.js.map +1 -0
- package/bin/esm/shared-hooks/useTreeNode.d.ts +96 -0
- package/bin/esm/shared-hooks/useTreeNode.d.ts.map +1 -0
- package/bin/esm/shared-hooks/useTreeNode.js +132 -0
- package/bin/esm/shared-hooks/useTreeNode.js.map +1 -0
- package/bin/{types → esm/types}/ActionTypes.d.ts +7 -7
- package/bin/esm/types/ActionTypes.d.ts.map +1 -0
- package/bin/esm/types/ActionTypes.js.map +1 -0
- package/bin/esm/types/FluidMap.d.ts +151 -0
- package/bin/esm/types/FluidMap.d.ts.map +1 -0
- package/bin/esm/types/FluidMap.js +24 -0
- package/bin/esm/types/FluidMap.js.map +1 -0
- package/bin/esm/types/PropTypes.d.ts +56 -0
- package/bin/esm/types/PropTypes.d.ts.map +1 -0
- package/bin/esm/types/PropTypes.js.map +1 -0
- package/bin/{types → esm/types}/ResultTypes.d.ts +62 -18
- package/bin/esm/types/ResultTypes.d.ts.map +1 -0
- package/bin/esm/types/ResultTypes.js.map +1 -0
- package/bin/esm/types/index.d.ts +4 -0
- package/bin/esm/types/index.d.ts.map +1 -0
- package/bin/esm/types/index.js +4 -0
- package/bin/esm/types/index.js.map +1 -0
- package/bin/esm/utils/index.d.ts +2 -0
- package/bin/esm/utils/index.d.ts.map +1 -0
- package/bin/esm/utils/index.js +2 -0
- package/bin/esm/utils/index.js.map +1 -0
- package/bin/esm/utils/type-check.d.ts.map +1 -0
- package/bin/{utils → esm/utils}/type-check.js +1 -1
- package/bin/esm/utils/type-check.js.map +1 -0
- package/package.json +51 -47
- package/src/index.ts +6 -6
- package/src/interfaces/index.ts +1 -1
- package/src/internal/index.ts +2 -2
- package/src/internal/type-guards.ts +1 -1
- package/src/live-hooks/index.ts +7 -7
- package/src/live-hooks/useLiveCanvas.ts +154 -82
- package/src/live-hooks/useLiveEvent.ts +43 -7
- package/src/live-hooks/useLiveFollowMode.ts +149 -6
- package/src/live-hooks/useLivePresence.ts +80 -17
- package/src/live-hooks/useLiveState.ts +54 -6
- package/src/live-hooks/useLiveTimer.ts +59 -4
- package/src/live-hooks/useMediaSynchronizer.ts +71 -6
- package/src/providers/AzureProvider.tsx +21 -21
- package/src/providers/LiveShareProvider.tsx +115 -13
- package/src/providers/index.ts +2 -2
- package/src/shared-hooks/index.ts +6 -4
- package/src/shared-hooks/internals/tree-node-constants.ts +2 -0
- package/src/shared-hooks/internals/tree-node-types.ts +26 -0
- package/src/shared-hooks/internals/tree-node-utils.ts +269 -0
- package/src/shared-hooks/useDynamicDDS.ts +28 -17
- package/src/shared-hooks/useSharedMap.ts +42 -17
- package/src/shared-hooks/useSharedState.ts +6 -3
- package/src/shared-hooks/useSharedStateRegistry.ts +44 -22
- package/src/shared-hooks/useSharedTree.ts +144 -0
- package/src/shared-hooks/useTreeNode.ts +147 -0
- package/src/types/ActionTypes.ts +13 -9
- package/src/types/FluidMap.ts +169 -0
- package/src/types/PropTypes.ts +57 -0
- package/src/types/ResultTypes.ts +88 -17
- package/src/types/index.ts +3 -3
- package/src/utils/index.ts +1 -1
- package/tsconfig.json +64 -70
- package/.nycrc.json +0 -10
- package/bin/index.d.ts +0 -7
- package/bin/index.d.ts.map +0 -1
- package/bin/index.js +0 -7
- package/bin/index.js.map +0 -1
- package/bin/interfaces/LiveInterfaceExtensions.d.ts.map +0 -1
- package/bin/interfaces/LiveInterfaceExtensions.js.map +0 -1
- package/bin/interfaces/index.d.ts +0 -2
- package/bin/interfaces/index.d.ts.map +0 -1
- package/bin/interfaces/index.js +0 -2
- package/bin/interfaces/index.js.map +0 -1
- package/bin/internal/errors.d.ts.map +0 -1
- package/bin/internal/errors.js.map +0 -1
- package/bin/internal/index.d.ts +0 -3
- package/bin/internal/index.d.ts.map +0 -1
- package/bin/internal/index.js +0 -3
- package/bin/internal/index.js.map +0 -1
- package/bin/internal/type-guards.d.ts.map +0 -1
- package/bin/internal/type-guards.js.map +0 -1
- package/bin/live-hooks/index.d.ts +0 -8
- package/bin/live-hooks/index.d.ts.map +0 -1
- package/bin/live-hooks/index.js +0 -8
- package/bin/live-hooks/index.js.map +0 -1
- package/bin/live-hooks/useLiveCanvas.d.ts +0 -29
- package/bin/live-hooks/useLiveCanvas.d.ts.map +0 -1
- package/bin/live-hooks/useLiveCanvas.js +0 -160
- package/bin/live-hooks/useLiveCanvas.js.map +0 -1
- package/bin/live-hooks/useLiveEvent.d.ts.map +0 -1
- package/bin/live-hooks/useLiveEvent.js.map +0 -1
- package/bin/live-hooks/useLiveFollowMode.d.ts +0 -24
- package/bin/live-hooks/useLiveFollowMode.d.ts.map +0 -1
- package/bin/live-hooks/useLiveFollowMode.js.map +0 -1
- package/bin/live-hooks/useLivePresence.d.ts +0 -26
- package/bin/live-hooks/useLivePresence.d.ts.map +0 -1
- package/bin/live-hooks/useLivePresence.js.map +0 -1
- package/bin/live-hooks/useLiveState.d.ts.map +0 -1
- package/bin/live-hooks/useLiveState.js.map +0 -1
- package/bin/live-hooks/useLiveTimer.d.ts.map +0 -1
- package/bin/live-hooks/useLiveTimer.js.map +0 -1
- package/bin/live-hooks/useMediaSynchronizer.d.ts +0 -25
- package/bin/live-hooks/useMediaSynchronizer.d.ts.map +0 -1
- package/bin/live-hooks/useMediaSynchronizer.js.map +0 -1
- package/bin/providers/AzureProvider.d.ts.map +0 -1
- package/bin/providers/AzureProvider.js.map +0 -1
- package/bin/providers/LiveShareProvider.d.ts.map +0 -1
- package/bin/providers/LiveShareProvider.js +0 -95
- package/bin/providers/LiveShareProvider.js.map +0 -1
- package/bin/providers/index.d.ts +0 -3
- package/bin/providers/index.d.ts.map +0 -1
- package/bin/providers/index.js +0 -3
- package/bin/providers/index.js.map +0 -1
- package/bin/shared-hooks/index.d.ts +0 -5
- package/bin/shared-hooks/index.d.ts.map +0 -1
- package/bin/shared-hooks/index.js +0 -5
- package/bin/shared-hooks/index.js.map +0 -1
- package/bin/shared-hooks/useDynamicDDS.d.ts.map +0 -1
- package/bin/shared-hooks/useDynamicDDS.js.map +0 -1
- package/bin/shared-hooks/useSharedMap.d.ts.map +0 -1
- package/bin/shared-hooks/useSharedMap.js.map +0 -1
- package/bin/shared-hooks/useSharedState.d.ts.map +0 -1
- package/bin/shared-hooks/useSharedState.js.map +0 -1
- package/bin/shared-hooks/useSharedStateRegistry.d.ts.map +0 -1
- package/bin/shared-hooks/useSharedStateRegistry.js.map +0 -1
- package/bin/types/ActionTypes.d.ts.map +0 -1
- package/bin/types/ActionTypes.js.map +0 -1
- package/bin/types/PropTypes.d.ts +0 -8
- package/bin/types/PropTypes.d.ts.map +0 -1
- package/bin/types/PropTypes.js.map +0 -1
- package/bin/types/ResultTypes.d.ts.map +0 -1
- package/bin/types/ResultTypes.js.map +0 -1
- package/bin/types/index.d.ts +0 -4
- package/bin/types/index.d.ts.map +0 -1
- package/bin/types/index.js +0 -4
- package/bin/types/index.js.map +0 -1
- package/bin/utils/index.d.ts +0 -2
- package/bin/utils/index.d.ts.map +0 -1
- package/bin/utils/index.js +0 -2
- package/bin/utils/index.js.map +0 -1
- package/bin/utils/type-check.d.ts.map +0 -1
- package/bin/utils/type-check.js.map +0 -1
- package/tsconfig.build.json +0 -6
- /package/bin/{interfaces → esm/interfaces}/LiveInterfaceExtensions.d.ts +0 -0
- /package/bin/{interfaces → esm/interfaces}/LiveInterfaceExtensions.js +0 -0
- /package/bin/{internal → esm/internal}/errors.d.ts +0 -0
- /package/bin/{internal → esm/internal}/errors.js +0 -0
- /package/bin/{internal → esm/internal}/type-guards.js +0 -0
- /package/bin/{types → esm/types}/ActionTypes.js +0 -0
- /package/bin/{types → esm/types}/PropTypes.js +0 -0
- /package/bin/{types → esm/types}/ResultTypes.js +0 -0
- /package/bin/{utils → esm/utils}/type-check.d.ts +0 -0
|
@@ -2,51 +2,54 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
5
|
import React from "react";
|
|
15
|
-
import { useFluidObjectsContext } from "../providers";
|
|
6
|
+
import { useFluidObjectsContext } from "../providers/AzureProvider.js";
|
|
16
7
|
/**
|
|
17
8
|
* Hook to gets or creates a DDS that corresponds to a given uniqueKey string.
|
|
18
9
|
*
|
|
19
10
|
* @remarks
|
|
20
11
|
* This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
|
|
21
12
|
*
|
|
22
|
-
* @template T Type of Fluid
|
|
13
|
+
* @template T Type of Fluid SharedObjectKind type to load. Must conform to IFluidLoadable interface.
|
|
23
14
|
* @param uniqueKey uniqueKey value for the data object
|
|
24
|
-
* @param
|
|
15
|
+
* @param objectKind Fluid SharedObjectKind<T> to create/load.
|
|
25
16
|
* @param onFirstInitialize Optional. Callback function for when the DDS is first loaded
|
|
26
17
|
* @returns the DDS object, which is of type T when loaded and undefined while loading
|
|
27
18
|
*/
|
|
28
|
-
export function useDynamicDDS(uniqueKey,
|
|
19
|
+
export function useDynamicDDS(uniqueKey, objectClass, onFirstInitialize) {
|
|
29
20
|
const [dds, setDDS] = React.useState();
|
|
30
21
|
const [error, setError] = React.useState();
|
|
31
22
|
/**
|
|
32
23
|
* Import container and DDS object register callbacks from AzureProvider.
|
|
33
24
|
*/
|
|
34
25
|
const { container, clientRef } = useFluidObjectsContext();
|
|
26
|
+
const mountedRef = React.useRef(false);
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
mountedRef.current = true;
|
|
29
|
+
return () => {
|
|
30
|
+
mountedRef.current = false;
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
const getDDSPromisesRef = React.useRef(new Map());
|
|
35
34
|
/**
|
|
36
35
|
* Once container is available, this effect will register the setter method so that the DDS loaded
|
|
37
36
|
* from `dynamicObjects` that matches `uniqueKey` can be passed back to this hook. If one does not yet exist,
|
|
38
37
|
* a new DDS is automatically created. If multiple users try to create a DDS at the same time when this component first
|
|
39
|
-
* mounts, `live-share
|
|
38
|
+
* mounts, `live-share` ensures it will ultimately self correct using last-writer wins.
|
|
40
39
|
*/
|
|
41
40
|
React.useEffect(() => {
|
|
42
41
|
if (container === undefined)
|
|
43
42
|
return;
|
|
44
|
-
let mounted = true;
|
|
45
43
|
// Callback method to set the `initialData` into the map when the DDS is first created.
|
|
46
|
-
const onGetDDS = () =>
|
|
44
|
+
const onGetDDS = async () => {
|
|
47
45
|
try {
|
|
48
|
-
|
|
49
|
-
if (
|
|
46
|
+
let getPromise = getDDSPromisesRef.current.get(uniqueKey);
|
|
47
|
+
if (!getPromise) {
|
|
48
|
+
getPromise = clientRef.current.getDDS(uniqueKey, objectClass, onFirstInitialize);
|
|
49
|
+
getDDSPromisesRef.current.set(uniqueKey, getPromise);
|
|
50
|
+
}
|
|
51
|
+
const dds = await getPromise;
|
|
52
|
+
if (mountedRef.current) {
|
|
50
53
|
setDDS(dds);
|
|
51
54
|
}
|
|
52
55
|
}
|
|
@@ -58,11 +61,8 @@ export function useDynamicDDS(uniqueKey, loadableObjectClass, onFirstInitialize)
|
|
|
58
61
|
setError(new Error("useDynamicDDS: an unknown error occurred while getting the DDS"));
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
|
-
});
|
|
62
|
-
onGetDDS();
|
|
63
|
-
return () => {
|
|
64
|
-
mounted = false;
|
|
65
64
|
};
|
|
65
|
+
onGetDDS();
|
|
66
66
|
}, [container, uniqueKey, onFirstInitialize]);
|
|
67
67
|
return {
|
|
68
68
|
dds,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDynamicDDS.js","sourceRoot":"","sources":["../../../src/shared-hooks/useDynamicDDS.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAGzB,SAAiB,EACjB,WAAgC,EAChC,iBAAoC;IAKpC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAK,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAS,CAAC;IAClD;;OAEG;IACH,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAE1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,EAAE;YACR,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAA0B,IAAI,GAAG,EAAE,CAAC,CAAC;IAE3E;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,uFAAuF;QACvF,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC;gBACD,IAAI,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CACjC,SAAS,EACT,WAAW,EACX,iBAAiB,CACpB,CAAC;oBACF,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC;gBAC7B,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CACJ,IAAI,KAAK,CACL,gEAAgE,CACnE,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE9C,OAAO;QACH,GAAG;QACH,KAAK;KACR,CAAC;AACN,CAAC"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
|
-
import { IUseSharedMapResults, SharedMapInitialData } from "../types";
|
|
5
|
+
import { IUseSharedMapResults, SharedMapInitialData } from "../types/index.js";
|
|
6
6
|
/**
|
|
7
|
+
* @deprecated use {@link useSharedTree} instead.
|
|
8
|
+
*
|
|
7
9
|
* React hook for using a Fluid `SharedMap`.
|
|
8
10
|
*
|
|
9
11
|
* @remarks
|
|
@@ -17,7 +19,7 @@ import { IUseSharedMapResults, SharedMapInitialData } from "../types";
|
|
|
17
19
|
* will be created, otherwise it will use the existing one.
|
|
18
20
|
* @param initialData a JS Map, entries array, or JSON object to insert into the `SharedMap` when creating
|
|
19
21
|
* the DDS for the first time.
|
|
20
|
-
* @returns
|
|
22
|
+
* @returns the Fluid `sharedMap`.
|
|
21
23
|
*/
|
|
22
24
|
export declare function useSharedMap<TData = any>(uniqueKey: string, initialData?: SharedMapInitialData<TData>): IUseSharedMapResults<TData>;
|
|
23
25
|
//# sourceMappingURL=useSharedMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedMap.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAU/E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAG,GAAG,EACpC,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAC1C,oBAAoB,CAAC,KAAK,CAAC,CAyH7B"}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
import React from "react";
|
|
6
|
-
import { isEntries, isJSON, isMap } from "../utils";
|
|
7
|
-
import { useDynamicDDS } from "./useDynamicDDS";
|
|
8
|
-
import { SharedMap } from "fluid-framework";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
6
|
+
import { isEntries, isJSON, isMap } from "../utils/index.js";
|
|
7
|
+
import { useDynamicDDS } from "./useDynamicDDS.js";
|
|
8
|
+
import { SharedMap } from "fluid-framework/legacy";
|
|
9
|
+
import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } from "../internal/errors.js";
|
|
10
|
+
import { useFluidObjectsContext } from "../providers/AzureProvider.js";
|
|
11
11
|
/**
|
|
12
|
+
* @deprecated use {@link useSharedTree} instead.
|
|
13
|
+
*
|
|
12
14
|
* React hook for using a Fluid `SharedMap`.
|
|
13
15
|
*
|
|
14
16
|
* @remarks
|
|
@@ -22,13 +24,9 @@ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } fr
|
|
|
22
24
|
* will be created, otherwise it will use the existing one.
|
|
23
25
|
* @param initialData a JS Map, entries array, or JSON object to insert into the `SharedMap` when creating
|
|
24
26
|
* the DDS for the first time.
|
|
25
|
-
* @returns
|
|
27
|
+
* @returns the Fluid `sharedMap`.
|
|
26
28
|
*/
|
|
27
29
|
export function useSharedMap(uniqueKey, initialData) {
|
|
28
|
-
/**
|
|
29
|
-
* Stateful readonly map (user facing) with most recent values from `SharedMap` and its setter method.
|
|
30
|
-
*/
|
|
31
|
-
const [map, setMap] = React.useState(getInitialData(initialData));
|
|
32
30
|
const onFirstInitialize = React.useCallback((newDDS) => {
|
|
33
31
|
/**
|
|
34
32
|
* Callback method to set the `initialData` into the map when the `SharedMap` is first created.
|
|
@@ -43,6 +41,18 @@ export function useSharedMap(uniqueKey, initialData) {
|
|
|
43
41
|
*/
|
|
44
42
|
const { dds: sharedMap } = useDynamicDDS(uniqueKey, SharedMap, onFirstInitialize);
|
|
45
43
|
const { container } = useFluidObjectsContext();
|
|
44
|
+
/**
|
|
45
|
+
* User facing: get a value from the Fluid `SharedMap`.
|
|
46
|
+
*/
|
|
47
|
+
const getEntry = React.useCallback((key) => {
|
|
48
|
+
if (!container) {
|
|
49
|
+
throw new ActionContainerNotJoinedError("sharedMap", "getEntry");
|
|
50
|
+
}
|
|
51
|
+
if (sharedMap === undefined) {
|
|
52
|
+
throw new ActionLiveDataObjectUndefinedError("sharedMap", "getEntry");
|
|
53
|
+
}
|
|
54
|
+
return sharedMap.get(key);
|
|
55
|
+
}, [container, sharedMap]);
|
|
46
56
|
/**
|
|
47
57
|
* User facing: set a value to the Fluid `SharedMap`.
|
|
48
58
|
*/
|
|
@@ -67,27 +77,31 @@ export function useSharedMap(uniqueKey, initialData) {
|
|
|
67
77
|
}
|
|
68
78
|
sharedMap.delete(key);
|
|
69
79
|
}, [container, sharedMap]);
|
|
80
|
+
const [sharedMapProxy, setSharedMapProxy] = React.useState();
|
|
70
81
|
// Setup change listeners, initial values, etc.
|
|
71
82
|
React.useEffect(() => {
|
|
72
83
|
if (!sharedMap)
|
|
73
84
|
return;
|
|
85
|
+
setSharedMapProxy(sharedMap);
|
|
86
|
+
class SharedMapProxyHandler {
|
|
87
|
+
}
|
|
74
88
|
// Register valueChanged listener for `SharedMap`.
|
|
75
89
|
const onValueChanged = () => {
|
|
76
|
-
|
|
90
|
+
setSharedMapProxy(new Proxy(sharedMap, new SharedMapProxyHandler()));
|
|
77
91
|
};
|
|
78
92
|
sharedMap.on("valueChanged", onValueChanged);
|
|
79
93
|
// Get initial values from `SharedMap`.
|
|
80
94
|
onValueChanged();
|
|
81
95
|
return () => {
|
|
82
96
|
// Cleanup on component unmount.
|
|
83
|
-
sharedMap
|
|
97
|
+
sharedMap?.off("valueChanged", onValueChanged);
|
|
84
98
|
};
|
|
85
99
|
}, [sharedMap]);
|
|
86
100
|
return {
|
|
87
|
-
|
|
101
|
+
sharedMap: sharedMapProxy,
|
|
102
|
+
getEntry,
|
|
88
103
|
setEntry,
|
|
89
104
|
deleteEntry,
|
|
90
|
-
sharedMap,
|
|
91
105
|
};
|
|
92
106
|
}
|
|
93
107
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedMap.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
|
-
import { DisposeSharedStateAction, SetSharedStateAction } from "../types";
|
|
5
|
+
import { DisposeSharedStateAction, SetSharedStateAction } from "../types/index.js";
|
|
6
6
|
/**
|
|
7
7
|
* Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
|
|
8
8
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedState.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,GAAG,EAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,GAChB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAkExD"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
import React from "react";
|
|
6
|
-
import { useFluidObjectsContext } from "../providers";
|
|
6
|
+
import { useFluidObjectsContext } from "../providers/index.js";
|
|
7
7
|
import { v4 as uuid } from "uuid";
|
|
8
|
-
import { isPrevStateCallback } from "../internal";
|
|
8
|
+
import { isPrevStateCallback } from "../internal/index.js";
|
|
9
9
|
/**
|
|
10
10
|
* Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
|
|
11
11
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedState.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC1B,SAAiB,EACjB,YAAe;IAEf;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpE;;OAEG;IACH,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C;;OAEG;IACH,MAAM,EACF,4BAA4B,EAC5B,8BAA8B,EAC9B,iBAAiB,EACjB,iBAAiB,GACpB,GAAG,sBAAsB,EAAE,CAAC;IAE7B;;OAEG;IACH,MAAM,cAAc,GAA4B,KAAK,CAAC,WAAW,CAC7D,CAAC,KAAgC,EAAE,EAAE;QACjC,aAAa,CAAC,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,mBAAmB,CAAI,KAAK,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC;YACZ,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAChD,CAAC;IAEF;;OAEG;IACH,MAAM,kBAAkB,GACpB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnB,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,4BAA4B,CACxB,SAAS,EACT,cAAc,CAAC,OAAO,EACtB,aAAa,CAChB,CAAC;QACF,OAAO,GAAG,EAAE;YACR,8BAA8B,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC,CAAC;IACN,CAAC,EAAE;QACC,SAAS;QACT,4BAA4B;QAC5B,8BAA8B;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
|
-
import { DeleteSharedStateAction, IAzureContainerResults, RegisterSharedSetStateAction, UnregisterSharedSetStateAction, UpdateSharedStateAction } from "../types";
|
|
5
|
+
import { DeleteSharedStateAction, IAzureContainerResults, RegisterSharedSetStateAction, UnregisterSharedSetStateAction, UpdateSharedStateAction } from "../types/index.js";
|
|
6
6
|
/**
|
|
7
7
|
* Response for the {@link useSharedStateRegistry} hook.
|
|
8
8
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedStateRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAE5B,8BAA8B,EAC9B,uBAAuB,EAC1B,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D;;OAEG;IACH,8BAA8B,EAAE,8BAA8B,CAAC;IAC/D;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,YACtB,sBAAsB,GAAG,SAAS,KAC5C,4BAgHF,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
import React from "react";
|
|
6
|
+
import { getRootDataObject, getRootDirectory, TurboDirectory, TurboStateMap, } from "@microsoft/live-share/internal";
|
|
6
7
|
/**
|
|
7
8
|
* Hook used internally to keep track of the SharedSetStateActionMap for each unique key. It sets state values for provided keys and updates components listening to the values.
|
|
8
9
|
*
|
|
@@ -14,6 +15,7 @@ import React from "react";
|
|
|
14
15
|
*/
|
|
15
16
|
export const useSharedStateRegistry = (results) => {
|
|
16
17
|
const registeredSharedSetStateActionMapRef = React.useRef(new Map());
|
|
18
|
+
const stateMap = useStateMap(results?.container);
|
|
17
19
|
/**
|
|
18
20
|
* @see ISharedStateRegistryResponse.registerSharedSetStateAction
|
|
19
21
|
*/
|
|
@@ -30,18 +32,17 @@ export const useSharedStateRegistry = (results) => {
|
|
|
30
32
|
registeredSharedSetStateActionMapRef.current.set(uniqueKey, actionsMap);
|
|
31
33
|
}
|
|
32
34
|
// Set initial values, if known
|
|
33
|
-
const
|
|
34
|
-
const initialValue = stateMap === null || stateMap === void 0 ? void 0 : stateMap.get(uniqueKey);
|
|
35
|
+
const initialValue = stateMap?.get(uniqueKey);
|
|
35
36
|
if (initialValue) {
|
|
36
37
|
setLocalStateAction(initialValue);
|
|
37
38
|
}
|
|
38
|
-
}, [
|
|
39
|
+
}, [stateMap]);
|
|
39
40
|
/**
|
|
40
41
|
* @see ISharedStateRegistryResponse.unregisterSharedSetStateAction
|
|
41
42
|
*/
|
|
42
43
|
const unregisterSharedSetStateAction = React.useCallback((uniqueKey, componentId) => {
|
|
43
44
|
let actionsMap = registeredSharedSetStateActionMapRef.current.get(uniqueKey);
|
|
44
|
-
if (actionsMap
|
|
45
|
+
if (actionsMap?.has(componentId)) {
|
|
45
46
|
actionsMap.delete(componentId);
|
|
46
47
|
}
|
|
47
48
|
}, []);
|
|
@@ -49,36 +50,28 @@ export const useSharedStateRegistry = (results) => {
|
|
|
49
50
|
* @see ISharedStateRegistryResponse.updateSharedState
|
|
50
51
|
*/
|
|
51
52
|
const updateSharedState = React.useCallback((uniqueKey, value) => {
|
|
52
|
-
if (!
|
|
53
|
+
if (!stateMap)
|
|
53
54
|
return;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.TURBO_STATE_MAP;
|
|
57
|
-
stateMap.set(uniqueKey, value);
|
|
58
|
-
}, [results]);
|
|
55
|
+
stateMap?.set(uniqueKey, value);
|
|
56
|
+
}, [stateMap]);
|
|
59
57
|
/**
|
|
60
58
|
* @see ISharedStateRegistryResponse.deleteSharedState
|
|
61
59
|
*/
|
|
62
60
|
const deleteSharedState = React.useCallback((uniqueKey) => {
|
|
63
|
-
if (!
|
|
61
|
+
if (!stateMap)
|
|
64
62
|
return;
|
|
65
|
-
const { container } = results;
|
|
66
63
|
let actionsMap = registeredSharedSetStateActionMapRef.current.get(uniqueKey);
|
|
67
|
-
actionsMap
|
|
68
|
-
const stateMap = container.initialObjects
|
|
69
|
-
.TURBO_STATE_MAP;
|
|
64
|
+
actionsMap?.clear();
|
|
70
65
|
stateMap.delete(uniqueKey);
|
|
71
|
-
}, [
|
|
66
|
+
}, [stateMap]);
|
|
72
67
|
React.useEffect(() => {
|
|
73
|
-
if (!
|
|
68
|
+
if (!stateMap)
|
|
74
69
|
return;
|
|
75
|
-
const { container } = results;
|
|
76
|
-
const stateMap = container.initialObjects.TURBO_STATE_MAP;
|
|
77
70
|
const valueChangedListener = (changed) => {
|
|
78
71
|
if (registeredSharedSetStateActionMapRef.current.has(changed.key)) {
|
|
79
|
-
const value = stateMap
|
|
72
|
+
const value = stateMap?.get(changed.key);
|
|
80
73
|
const actionMap = registeredSharedSetStateActionMapRef.current.get(changed.key);
|
|
81
|
-
actionMap
|
|
74
|
+
actionMap?.forEach((setLocalStateHandler) => {
|
|
82
75
|
setLocalStateHandler(value);
|
|
83
76
|
});
|
|
84
77
|
}
|
|
@@ -87,14 +80,14 @@ export const useSharedStateRegistry = (results) => {
|
|
|
87
80
|
// Set initial values
|
|
88
81
|
stateMap.forEach((value, key) => {
|
|
89
82
|
const actionMap = registeredSharedSetStateActionMapRef.current.get(key);
|
|
90
|
-
actionMap
|
|
83
|
+
actionMap?.forEach((setLocalStateHandler) => {
|
|
91
84
|
setLocalStateHandler(value);
|
|
92
85
|
});
|
|
93
86
|
});
|
|
94
87
|
return () => {
|
|
95
|
-
stateMap
|
|
88
|
+
stateMap?.off("valueChanged", valueChangedListener);
|
|
96
89
|
};
|
|
97
|
-
}, [
|
|
90
|
+
}, [stateMap]);
|
|
98
91
|
return {
|
|
99
92
|
registerSharedSetStateAction,
|
|
100
93
|
unregisterSharedSetStateAction,
|
|
@@ -102,4 +95,22 @@ export const useSharedStateRegistry = (results) => {
|
|
|
102
95
|
deleteSharedState,
|
|
103
96
|
};
|
|
104
97
|
};
|
|
98
|
+
const useStateMap = (container) => {
|
|
99
|
+
const [stateMap, setStateMap] = React.useState();
|
|
100
|
+
React.useEffect(() => {
|
|
101
|
+
if (!container) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const rootDataObject = getRootDataObject(container);
|
|
105
|
+
const rootDirectory = getRootDirectory(rootDataObject);
|
|
106
|
+
const turboDir = rootDirectory.getSubDirectory(TurboDirectory);
|
|
107
|
+
turboDir
|
|
108
|
+
?.get(TurboStateMap)
|
|
109
|
+
.get()
|
|
110
|
+
.then((state) => {
|
|
111
|
+
setStateMap(state);
|
|
112
|
+
});
|
|
113
|
+
}, [container]);
|
|
114
|
+
return stateMap;
|
|
115
|
+
};
|
|
105
116
|
//# sourceMappingURL=useSharedStateRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedStateRegistry.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ImplicitFieldSchema, TreeViewConfiguration, InsertableTreeFieldFromImplicitField } from "fluid-framework";
|
|
2
|
+
import { IUseSharedTreeResults } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a new Fluid `SharedTree` instance if one doesn't already exist.
|
|
5
|
+
* @remarks
|
|
6
|
+
* Use the `root` variable from the {@link IUseSharedTreeResults} response from this hook with {@link useTreeNode}.
|
|
7
|
+
* This makes `root` stateful with React whenever a leaf of `root` changes.
|
|
8
|
+
*
|
|
9
|
+
* @param uniqueKey the unique key for the `SharedTree`. If one does not yet exist, a new `SharedTree` will be created.
|
|
10
|
+
* Otherwise it will use the existing one.
|
|
11
|
+
* @param treeViewConfiguration the tree view configuration that contains the `SharedTree` field schema.
|
|
12
|
+
* @param initialData the initial data to load into the `SharedTree` when it is first created.
|
|
13
|
+
* @returns the {@link IUseSharedTreeResults} with the `root` node.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
|
|
18
|
+
* import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
|
|
19
|
+
* // Declare a schema factory with your unique uuid
|
|
20
|
+
* const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
|
|
21
|
+
* class YourObject extends sf.object("YourObject", {
|
|
22
|
+
* listChangedCount: sf.number,
|
|
23
|
+
* list: sf.array(sf.string),
|
|
24
|
+
* }) {
|
|
25
|
+
* // You can add your own utility functions
|
|
26
|
+
* insert() {
|
|
27
|
+
* this.list.insertAtEnd("some text");
|
|
28
|
+
* this.listChangedCount += 1;
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* const config = new TreeViewConfiguration({ schema: YourObject });
|
|
32
|
+
* const initialData = new YourObject({
|
|
33
|
+
* number: 0,
|
|
34
|
+
* list: [],
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Must be child component of <LiveShareProvider> or <AzureProvider>
|
|
38
|
+
* export const YourComponent = () => {
|
|
39
|
+
* // Get the root node of the `SharedTree` mapped to "some-unique-key"
|
|
40
|
+
* const { root } = useSharedTree("some-unique-key", config, initialData);
|
|
41
|
+
* // Makes root stateful / automatically update when the node changes (e.g., node.count)
|
|
42
|
+
* const { node } = useTreeNode(root);
|
|
43
|
+
* // node.list is its own TreeNode, so we make it stateful as well
|
|
44
|
+
* const { node: list } = useTreeNode(node?.list);
|
|
45
|
+
* if (!node || !list) return (<>"Loading"</>);
|
|
46
|
+
* return (
|
|
47
|
+
* <div>
|
|
48
|
+
* <div>Changed: {node.listChangedCount}</div>
|
|
49
|
+
* <button onClick={() => node.insert()}>Insert</button>
|
|
50
|
+
* { list.map((item) => <div key={item}>{item}</div>) }
|
|
51
|
+
* </div>
|
|
52
|
+
* );
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function useSharedTree<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema>(uniqueKey: string, treeViewConfiguration: TreeViewConfiguration<TSchema>, initialData: InsertableTreeFieldFromImplicitField<TSchema>): IUseSharedTreeResults<TSchema>;
|
|
57
|
+
//# sourceMappingURL=useSharedTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedTree.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedTree.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EAIrB,oCAAoC,EAEvC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,aAAa,CACzB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EAEzD,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACrD,WAAW,EAAE,oCAAoC,CAAC,OAAO,CAAC,GAC3D,qBAAqB,CAAC,OAAO,CAAC,CAuEhC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { SharedTree, } from "fluid-framework";
|
|
2
|
+
import { useDynamicDDS } from "../shared-hooks/index.js";
|
|
3
|
+
import React from "react";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a new Fluid `SharedTree` instance if one doesn't already exist.
|
|
6
|
+
* @remarks
|
|
7
|
+
* Use the `root` variable from the {@link IUseSharedTreeResults} response from this hook with {@link useTreeNode}.
|
|
8
|
+
* This makes `root` stateful with React whenever a leaf of `root` changes.
|
|
9
|
+
*
|
|
10
|
+
* @param uniqueKey the unique key for the `SharedTree`. If one does not yet exist, a new `SharedTree` will be created.
|
|
11
|
+
* Otherwise it will use the existing one.
|
|
12
|
+
* @param treeViewConfiguration the tree view configuration that contains the `SharedTree` field schema.
|
|
13
|
+
* @param initialData the initial data to load into the `SharedTree` when it is first created.
|
|
14
|
+
* @returns the {@link IUseSharedTreeResults} with the `root` node.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
|
|
19
|
+
* import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
|
|
20
|
+
* // Declare a schema factory with your unique uuid
|
|
21
|
+
* const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
|
|
22
|
+
* class YourObject extends sf.object("YourObject", {
|
|
23
|
+
* listChangedCount: sf.number,
|
|
24
|
+
* list: sf.array(sf.string),
|
|
25
|
+
* }) {
|
|
26
|
+
* // You can add your own utility functions
|
|
27
|
+
* insert() {
|
|
28
|
+
* this.list.insertAtEnd("some text");
|
|
29
|
+
* this.listChangedCount += 1;
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* const config = new TreeViewConfiguration({ schema: YourObject });
|
|
33
|
+
* const initialData = new YourObject({
|
|
34
|
+
* number: 0,
|
|
35
|
+
* list: [],
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Must be child component of <LiveShareProvider> or <AzureProvider>
|
|
39
|
+
* export const YourComponent = () => {
|
|
40
|
+
* // Get the root node of the `SharedTree` mapped to "some-unique-key"
|
|
41
|
+
* const { root } = useSharedTree("some-unique-key", config, initialData);
|
|
42
|
+
* // Makes root stateful / automatically update when the node changes (e.g., node.count)
|
|
43
|
+
* const { node } = useTreeNode(root);
|
|
44
|
+
* // node.list is its own TreeNode, so we make it stateful as well
|
|
45
|
+
* const { node: list } = useTreeNode(node?.list);
|
|
46
|
+
* if (!node || !list) return (<>"Loading"</>);
|
|
47
|
+
* return (
|
|
48
|
+
* <div>
|
|
49
|
+
* <div>Changed: {node.listChangedCount}</div>
|
|
50
|
+
* <button onClick={() => node.insert()}>Insert</button>
|
|
51
|
+
* { list.map((item) => <div key={item}>{item}</div>) }
|
|
52
|
+
* </div>
|
|
53
|
+
* );
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function useSharedTree(uniqueKey, treeViewConfiguration, initialData) {
|
|
58
|
+
const [treeView, setTreeView] = React.useState();
|
|
59
|
+
const [root, setRoot] = React.useState();
|
|
60
|
+
const onFirstInitialize = React.useCallback((newDDS) => {
|
|
61
|
+
try {
|
|
62
|
+
// Create a `treeView` with the provided `treeViewConfiguration`
|
|
63
|
+
const _treeView = newDDS.viewWith(treeViewConfiguration);
|
|
64
|
+
if (_treeView.compatibility.canInitialize) {
|
|
65
|
+
// Set initial data
|
|
66
|
+
_treeView.initialize(initialData);
|
|
67
|
+
}
|
|
68
|
+
// `onFirstInitialize` is only called for the user that created the tree, but we need this object for all clients.
|
|
69
|
+
// Dispose, since we will call `sharedTree.viewWith` in a `useEffect` down below and set it to state.
|
|
70
|
+
_treeView.dispose();
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
console.error(err);
|
|
74
|
+
}
|
|
75
|
+
}, [treeViewConfiguration, initialData]);
|
|
76
|
+
/**
|
|
77
|
+
* User facing: dynamically load the `SharedTree` DDS for the given unique key.
|
|
78
|
+
*/
|
|
79
|
+
const { dds: sharedTree } = useDynamicDDS(uniqueKey, SharedTree, onFirstInitialize);
|
|
80
|
+
/**
|
|
81
|
+
* Sets the tree view and root view
|
|
82
|
+
*/
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
if (!sharedTree)
|
|
85
|
+
return;
|
|
86
|
+
let _treeView = undefined;
|
|
87
|
+
try {
|
|
88
|
+
// Create a `treeView` with the provided `treeViewConfiguration`
|
|
89
|
+
_treeView = sharedTree.viewWith(treeViewConfiguration);
|
|
90
|
+
setTreeView(_treeView);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.error(err);
|
|
94
|
+
}
|
|
95
|
+
// Listen for changes to root view
|
|
96
|
+
const updateRoot = () => {
|
|
97
|
+
if (_treeView?.compatibility.canView) {
|
|
98
|
+
setRoot(_treeView.root);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
setRoot(undefined);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
updateRoot();
|
|
105
|
+
const unsubscribeToRoot = _treeView?.events.on("rootChanged", updateRoot);
|
|
106
|
+
return () => {
|
|
107
|
+
_treeView?.dispose();
|
|
108
|
+
unsubscribeToRoot?.();
|
|
109
|
+
};
|
|
110
|
+
}, [sharedTree, treeViewConfiguration]);
|
|
111
|
+
return {
|
|
112
|
+
treeView,
|
|
113
|
+
sharedTree,
|
|
114
|
+
root,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=useSharedTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedTree.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,GAKb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAe,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,UAAU,aAAa,CAGzB,SAAiB,EACjB,qBAAqD,EACrD,WAA0D;IAE1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAqB,CAAC;IACpE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GACjB,KAAK,CAAC,QAAQ,EAAuC,CAAC;IAE1D,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,MAAa,EAAQ,EAAE;QACpB,IAAI,CAAC;YACD,gEAAgE;YAChE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACzD,IAAI,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;gBACxC,mBAAmB;gBACnB,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;YACD,kHAAkH;YAClH,qGAAqG;YACrG,SAAS,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACL,CAAC,EACD,CAAC,qBAAqB,EAAE,WAAW,CAAC,CACvC,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,aAAa,CACrC,SAAS,EACT,UAAU,EACV,iBAAiB,CACpB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,IAAI,SAAS,GAAkC,SAAS,CAAC;QACzD,IAAI,CAAC;YACD,gEAAgE;YAChE,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACvD,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,kCAAkC;QAClC,MAAM,UAAU,GAAG,GAAS,EAAE;YAC1B,IAAI,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACL,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;QACb,MAAM,iBAAiB,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,CAC1C,aAAa,EACb,UAAU,CACb,CAAC;QACF,OAAO,GAAG,EAAE;YACR,SAAS,EAAE,OAAO,EAAE,CAAC;YACrB,iBAAiB,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAExC,OAAO;QACH,QAAQ;QACR,UAAU;QACV,IAAI;KACP,CAAC;AACN,CAAC"}
|