@fluidframework/react 0.41.4 → 2.62.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/.eslintrc.cjs +11 -0
- package/.mocharc.cjs +15 -0
- package/CHANGELOG.md +282 -0
- package/README.md +122 -273
- package/api-extractor/api-extractor-lint-alpha.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-alpha.esm.json +5 -0
- package/api-extractor/api-extractor-lint-beta.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-beta.esm.json +5 -0
- package/api-extractor/api-extractor-lint-bundle.json +5 -0
- package/api-extractor/api-extractor-lint-public.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-public.esm.json +5 -0
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/react.alpha.api.md +114 -0
- package/api-report/react.beta.api.md +7 -0
- package/api-report/react.public.api.md +7 -0
- package/biome.jsonc +4 -0
- package/dist/alpha.d.ts +45 -0
- package/dist/beta.d.ts +15 -0
- package/dist/index.d.ts +11 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -17
- package/dist/index.js.map +1 -1
- package/dist/package.json +4 -0
- package/dist/propNode.d.ts +114 -0
- package/dist/propNode.d.ts.map +1 -0
- package/dist/propNode.js +43 -0
- package/dist/propNode.js.map +1 -0
- package/dist/public.d.ts +15 -0
- package/dist/reactSharedTreeView.d.ts +119 -0
- package/dist/reactSharedTreeView.d.ts.map +1 -0
- package/dist/reactSharedTreeView.js +206 -0
- package/dist/reactSharedTreeView.js.map +1 -0
- package/dist/simpleIdentifier.d.ts +19 -0
- package/dist/simpleIdentifier.d.ts.map +1 -0
- package/dist/simpleIdentifier.js +33 -0
- package/dist/simpleIdentifier.js.map +1 -0
- package/dist/useObservation.d.ts +83 -0
- package/dist/useObservation.d.ts.map +1 -0
- package/dist/useObservation.js +295 -0
- package/dist/useObservation.js.map +1 -0
- package/dist/useTree.d.ts +80 -0
- package/dist/useTree.d.ts.map +1 -0
- package/dist/useTree.js +137 -0
- package/dist/useTree.js.map +1 -0
- package/lib/alpha.d.ts +45 -0
- package/lib/beta.d.ts +15 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -7
- package/lib/index.js.map +1 -1
- package/lib/package.json +4 -0
- package/lib/propNode.d.ts +114 -0
- package/lib/propNode.d.ts.map +1 -0
- package/lib/propNode.js +36 -0
- package/lib/propNode.js.map +1 -0
- package/lib/public.d.ts +15 -0
- package/lib/reactSharedTreeView.d.ts +119 -0
- package/lib/reactSharedTreeView.d.ts.map +1 -0
- package/lib/reactSharedTreeView.js +176 -0
- package/lib/reactSharedTreeView.js.map +1 -0
- package/lib/simpleIdentifier.d.ts +19 -0
- package/lib/simpleIdentifier.d.ts.map +1 -0
- package/lib/simpleIdentifier.js +29 -0
- package/lib/simpleIdentifier.js.map +1 -0
- package/lib/test/propNode.spec.js +120 -0
- package/lib/test/propNode.spec.js.map +1 -0
- package/lib/test/reactSharedTreeView.spec.js +71 -0
- package/lib/test/reactSharedTreeView.spec.js.map +1 -0
- package/lib/test/simpleIdentifier.spec.js +18 -0
- package/lib/test/simpleIdentifier.spec.js.map +1 -0
- package/lib/test/useObservation.spec.js +162 -0
- package/lib/test/useObservation.spec.js.map +1 -0
- package/lib/test/useTree.spec.js +165 -0
- package/lib/test/useTree.spec.js.map +1 -0
- package/lib/tsdoc-metadata.json +11 -0
- package/lib/useObservation.d.ts +83 -0
- package/lib/useObservation.d.ts.map +1 -0
- package/lib/useObservation.js +266 -0
- package/lib/useObservation.js.map +1 -0
- package/lib/useTree.d.ts +80 -0
- package/lib/useTree.d.ts.map +1 -0
- package/lib/useTree.js +105 -0
- package/lib/useTree.js.map +1 -0
- package/package.json +150 -51
- package/react.test-files.tar +0 -0
- package/src/index.ts +42 -7
- package/src/propNode.ts +164 -0
- package/src/reactSharedTreeView.tsx +327 -0
- package/src/simpleIdentifier.ts +31 -0
- package/src/useObservation.ts +376 -0
- package/src/useTree.ts +147 -0
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +12 -15
- package/tsdoc.json +4 -0
- package/.eslintrc.js +0 -11
- package/dist/createContextFluid.d.ts +0 -7
- package/dist/createContextFluid.d.ts.map +0 -1
- package/dist/createContextFluid.js +0 -46
- package/dist/createContextFluid.js.map +0 -1
- package/dist/helpers/generateFluidObjectSchema.d.ts +0 -16
- package/dist/helpers/generateFluidObjectSchema.d.ts.map +0 -1
- package/dist/helpers/generateFluidObjectSchema.js +0 -75
- package/dist/helpers/generateFluidObjectSchema.js.map +0 -1
- package/dist/helpers/getFluidFromView.d.ts +0 -15
- package/dist/helpers/getFluidFromView.d.ts.map +0 -1
- package/dist/helpers/getFluidFromView.js +0 -30
- package/dist/helpers/getFluidFromView.js.map +0 -1
- package/dist/helpers/getFluidState.d.ts +0 -15
- package/dist/helpers/getFluidState.d.ts.map +0 -1
- package/dist/helpers/getFluidState.js +0 -47
- package/dist/helpers/getFluidState.js.map +0 -1
- package/dist/helpers/getSchema.d.ts +0 -13
- package/dist/helpers/getSchema.d.ts.map +0 -1
- package/dist/helpers/getSchema.js +0 -15
- package/dist/helpers/getSchema.js.map +0 -1
- package/dist/helpers/getViewFromFluid.d.ts +0 -18
- package/dist/helpers/getViewFromFluid.d.ts.map +0 -1
- package/dist/helpers/getViewFromFluid.js +0 -47
- package/dist/helpers/getViewFromFluid.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -16
- package/dist/helpers/index.d.ts.map +0 -1
- package/dist/helpers/index.js +0 -28
- package/dist/helpers/index.js.map +0 -1
- package/dist/helpers/initializeState.d.ts +0 -22
- package/dist/helpers/initializeState.d.ts.map +0 -1
- package/dist/helpers/initializeState.js +0 -77
- package/dist/helpers/initializeState.js.map +0 -1
- package/dist/helpers/internalInterface.d.ts +0 -15
- package/dist/helpers/internalInterface.d.ts.map +0 -1
- package/dist/helpers/internalInterface.js +0 -7
- package/dist/helpers/internalInterface.js.map +0 -1
- package/dist/helpers/rootCallbackListener.d.ts +0 -24
- package/dist/helpers/rootCallbackListener.d.ts.map +0 -1
- package/dist/helpers/rootCallbackListener.js +0 -55
- package/dist/helpers/rootCallbackListener.js.map +0 -1
- package/dist/helpers/setComponentSchema.d.ts +0 -14
- package/dist/helpers/setComponentSchema.d.ts.map +0 -1
- package/dist/helpers/setComponentSchema.js +0 -18
- package/dist/helpers/setComponentSchema.js.map +0 -1
- package/dist/helpers/setFluidState.d.ts +0 -20
- package/dist/helpers/setFluidState.d.ts.map +0 -1
- package/dist/helpers/setFluidState.js +0 -94
- package/dist/helpers/setFluidState.js.map +0 -1
- package/dist/helpers/syncState.d.ts +0 -25
- package/dist/helpers/syncState.d.ts.map +0 -1
- package/dist/helpers/syncState.js +0 -98
- package/dist/helpers/syncState.js.map +0 -1
- package/dist/helpers/updateStateAndFluidObjectMap.d.ts +0 -29
- package/dist/helpers/updateStateAndFluidObjectMap.d.ts.map +0 -1
- package/dist/helpers/updateStateAndFluidObjectMap.js +0 -30
- package/dist/helpers/updateStateAndFluidObjectMap.js.map +0 -1
- package/dist/helpers/utils.d.ts +0 -12
- package/dist/helpers/utils.d.ts.map +0 -1
- package/dist/helpers/utils.js +0 -74
- package/dist/helpers/utils.js.map +0 -1
- package/dist/interface.d.ts +0 -444
- package/dist/interface.d.ts.map +0 -1
- package/dist/interface.js +0 -18
- package/dist/interface.js.map +0 -1
- package/dist/reactView.d.ts +0 -32
- package/dist/reactView.d.ts.map +0 -1
- package/dist/reactView.js +0 -79
- package/dist/reactView.js.map +0 -1
- package/dist/syncedDataObject.d.ts +0 -80
- package/dist/syncedDataObject.d.ts.map +0 -1
- package/dist/syncedDataObject.js +0 -249
- package/dist/syncedDataObject.js.map +0 -1
- package/dist/syncedObjects/array/fluidSyncedArray.d.ts +0 -11
- package/dist/syncedObjects/array/fluidSyncedArray.d.ts.map +0 -1
- package/dist/syncedObjects/array/fluidSyncedArray.js +0 -78
- package/dist/syncedObjects/array/fluidSyncedArray.js.map +0 -1
- package/dist/syncedObjects/array/index.d.ts +0 -7
- package/dist/syncedObjects/array/index.d.ts.map +0 -1
- package/dist/syncedObjects/array/index.js +0 -19
- package/dist/syncedObjects/array/index.js.map +0 -1
- package/dist/syncedObjects/array/interface.d.ts +0 -33
- package/dist/syncedObjects/array/interface.d.ts.map +0 -1
- package/dist/syncedObjects/array/interface.js +0 -3
- package/dist/syncedObjects/array/interface.js.map +0 -1
- package/dist/syncedObjects/array/syncedArray.d.ts +0 -30
- package/dist/syncedObjects/array/syncedArray.d.ts.map +0 -1
- package/dist/syncedObjects/array/syncedArray.js +0 -42
- package/dist/syncedObjects/array/syncedArray.js.map +0 -1
- package/dist/syncedObjects/counter/fluidSyncedCounter.d.ts +0 -11
- package/dist/syncedObjects/counter/fluidSyncedCounter.d.ts.map +0 -1
- package/dist/syncedObjects/counter/fluidSyncedCounter.js +0 -79
- package/dist/syncedObjects/counter/fluidSyncedCounter.js.map +0 -1
- package/dist/syncedObjects/counter/index.d.ts +0 -7
- package/dist/syncedObjects/counter/index.d.ts.map +0 -1
- package/dist/syncedObjects/counter/index.js +0 -19
- package/dist/syncedObjects/counter/index.js.map +0 -1
- package/dist/syncedObjects/counter/interface.d.ts +0 -32
- package/dist/syncedObjects/counter/interface.d.ts.map +0 -1
- package/dist/syncedObjects/counter/interface.js +0 -3
- package/dist/syncedObjects/counter/interface.js.map +0 -1
- package/dist/syncedObjects/counter/syncedCounter.d.ts +0 -29
- package/dist/syncedObjects/counter/syncedCounter.d.ts.map +0 -1
- package/dist/syncedObjects/counter/syncedCounter.js +0 -36
- package/dist/syncedObjects/counter/syncedCounter.js.map +0 -1
- package/dist/syncedObjects/index.d.ts +0 -9
- package/dist/syncedObjects/index.d.ts.map +0 -1
- package/dist/syncedObjects/index.js +0 -21
- package/dist/syncedObjects/index.js.map +0 -1
- package/dist/syncedObjects/object/index.d.ts +0 -7
- package/dist/syncedObjects/object/index.d.ts.map +0 -1
- package/dist/syncedObjects/object/index.js +0 -19
- package/dist/syncedObjects/object/index.js.map +0 -1
- package/dist/syncedObjects/object/interface.d.ts +0 -13
- package/dist/syncedObjects/object/interface.d.ts.map +0 -1
- package/dist/syncedObjects/object/interface.js +0 -7
- package/dist/syncedObjects/object/interface.js.map +0 -1
- package/dist/syncedObjects/object/syncedObject.d.ts +0 -22
- package/dist/syncedObjects/object/syncedObject.d.ts.map +0 -1
- package/dist/syncedObjects/object/syncedObject.js +0 -46
- package/dist/syncedObjects/object/syncedObject.js.map +0 -1
- package/dist/syncedObjects/string/index.d.ts +0 -7
- package/dist/syncedObjects/string/index.d.ts.map +0 -1
- package/dist/syncedObjects/string/index.js +0 -19
- package/dist/syncedObjects/string/index.js.map +0 -1
- package/dist/syncedObjects/string/interface.d.ts +0 -16
- package/dist/syncedObjects/string/interface.d.ts.map +0 -1
- package/dist/syncedObjects/string/interface.js +0 -7
- package/dist/syncedObjects/string/interface.js.map +0 -1
- package/dist/syncedObjects/string/syncedString.d.ts +0 -25
- package/dist/syncedObjects/string/syncedString.d.ts.map +0 -1
- package/dist/syncedObjects/string/syncedString.js +0 -53
- package/dist/syncedObjects/string/syncedString.js.map +0 -1
- package/dist/useReducerFluid.d.ts +0 -7
- package/dist/useReducerFluid.d.ts.map +0 -1
- package/dist/useReducerFluid.js +0 -219
- package/dist/useReducerFluid.js.map +0 -1
- package/dist/useStateFluid.d.ts +0 -10
- package/dist/useStateFluid.d.ts.map +0 -1
- package/dist/useStateFluid.js +0 -67
- package/dist/useStateFluid.js.map +0 -1
- package/lib/createContextFluid.js +0 -23
- package/lib/createContextFluid.js.map +0 -1
- package/lib/helpers/generateFluidObjectSchema.js +0 -71
- package/lib/helpers/generateFluidObjectSchema.js.map +0 -1
- package/lib/helpers/getFluidFromView.js +0 -26
- package/lib/helpers/getFluidFromView.js.map +0 -1
- package/lib/helpers/getFluidState.js +0 -43
- package/lib/helpers/getFluidState.js.map +0 -1
- package/lib/helpers/getSchema.js +0 -11
- package/lib/helpers/getSchema.js.map +0 -1
- package/lib/helpers/getViewFromFluid.js +0 -43
- package/lib/helpers/getViewFromFluid.js.map +0 -1
- package/lib/helpers/index.js +0 -16
- package/lib/helpers/index.js.map +0 -1
- package/lib/helpers/initializeState.js +0 -73
- package/lib/helpers/initializeState.js.map +0 -1
- package/lib/helpers/internalInterface.js +0 -6
- package/lib/helpers/internalInterface.js.map +0 -1
- package/lib/helpers/rootCallbackListener.js +0 -51
- package/lib/helpers/rootCallbackListener.js.map +0 -1
- package/lib/helpers/setComponentSchema.js +0 -14
- package/lib/helpers/setComponentSchema.js.map +0 -1
- package/lib/helpers/setFluidState.js +0 -90
- package/lib/helpers/setFluidState.js.map +0 -1
- package/lib/helpers/syncState.js +0 -94
- package/lib/helpers/syncState.js.map +0 -1
- package/lib/helpers/updateStateAndFluidObjectMap.js +0 -26
- package/lib/helpers/updateStateAndFluidObjectMap.js.map +0 -1
- package/lib/helpers/utils.js +0 -67
- package/lib/helpers/utils.js.map +0 -1
- package/lib/interface.js +0 -8
- package/lib/interface.js.map +0 -1
- package/lib/reactView.js +0 -56
- package/lib/reactView.js.map +0 -1
- package/lib/syncedDataObject.js +0 -245
- package/lib/syncedDataObject.js.map +0 -1
- package/lib/syncedObjects/array/fluidSyncedArray.js +0 -72
- package/lib/syncedObjects/array/fluidSyncedArray.js.map +0 -1
- package/lib/syncedObjects/array/index.js +0 -7
- package/lib/syncedObjects/array/index.js.map +0 -1
- package/lib/syncedObjects/array/interface.js +0 -2
- package/lib/syncedObjects/array/interface.js.map +0 -1
- package/lib/syncedObjects/array/syncedArray.js +0 -37
- package/lib/syncedObjects/array/syncedArray.js.map +0 -1
- package/lib/syncedObjects/counter/fluidSyncedCounter.js +0 -73
- package/lib/syncedObjects/counter/fluidSyncedCounter.js.map +0 -1
- package/lib/syncedObjects/counter/index.js +0 -7
- package/lib/syncedObjects/counter/index.js.map +0 -1
- package/lib/syncedObjects/counter/interface.js +0 -2
- package/lib/syncedObjects/counter/interface.js.map +0 -1
- package/lib/syncedObjects/counter/syncedCounter.js +0 -31
- package/lib/syncedObjects/counter/syncedCounter.js.map +0 -1
- package/lib/syncedObjects/index.js +0 -9
- package/lib/syncedObjects/index.js.map +0 -1
- package/lib/syncedObjects/object/index.js +0 -7
- package/lib/syncedObjects/object/index.js.map +0 -1
- package/lib/syncedObjects/object/interface.js +0 -6
- package/lib/syncedObjects/object/interface.js.map +0 -1
- package/lib/syncedObjects/object/syncedObject.js +0 -41
- package/lib/syncedObjects/object/syncedObject.js.map +0 -1
- package/lib/syncedObjects/string/index.js +0 -7
- package/lib/syncedObjects/string/index.js.map +0 -1
- package/lib/syncedObjects/string/interface.js +0 -6
- package/lib/syncedObjects/string/interface.js.map +0 -1
- package/lib/syncedObjects/string/syncedString.js +0 -48
- package/lib/syncedObjects/string/syncedString.js.map +0 -1
- package/lib/useReducerFluid.js +0 -196
- package/lib/useReducerFluid.js.map +0 -1
- package/lib/useStateFluid.js +0 -44
- package/lib/useStateFluid.js.map +0 -1
- package/src/createContextFluid.tsx +0 -33
- package/src/helpers/generateFluidObjectSchema.ts +0 -95
- package/src/helpers/getFluidFromView.ts +0 -38
- package/src/helpers/getFluidState.ts +0 -67
- package/src/helpers/getSchema.ts +0 -18
- package/src/helpers/getViewFromFluid.ts +0 -68
- package/src/helpers/index.tsx +0 -16
- package/src/helpers/initializeState.ts +0 -162
- package/src/helpers/internalInterface.ts +0 -16
- package/src/helpers/rootCallbackListener.ts +0 -104
- package/src/helpers/setComponentSchema.ts +0 -21
- package/src/helpers/setFluidState.ts +0 -116
- package/src/helpers/syncState.ts +0 -159
- package/src/helpers/updateStateAndFluidObjectMap.ts +0 -85
- package/src/helpers/utils.tsx +0 -109
- package/src/interface.ts +0 -617
- package/src/reactView.tsx +0 -108
- package/src/syncedDataObject.ts +0 -337
- package/src/syncedObjects/array/fluidSyncedArray.ts +0 -126
- package/src/syncedObjects/array/index.ts +0 -7
- package/src/syncedObjects/array/interface.ts +0 -45
- package/src/syncedObjects/array/syncedArray.ts +0 -65
- package/src/syncedObjects/counter/fluidSyncedCounter.ts +0 -122
- package/src/syncedObjects/counter/index.ts +0 -7
- package/src/syncedObjects/counter/interface.ts +0 -44
- package/src/syncedObjects/counter/syncedCounter.ts +0 -64
- package/src/syncedObjects/index.ts +0 -9
- package/src/syncedObjects/object/index.ts +0 -7
- package/src/syncedObjects/object/interface.ts +0 -14
- package/src/syncedObjects/object/syncedObject.ts +0 -55
- package/src/syncedObjects/string/index.ts +0 -7
- package/src/syncedObjects/string/interface.ts +0 -17
- package/src/syncedObjects/string/syncedString.ts +0 -61
- package/src/useReducerFluid.tsx +0 -436
- package/src/useStateFluid.tsx +0 -84
- package/tsconfig.esnext.json +0 -7
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { ISharedMap, IValueChanged } from "@fluidframework/map";
|
|
7
|
-
import { IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
|
|
8
|
-
import {
|
|
9
|
-
FluidObjectMap,
|
|
10
|
-
ViewToFluidMap,
|
|
11
|
-
FluidToViewMap,
|
|
12
|
-
IViewState,
|
|
13
|
-
IFluidState,
|
|
14
|
-
} from "../interface";
|
|
15
|
-
import { ISyncedState } from "..";
|
|
16
|
-
import { syncState } from "./syncState";
|
|
17
|
-
import { getByFluidKey } from "./utils";
|
|
18
|
-
import { getViewFromFluid } from "./getViewFromFluid";
|
|
19
|
-
import { getFluidState } from ".";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The callback that is added to the "valueChanged" event on the Fluid object this
|
|
23
|
-
* is passed in to. This will trigger state updates when the synced state value is updated
|
|
24
|
-
* @param fluidObjectMap - A map of Fluid handle paths to their Fluid objects
|
|
25
|
-
* @param syncedStateId - Unique ID for this synced Fluid object's state
|
|
26
|
-
* @param syncedState - The shared map this Fluid object's synced state is stored on
|
|
27
|
-
* @param runtime - The data store runtime
|
|
28
|
-
* @param state - The current view state
|
|
29
|
-
* @param setState - Callback to update the react view state
|
|
30
|
-
* @param fluidToView - A map of the Fluid state values that need conversion to their view state counterparts and the
|
|
31
|
-
* respective converters
|
|
32
|
-
* @param viewToFluid - A map of the view state values that need conversion to their Fluid state counterparts and the
|
|
33
|
-
* respective converters
|
|
34
|
-
*/
|
|
35
|
-
export const syncedStateCallbackListener = <
|
|
36
|
-
SV extends IViewState,
|
|
37
|
-
SF extends IFluidState
|
|
38
|
-
>(
|
|
39
|
-
fluidObjectMap: FluidObjectMap,
|
|
40
|
-
storedHandleMap: ISharedMap,
|
|
41
|
-
syncedStateId,
|
|
42
|
-
syncedState: ISyncedState,
|
|
43
|
-
runtime: IFluidDataStoreRuntime,
|
|
44
|
-
state: SV,
|
|
45
|
-
setState: (
|
|
46
|
-
newState: SV,
|
|
47
|
-
fromRootUpdate?: boolean,
|
|
48
|
-
isLocal?: boolean
|
|
49
|
-
) => void,
|
|
50
|
-
fluidToView: FluidToViewMap<SV, SF>,
|
|
51
|
-
viewToFluid?: ViewToFluidMap<SV, SF>,
|
|
52
|
-
) => (change: IValueChanged, local: boolean) => {
|
|
53
|
-
const currentFluidState = getFluidState(
|
|
54
|
-
syncedStateId,
|
|
55
|
-
syncedState,
|
|
56
|
-
fluidObjectMap,
|
|
57
|
-
fluidToView,
|
|
58
|
-
);
|
|
59
|
-
if (currentFluidState === undefined) {
|
|
60
|
-
throw Error("Synced state update triggered before Fluid state was initialized");
|
|
61
|
-
}
|
|
62
|
-
const viewToFluidKeys: string[] = viewToFluid !== undefined
|
|
63
|
-
? Array.from(viewToFluid.values()).map((item) => item.fluidKey as string)
|
|
64
|
-
: [];
|
|
65
|
-
if (!local && change.key === `syncedState-${syncedStateId}`) {
|
|
66
|
-
// If the update is to the synced Fluid state, update both the Fluid and view states
|
|
67
|
-
syncState(
|
|
68
|
-
true,
|
|
69
|
-
syncedStateId,
|
|
70
|
-
syncedState,
|
|
71
|
-
runtime,
|
|
72
|
-
state,
|
|
73
|
-
setState,
|
|
74
|
-
fluidObjectMap,
|
|
75
|
-
fluidToView,
|
|
76
|
-
viewToFluid,
|
|
77
|
-
);
|
|
78
|
-
} else if (
|
|
79
|
-
viewToFluid !== undefined &&
|
|
80
|
-
viewToFluidKeys.includes(change.key)
|
|
81
|
-
) {
|
|
82
|
-
// If the update is to a child Fluid object, trigger only a view update as the child itself will
|
|
83
|
-
// update its Fluid update
|
|
84
|
-
const stateKey = getByFluidKey(change.key, viewToFluid);
|
|
85
|
-
if (stateKey !== undefined) {
|
|
86
|
-
const newPartialState = getViewFromFluid(
|
|
87
|
-
syncedStateId,
|
|
88
|
-
syncedState,
|
|
89
|
-
change.key as keyof SF,
|
|
90
|
-
fluidObjectMap,
|
|
91
|
-
fluidToView,
|
|
92
|
-
state,
|
|
93
|
-
currentFluidState,
|
|
94
|
-
);
|
|
95
|
-
state[stateKey as string] = newPartialState[stateKey];
|
|
96
|
-
state.fluidObjectMap = fluidObjectMap;
|
|
97
|
-
setState(state, true, local);
|
|
98
|
-
} else {
|
|
99
|
-
throw Error(
|
|
100
|
-
`Unable to extract view state from synced state change key: ${change.key}`,
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { ISyncedState } from "..";
|
|
7
|
-
import { IFluidSchemaHandles } from "./internalInterface";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Store the schema on to the shared synced state
|
|
11
|
-
* @param syncedStateId - Unique ID to use for storing the synced state in the shared map
|
|
12
|
-
* @param syncedState - The shared map that will be used to store the synced state
|
|
13
|
-
* @param schemaHandles - Handles for the schema SharedMaps
|
|
14
|
-
*/
|
|
15
|
-
export function setSchema(
|
|
16
|
-
syncedStateId: string,
|
|
17
|
-
syncedState: ISyncedState,
|
|
18
|
-
schemaHandles: IFluidSchemaHandles,
|
|
19
|
-
): void {
|
|
20
|
-
syncedState.set(`schema-${syncedStateId}`, schemaHandles);
|
|
21
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { ISharedMap, SharedMap } from "@fluidframework/map";
|
|
7
|
-
import { IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
|
|
8
|
-
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
9
|
-
import {
|
|
10
|
-
FluidObjectMap,
|
|
11
|
-
IViewConverter,
|
|
12
|
-
IFluidConverter,
|
|
13
|
-
ISyncedState,
|
|
14
|
-
} from "../interface";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Store the Fluid state onto the shared synced state
|
|
18
|
-
* @param syncedStateId - Unique ID to use for storing the Fluid object's synced state in the map
|
|
19
|
-
* @param syncedState - The shared map that will be used to store the synced state
|
|
20
|
-
* @param runtime - The data store runtime
|
|
21
|
-
* @param fluidObjectMap - A map of Fluid handle paths to their Fluid objects
|
|
22
|
-
* @param fluidToView - A map of the Fluid state values that need conversion to their view state counterparts and the
|
|
23
|
-
* respective converters
|
|
24
|
-
* @param newFluidState - The Fluid state to store on to the syncedState,
|
|
25
|
-
* after converting Fluid objects to their handles
|
|
26
|
-
*/
|
|
27
|
-
export function setFluidState<SV, SF>(
|
|
28
|
-
syncedStateId: string,
|
|
29
|
-
syncedState: ISyncedState,
|
|
30
|
-
runtime: IFluidDataStoreRuntime,
|
|
31
|
-
fluidObjectMap: FluidObjectMap,
|
|
32
|
-
fluidToView: Map<keyof SF, IViewConverter<SV, SF>>,
|
|
33
|
-
newViewState: SV,
|
|
34
|
-
newFluidState?: SF,
|
|
35
|
-
viewToFluid?: Map<keyof SV, IFluidConverter<SV, SF>>,
|
|
36
|
-
): IFluidHandle {
|
|
37
|
-
const storedStateHandle = syncedState.get<IFluidHandle>(
|
|
38
|
-
`syncedState-${syncedStateId}`,
|
|
39
|
-
);
|
|
40
|
-
let storedState: ISharedMap | undefined;
|
|
41
|
-
if (storedStateHandle) {
|
|
42
|
-
storedState = fluidObjectMap.get(storedStateHandle.absolutePath)
|
|
43
|
-
?.fluidObject as ISharedMap;
|
|
44
|
-
}
|
|
45
|
-
if (storedStateHandle === undefined || storedState === undefined) {
|
|
46
|
-
const newState = SharedMap.create(runtime);
|
|
47
|
-
fluidObjectMap.set(newState.handle.absolutePath, {
|
|
48
|
-
fluidObject: newState,
|
|
49
|
-
isRuntimeMap: true,
|
|
50
|
-
});
|
|
51
|
-
storedState = newState;
|
|
52
|
-
}
|
|
53
|
-
if (storedState === undefined) {
|
|
54
|
-
throw Error("Failed to fetch synced state from root");
|
|
55
|
-
}
|
|
56
|
-
for (const key of fluidToView.keys()) {
|
|
57
|
-
const fluidKey = key as string;
|
|
58
|
-
const syncedStateKey = fluidToView?.get(fluidKey as keyof SF)?.rootKey;
|
|
59
|
-
const createCallback = fluidToView?.get(fluidKey as keyof SF)
|
|
60
|
-
?.sharedObjectCreate;
|
|
61
|
-
if (createCallback !== undefined) {
|
|
62
|
-
if (storedState.get(fluidKey) === undefined) {
|
|
63
|
-
const sharedObject = createCallback(runtime);
|
|
64
|
-
fluidObjectMap.set(sharedObject.handle.absolutePath, {
|
|
65
|
-
fluidObject: sharedObject,
|
|
66
|
-
listenedEvents: fluidToView?.get(fluidKey as keyof SF)
|
|
67
|
-
?.listenedEvents ?? ["valueChanged"],
|
|
68
|
-
});
|
|
69
|
-
storedState.set(fluidKey, sharedObject.handle);
|
|
70
|
-
if (syncedStateKey !== undefined) {
|
|
71
|
-
syncedState.set(syncedStateKey, sharedObject.handle);
|
|
72
|
-
}
|
|
73
|
-
} else {
|
|
74
|
-
storedState.set(fluidKey, storedState.get(fluidKey));
|
|
75
|
-
if (syncedStateKey !== undefined) {
|
|
76
|
-
syncedState.set(
|
|
77
|
-
syncedStateKey,
|
|
78
|
-
syncedState.get(syncedStateKey),
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
} else if (syncedStateKey !== undefined) {
|
|
83
|
-
const value = newFluidState !== undefined
|
|
84
|
-
? newFluidState[fluidKey]
|
|
85
|
-
: syncedState.get(syncedStateKey);
|
|
86
|
-
syncedState.set(syncedStateKey, value);
|
|
87
|
-
storedState.set(fluidKey, value);
|
|
88
|
-
} else {
|
|
89
|
-
const value = newFluidState !== undefined
|
|
90
|
-
? newFluidState[fluidKey]
|
|
91
|
-
: storedState.get(fluidKey);
|
|
92
|
-
storedState.set(fluidKey, value);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (viewToFluid !== undefined && newFluidState !== undefined) {
|
|
96
|
-
for (const key of viewToFluid.keys()) {
|
|
97
|
-
const viewKey = key as string;
|
|
98
|
-
const fluidConverter = viewToFluid?.get(viewKey as keyof SV)
|
|
99
|
-
?.fluidConverter;
|
|
100
|
-
const fluidKey = viewToFluid?.get(viewKey as keyof SV)
|
|
101
|
-
?.fluidKey;
|
|
102
|
-
if (fluidConverter !== undefined && fluidKey !== undefined) {
|
|
103
|
-
const value = fluidConverter(newViewState, newFluidState);
|
|
104
|
-
// Write this value to the stored state if it doesn't match the name of a view value
|
|
105
|
-
if (
|
|
106
|
-
fluidToView.get(fluidKey)?.sharedObjectCreate ===
|
|
107
|
-
undefined
|
|
108
|
-
) {
|
|
109
|
-
storedState.set(viewKey, value);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
syncedState.set(`syncedState-${syncedStateId}`, storedState.handle);
|
|
115
|
-
return storedState.handle;
|
|
116
|
-
}
|
package/src/helpers/syncState.ts
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
|
|
7
|
-
import { ISharedMap } from "@fluidframework/map";
|
|
8
|
-
import {
|
|
9
|
-
FluidObjectMap,
|
|
10
|
-
IFluidState,
|
|
11
|
-
IViewState,
|
|
12
|
-
ViewToFluidMap,
|
|
13
|
-
FluidToViewMap,
|
|
14
|
-
ISyncedState,
|
|
15
|
-
} from "../interface";
|
|
16
|
-
import { getFluidFromView } from "./getFluidFromView";
|
|
17
|
-
import { getViewFromFluid } from "./getViewFromFluid";
|
|
18
|
-
import { getFluidState } from "./getFluidState";
|
|
19
|
-
import { setFluidState } from "./setFluidState";
|
|
20
|
-
import { getSchema } from "./getSchema";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Function to combine both the view and Fluid states so that they are in sync. If the update
|
|
24
|
-
* is from a local update, the new Fluid state created from converting the new local view state
|
|
25
|
-
* is used to update the synced Fluid state, which in turn will update the local state on other clients.
|
|
26
|
-
* If it is an update triggered from a remote change on the synced state, the new Fluid state from the synced state
|
|
27
|
-
* is used to overwrite the local synced state and the new local view is created accordingly.
|
|
28
|
-
* @param isSyncedStateUpdate - Is the update from a local state update or from one triggered by the synced state
|
|
29
|
-
* @param syncedStateId - Unique ID for this synced Fluid object's state
|
|
30
|
-
* @param syncedState - The shared map this Fluid object synced state is stored on
|
|
31
|
-
* @param viewState - The current view state
|
|
32
|
-
* @param setState - Callback to update the react view state
|
|
33
|
-
* @param fluidObjectMap - A map of Fluid handle paths to their Fluid objects
|
|
34
|
-
* @param viewToFluid - A map of the view state values that need conversion to their Fluid state counterparts and the
|
|
35
|
-
* respective converters
|
|
36
|
-
* @param fluidToView - A map of the Fluid state values that need conversion to their view state counterparts and the
|
|
37
|
-
* respective converters
|
|
38
|
-
*/
|
|
39
|
-
export function syncState<
|
|
40
|
-
SV extends IViewState,
|
|
41
|
-
SF extends IFluidState
|
|
42
|
-
>(
|
|
43
|
-
isSyncedStateUpdate: boolean,
|
|
44
|
-
syncedStateId: string,
|
|
45
|
-
syncedState: ISyncedState,
|
|
46
|
-
runtime: IFluidDataStoreRuntime,
|
|
47
|
-
viewState: SV,
|
|
48
|
-
setState: (
|
|
49
|
-
newState: SV,
|
|
50
|
-
isSyncedStateUpdate?: boolean,
|
|
51
|
-
isLocal?: boolean
|
|
52
|
-
) => void,
|
|
53
|
-
fluidObjectMap: FluidObjectMap,
|
|
54
|
-
fluidToView: FluidToViewMap<SV, SF>,
|
|
55
|
-
viewToFluid?: ViewToFluidMap<SV, SF>,
|
|
56
|
-
) {
|
|
57
|
-
// Use the provided Fluid state if it is available, or use the one fetched from the synced state
|
|
58
|
-
const currentFluidState = getFluidState(
|
|
59
|
-
syncedStateId,
|
|
60
|
-
syncedState,
|
|
61
|
-
fluidObjectMap,
|
|
62
|
-
fluidToView,
|
|
63
|
-
);
|
|
64
|
-
if (currentFluidState === undefined) {
|
|
65
|
-
throw Error(
|
|
66
|
-
"Attempted to sync view and Fluid states before Fluid state was initialized",
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
// Fetch the schema
|
|
70
|
-
const schemaHandles = getSchema(
|
|
71
|
-
syncedStateId,
|
|
72
|
-
syncedState,
|
|
73
|
-
);
|
|
74
|
-
if (schemaHandles === undefined) {
|
|
75
|
-
throw Error("No schema found stored on the root");
|
|
76
|
-
}
|
|
77
|
-
const {
|
|
78
|
-
viewMatchingMapHandle,
|
|
79
|
-
fluidMatchingMapHandle,
|
|
80
|
-
} = schemaHandles;
|
|
81
|
-
|
|
82
|
-
const viewMatchingMap = fluidObjectMap.get(viewMatchingMapHandle.absolutePath)
|
|
83
|
-
?.fluidObject as ISharedMap;
|
|
84
|
-
const fluidMatchingMap = fluidObjectMap.get(fluidMatchingMapHandle.absolutePath)
|
|
85
|
-
?.fluidObject as ISharedMap;
|
|
86
|
-
|
|
87
|
-
if (viewMatchingMap === undefined || fluidMatchingMap === undefined) {
|
|
88
|
-
throw Error("Failed to fetch shared map DDSes from the schema handles");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Create the combined root state by combining the current root state and the new
|
|
92
|
-
// view state after it has been converted
|
|
93
|
-
let combinedFluidState = { ...currentFluidState };
|
|
94
|
-
Object.entries(viewState).forEach(([viewKey, viewValue]) => {
|
|
95
|
-
const needsConverter = viewMatchingMap.get(viewKey);
|
|
96
|
-
let partialRootState = {};
|
|
97
|
-
if (needsConverter !== undefined) {
|
|
98
|
-
partialRootState = getFluidFromView(
|
|
99
|
-
viewState,
|
|
100
|
-
viewKey as keyof SV,
|
|
101
|
-
currentFluidState,
|
|
102
|
-
viewToFluid,
|
|
103
|
-
);
|
|
104
|
-
} else {
|
|
105
|
-
partialRootState[viewKey] = viewState[viewKey];
|
|
106
|
-
}
|
|
107
|
-
// If it is from a synced state update, the values fetched from the synced state at the beginning
|
|
108
|
-
// overwrite those created here. Otherwise, the new values overwrite those in the synced state
|
|
109
|
-
if (isSyncedStateUpdate) {
|
|
110
|
-
combinedFluidState = { ...partialRootState, ...combinedFluidState };
|
|
111
|
-
} else {
|
|
112
|
-
combinedFluidState = { ...combinedFluidState, ...partialRootState };
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
// Create the combined view state by combining the current view with the new Fluid state
|
|
117
|
-
// after it has been converted
|
|
118
|
-
let combinedViewState = { ...viewState, ...{ fluidObjectMap } };
|
|
119
|
-
Object.entries(currentFluidState).forEach(([fluidKey, fluidValue]) => {
|
|
120
|
-
const needsConverter = fluidMatchingMap.get(fluidKey);
|
|
121
|
-
let partialViewState = {};
|
|
122
|
-
if (needsConverter !== undefined) {
|
|
123
|
-
partialViewState = getViewFromFluid(
|
|
124
|
-
syncedStateId,
|
|
125
|
-
syncedState,
|
|
126
|
-
fluidKey as keyof SF,
|
|
127
|
-
fluidObjectMap,
|
|
128
|
-
fluidToView,
|
|
129
|
-
combinedViewState,
|
|
130
|
-
combinedFluidState,
|
|
131
|
-
);
|
|
132
|
-
} else {
|
|
133
|
-
partialViewState[fluidKey] = currentFluidState[fluidKey];
|
|
134
|
-
}
|
|
135
|
-
// If it is from a synced state update, the values converted from the synced state overwrite those
|
|
136
|
-
// created here. Otherwise, the new view values overwrite those from the synced state.
|
|
137
|
-
if (isSyncedStateUpdate) {
|
|
138
|
-
combinedViewState = { ...combinedViewState, ...partialViewState };
|
|
139
|
-
} else {
|
|
140
|
-
combinedViewState = { ...partialViewState, ...combinedViewState };
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// If it is a local update, broadcast it by setting it on the root and updating locally
|
|
145
|
-
// Otherwise, only update locally as the root update has already been broadcasted
|
|
146
|
-
if (!isSyncedStateUpdate) {
|
|
147
|
-
setFluidState(
|
|
148
|
-
syncedStateId,
|
|
149
|
-
syncedState,
|
|
150
|
-
runtime,
|
|
151
|
-
fluidObjectMap,
|
|
152
|
-
fluidToView,
|
|
153
|
-
combinedViewState,
|
|
154
|
-
combinedFluidState,
|
|
155
|
-
viewToFluid,
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
setState(combinedViewState, isSyncedStateUpdate, true);
|
|
159
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IDirectoryValueChanged, SharedMap } from "@fluidframework/map";
|
|
7
|
-
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
8
|
-
import { IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
|
|
9
|
-
import {
|
|
10
|
-
FluidObjectMap,
|
|
11
|
-
IFluidState,
|
|
12
|
-
IViewState,
|
|
13
|
-
ViewToFluidMap,
|
|
14
|
-
FluidToViewMap,
|
|
15
|
-
} from "../interface";
|
|
16
|
-
import { ISyncedState } from "..";
|
|
17
|
-
import { addFluidObject, asyncForEach } from "./utils";
|
|
18
|
-
import { syncState } from "./syncState";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Add listeners too all the new handles passed in, store their respective Fluid objects
|
|
22
|
-
* on the fluidObjectMap, and then update both the local and synced state
|
|
23
|
-
* @param newHandleList - List of IFluidHandles for new Fluid objects that need to be added to the map
|
|
24
|
-
* @param fluidObjectMap - A map of Fluid handle paths to their Fluid objects
|
|
25
|
-
* @param isSyncedStateUpdate - Is the update from a local state update or from one triggered by the synced state
|
|
26
|
-
* @param syncedStateId - Unique ID for this synced Fluid object's state
|
|
27
|
-
* @param syncedState - The shared map this Fluid object's synced state is stored on
|
|
28
|
-
* @param runtime - The data store runtime
|
|
29
|
-
* @param viewState - The current view state
|
|
30
|
-
* @param setState - Callback to update the react view state
|
|
31
|
-
* @param syncedStateCallback - The callback that will be triggered when the synced state value for the Fluid objects
|
|
32
|
-
* passed in changes
|
|
33
|
-
* @param fluidToView - A map of the Fluid state values that need conversion to their view state counterparts and the
|
|
34
|
-
* respective converters
|
|
35
|
-
* @param viewToFluid - A map of the view state values that need conversion to their Fluid state counterparts and the
|
|
36
|
-
* respective converters
|
|
37
|
-
*/
|
|
38
|
-
export const updateStateAndFluidObjectMap = async <
|
|
39
|
-
SV extends IViewState,
|
|
40
|
-
SF extends IFluidState
|
|
41
|
-
>(
|
|
42
|
-
newHandleList: IFluidHandle[],
|
|
43
|
-
fluidObjectMap: FluidObjectMap,
|
|
44
|
-
storedHandleMap: SharedMap,
|
|
45
|
-
isSyncedStateUpdate: boolean,
|
|
46
|
-
syncedStateId: string,
|
|
47
|
-
syncedState: ISyncedState,
|
|
48
|
-
runtime: IFluidDataStoreRuntime,
|
|
49
|
-
viewState: SV,
|
|
50
|
-
setState: (newState: SV, isSyncedStateUpdate?: boolean) => void,
|
|
51
|
-
syncedStateCallback: (change: IDirectoryValueChanged, local: boolean) => void,
|
|
52
|
-
fluidToView: FluidToViewMap<SV, SF>,
|
|
53
|
-
viewToFluid?: ViewToFluidMap<SV, SF>,
|
|
54
|
-
) =>
|
|
55
|
-
asyncForEach(
|
|
56
|
-
newHandleList,
|
|
57
|
-
addFluidObject,
|
|
58
|
-
fluidObjectMap,
|
|
59
|
-
syncedStateCallback,
|
|
60
|
-
() =>
|
|
61
|
-
syncState(
|
|
62
|
-
true,
|
|
63
|
-
syncedStateId,
|
|
64
|
-
syncedState,
|
|
65
|
-
runtime,
|
|
66
|
-
viewState,
|
|
67
|
-
setState,
|
|
68
|
-
fluidObjectMap,
|
|
69
|
-
fluidToView,
|
|
70
|
-
viewToFluid,
|
|
71
|
-
),
|
|
72
|
-
storedHandleMap,
|
|
73
|
-
).then(() =>
|
|
74
|
-
syncState(
|
|
75
|
-
isSyncedStateUpdate,
|
|
76
|
-
syncedStateId,
|
|
77
|
-
syncedState,
|
|
78
|
-
runtime,
|
|
79
|
-
viewState,
|
|
80
|
-
setState,
|
|
81
|
-
fluidObjectMap,
|
|
82
|
-
fluidToView,
|
|
83
|
-
viewToFluid,
|
|
84
|
-
),
|
|
85
|
-
);
|
package/src/helpers/utils.tsx
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
|
-
import { IDirectoryValueChanged, SharedMap } from "@fluidframework/map";
|
|
8
|
-
import { SharedObject } from "@fluidframework/shared-object-base";
|
|
9
|
-
import {
|
|
10
|
-
FluidObjectMap,
|
|
11
|
-
IFluidState,
|
|
12
|
-
IViewState,
|
|
13
|
-
IFluidConverter,
|
|
14
|
-
} from "../interface";
|
|
15
|
-
import { IFluidObjectMapItem } from "..";
|
|
16
|
-
|
|
17
|
-
export function getByFluidKey<
|
|
18
|
-
SV extends IViewState,
|
|
19
|
-
SF extends IFluidState
|
|
20
|
-
>(searchValue: string, map: Map<keyof SV, IFluidConverter<SV, SF>>) {
|
|
21
|
-
for (const [key, value] of map.entries()) {
|
|
22
|
-
if (value.fluidKey === searchValue) {
|
|
23
|
-
return key;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export async function asyncForEach(
|
|
29
|
-
array: IFluidHandle[],
|
|
30
|
-
callback: (
|
|
31
|
-
handle: IFluidHandle,
|
|
32
|
-
fluidObjectMap: FluidObjectMap,
|
|
33
|
-
syncedStateCallback: (change: IDirectoryValueChanged, local: boolean) => void,
|
|
34
|
-
refreshView: () => void,
|
|
35
|
-
storedHandleMap: SharedMap,
|
|
36
|
-
) => Promise<void>,
|
|
37
|
-
fluidObjectMap: FluidObjectMap,
|
|
38
|
-
syncedStateCallback: (change: IDirectoryValueChanged, local: boolean) => void,
|
|
39
|
-
refreshView: () => void,
|
|
40
|
-
storedHandleMap: SharedMap,
|
|
41
|
-
): Promise<void> {
|
|
42
|
-
const promises: Promise<void>[] = [];
|
|
43
|
-
for (const value of array) {
|
|
44
|
-
promises.push(
|
|
45
|
-
callback(value, fluidObjectMap, syncedStateCallback, refreshView, storedHandleMap),
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
await Promise.all(promises);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export const addFluidObject = async <
|
|
52
|
-
SV extends IViewState,
|
|
53
|
-
SF extends IFluidState
|
|
54
|
-
>(
|
|
55
|
-
handle: IFluidHandle,
|
|
56
|
-
fluidObjectMap: FluidObjectMap,
|
|
57
|
-
syncedStateCallback: (change: IDirectoryValueChanged, local: boolean) => void,
|
|
58
|
-
refreshView: () => void,
|
|
59
|
-
storedHandleMap: SharedMap,
|
|
60
|
-
): Promise<void> => {
|
|
61
|
-
const maybeValue: IFluidObjectMapItem | undefined = fluidObjectMap.get(handle.absolutePath);
|
|
62
|
-
let value: IFluidObjectMapItem = {
|
|
63
|
-
isListened: false,
|
|
64
|
-
isRuntimeMap: false,
|
|
65
|
-
};
|
|
66
|
-
if (maybeValue === undefined) {
|
|
67
|
-
fluidObjectMap.set(
|
|
68
|
-
handle.absolutePath,
|
|
69
|
-
value,
|
|
70
|
-
);
|
|
71
|
-
} else {
|
|
72
|
-
value = maybeValue;
|
|
73
|
-
}
|
|
74
|
-
value.isListened = false;
|
|
75
|
-
fluidObjectMap.set(handle.absolutePath, value);
|
|
76
|
-
if (!storedHandleMap.has(handle.absolutePath)) {
|
|
77
|
-
storedHandleMap.set(handle.absolutePath, handle);
|
|
78
|
-
}
|
|
79
|
-
return handle.get().then((fluidObject) => {
|
|
80
|
-
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
81
|
-
if (value.isRuntimeMap) {
|
|
82
|
-
(fluidObject as SharedMap).on("valueChanged", syncedStateCallback);
|
|
83
|
-
} else if (value.listenedEvents !== undefined) {
|
|
84
|
-
for (const event of value.listenedEvents) {
|
|
85
|
-
(fluidObject as SharedObject).on(event, refreshView);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
value.fluidObject = fluidObject;
|
|
89
|
-
value.isListened = true;
|
|
90
|
-
fluidObjectMap.set(handle.absolutePath, value);
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export function isEquivalent(a, b) {
|
|
95
|
-
if (a === undefined || b === undefined) {
|
|
96
|
-
return a === b;
|
|
97
|
-
}
|
|
98
|
-
const aKeys = Object.getOwnPropertyNames(a);
|
|
99
|
-
const bKeys = Object.getOwnPropertyNames(b);
|
|
100
|
-
if (aKeys.length !== bKeys.length) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
for (const i of aKeys) {
|
|
104
|
-
if (a[i] !== b[i]) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return true;
|
|
109
|
-
}
|