@dxos/plugin-space 0.8.4-main.21d9917 → 0.8.4-main.2244d791bb
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/dist/lib/browser/CollectionArticle-LKTAABXP.mjs +128 -0
- package/dist/lib/browser/CollectionArticle-LKTAABXP.mjs.map +7 -0
- package/dist/lib/browser/{ObjectCardStack-TWHN6C2Y.mjs → ObjectCardStack-CXNBCSMR.mjs} +2 -2
- package/dist/lib/browser/ObjectCardStack-CXNBCSMR.mjs.map +7 -0
- package/dist/lib/browser/{ObjectDetails-GEDIISKK.mjs → ObjectDetails-HXV4IQEM.mjs} +6 -5
- package/dist/lib/browser/ObjectDetails-HXV4IQEM.mjs.map +7 -0
- package/dist/lib/browser/{RecordArticle-W57QE7QV.mjs → RecordArticle-36LDKFWF.mjs} +11 -10
- package/dist/lib/browser/RecordArticle-36LDKFWF.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-SJHTZXZF.mjs → app-graph-builder-GLV46QSI.mjs} +26 -19
- package/dist/lib/browser/app-graph-builder-GLV46QSI.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-7AT7QMSK.mjs → app-graph-serializer-VOLRDNVE.mjs} +9 -8
- package/dist/lib/browser/app-graph-serializer-VOLRDNVE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZT2VPYRM.mjs → chunk-7D63MVRS.mjs} +3 -3
- package/dist/lib/browser/chunk-7D63MVRS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-4WZUGLQQ.mjs → chunk-A7ZCVQGZ.mjs} +10 -9
- package/dist/lib/browser/chunk-A7ZCVQGZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-CCRSHECL.mjs → chunk-KGLWYGIF.mjs} +4 -3
- package/dist/lib/browser/chunk-KGLWYGIF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AWVAX26X.mjs → chunk-NF3ZFAB4.mjs} +2 -2
- package/dist/lib/browser/{chunk-SUI34XSA.mjs → chunk-WAOJLA2S.mjs} +12 -12
- package/dist/lib/browser/chunk-WAOJLA2S.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3X2EA2OA.mjs → chunk-XRTOZE23.mjs} +128 -137
- package/dist/lib/browser/chunk-XRTOZE23.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +31 -29
- package/dist/lib/browser/cli/index.mjs.map +3 -3
- package/dist/lib/browser/index.mjs +58 -53
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-SIRQT36Z.mjs → operation-resolver-PJJ3PCM7.mjs} +45 -42
- package/dist/lib/browser/operation-resolver-PJJ3PCM7.mjs.map +7 -0
- package/dist/lib/browser/{react-root-PI7VTZUZ.mjs → react-root-MRIDHLHH.mjs} +8 -8
- package/dist/lib/browser/react-root-MRIDHLHH.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-BPE7VWI7.mjs → react-surface-ARZZ343H.mjs} +38 -37
- package/dist/lib/browser/react-surface-ARZZ343H.mjs.map +7 -0
- package/dist/lib/browser/{repair-CJG26D52.mjs → repair-DKU4TUD2.mjs} +2 -2
- package/dist/lib/browser/{settings-ZS2AQ73E.mjs → settings-M2DMD2ZA.mjs} +5 -4
- package/dist/lib/browser/settings-M2DMD2ZA.mjs.map +7 -0
- package/dist/lib/browser/{spaces-ready-OQDGWUOS.mjs → spaces-ready-XWJUJ43N.mjs} +13 -12
- package/dist/lib/browser/spaces-ready-XWJUJ43N.mjs.map +7 -0
- package/dist/lib/browser/{state-7YZQB2KY.mjs → state-V637BLIM.mjs} +5 -5
- package/dist/lib/browser/state-V637BLIM.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs +129 -0
- package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectCardStack-C5ZXRKP7.mjs → ObjectCardStack-EHXPNRQW.mjs} +2 -2
- package/dist/lib/node-esm/ObjectCardStack-EHXPNRQW.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectDetails-6ZLDRKCO.mjs → ObjectDetails-N73UI4ZL.mjs} +6 -5
- package/dist/lib/node-esm/ObjectDetails-N73UI4ZL.mjs.map +7 -0
- package/dist/lib/node-esm/{RecordArticle-SSV74Z46.mjs → RecordArticle-CMEXNNOZ.mjs} +11 -10
- package/dist/lib/node-esm/RecordArticle-CMEXNNOZ.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-HZ3XXDFZ.mjs → app-graph-builder-KCEHEKVS.mjs} +26 -19
- package/dist/lib/node-esm/app-graph-builder-KCEHEKVS.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-WJ2TIQG6.mjs → app-graph-serializer-7C4MV5NB.mjs} +9 -8
- package/dist/lib/node-esm/app-graph-serializer-7C4MV5NB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2SW6S2BB.mjs → chunk-5N3YIAXD.mjs} +3 -3
- package/dist/lib/node-esm/chunk-5N3YIAXD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JOBIWCBC.mjs → chunk-A5A7M37T.mjs} +10 -9
- package/dist/lib/node-esm/chunk-A5A7M37T.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7KMYUWSR.mjs → chunk-FB5YNROS.mjs} +12 -12
- package/dist/lib/node-esm/chunk-FB5YNROS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-MPL6NHQX.mjs → chunk-NYSDQPNM.mjs} +4 -3
- package/dist/lib/node-esm/chunk-NYSDQPNM.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HREWB23G.mjs → chunk-PG7DNOEX.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-EYS3L2NO.mjs → chunk-QDIOQTXY.mjs} +128 -137
- package/dist/lib/node-esm/chunk-QDIOQTXY.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +31 -29
- package/dist/lib/node-esm/cli/index.mjs.map +3 -3
- package/dist/lib/node-esm/index.mjs +58 -53
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-ZE3XJL5J.mjs → operation-resolver-2K7N4KYC.mjs} +45 -42
- package/dist/lib/node-esm/operation-resolver-2K7N4KYC.mjs.map +7 -0
- package/dist/lib/node-esm/{react-root-KUXM33JI.mjs → react-root-LKSSWFGF.mjs} +8 -8
- package/dist/lib/node-esm/react-root-LKSSWFGF.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-STCQKUZ4.mjs → react-surface-QG5RNBPD.mjs} +38 -37
- package/dist/lib/node-esm/react-surface-QG5RNBPD.mjs.map +7 -0
- package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs → repair-C2H6JQCL.mjs} +2 -2
- package/dist/lib/node-esm/{settings-PVI2VG56.mjs → settings-VCPCNBOY.mjs} +5 -4
- package/dist/lib/node-esm/settings-VCPCNBOY.mjs.map +7 -0
- package/dist/lib/node-esm/{spaces-ready-R744OHQG.mjs → spaces-ready-5JOGEWON.mjs} +13 -12
- package/dist/lib/node-esm/spaces-ready-5JOGEWON.mjs.map +7 -0
- package/dist/lib/node-esm/{state-XE5YGPHM.mjs → state-5MCEPWN3.mjs} +5 -5
- package/dist/lib/node-esm/state-5MCEPWN3.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +2 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +2 -2
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
- package/dist/types/src/cli/commands/database/add.d.ts.map +1 -1
- package/dist/types/src/cli/plugin.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CollectionArticle.d.ts +2 -2
- package/dist/types/src/components/CollectionArticle.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts +1 -1
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +4 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1 -1
- package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +1 -1
- package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.d.ts +1 -1
- package/dist/types/src/components/RecordArticle.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.stories.d.ts +1 -1
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +4 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +4 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +18 -12
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +2 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +66 -65
- package/src/SpacePlugin.ts +59 -40
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +17 -13
- package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +5 -4
- package/src/capabilities/operation-resolver/operation-resolver.ts +31 -29
- package/src/capabilities/react-root/react-root.tsx +3 -3
- package/src/capabilities/react-surface/react-surface.tsx +34 -32
- package/src/capabilities/settings/settings.ts +3 -2
- package/src/capabilities/spaces-ready/spaces-ready.ts +8 -7
- package/src/capabilities/state/state.ts +3 -3
- package/src/cli/commands/database/add.ts +7 -8
- package/src/cli/commands/database/query/query.ts +1 -1
- package/src/cli/commands/database/remove.ts +2 -2
- package/src/cli/commands/database/stats.ts +1 -1
- package/src/cli/plugin.ts +33 -26
- package/src/components/AwaitingObject.tsx +4 -3
- package/src/components/CollectionArticle.tsx +71 -72
- package/src/components/CollectionSection.tsx +1 -1
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +1 -1
- package/src/components/CreateDialog/CreateObjectDialog.tsx +20 -17
- package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -39
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +21 -21
- package/src/components/JoinDialog/JoinDialog.tsx +8 -7
- package/src/components/MembersContainer/MembersContainer.stories.tsx +1 -1
- package/src/components/MembersContainer/MembersContainer.tsx +45 -48
- package/src/components/ObjectCardStack/ObjectCardStack.tsx +1 -1
- package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +4 -4
- package/src/components/ObjectDetails/ObjectDetails.tsx +6 -5
- package/src/components/ObjectRenamePopover/ObjectRenamePopover.tsx +3 -3
- package/src/components/RecordArticle.stories.tsx +6 -5
- package/src/components/RecordArticle.tsx +23 -21
- package/src/components/SchemaContainer.tsx +20 -17
- package/src/components/SpacePluginSettings.tsx +34 -31
- package/src/components/SpacePresence/SpacePresence.stories.tsx +1 -1
- package/src/components/SpacePresence/SpacePresence.tsx +2 -1
- package/src/components/SpaceRenamePopover/SpaceRenamePopover.tsx +3 -3
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +1 -1
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +161 -179
- package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
- package/src/components/SyncStatus/SyncStatus.stories.tsx +1 -1
- package/src/components/ViewEditor.tsx +1 -1
- package/src/hooks/useActiveSpace.ts +5 -4
- package/src/hooks/useInputSurfaceLookup.tsx +3 -3
- package/src/translations.ts +2 -2
- package/src/types/events.ts +3 -2
- package/src/types/types.ts +10 -3
- package/src/util.tsx +9 -6
- package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs +0 -129
- package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs.map +0 -7
- package/dist/lib/browser/ObjectCardStack-TWHN6C2Y.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetails-GEDIISKK.mjs.map +0 -7
- package/dist/lib/browser/RecordArticle-W57QE7QV.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-SJHTZXZF.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-7AT7QMSK.mjs.map +0 -7
- package/dist/lib/browser/chunk-3X2EA2OA.mjs.map +0 -7
- package/dist/lib/browser/chunk-4WZUGLQQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-CCRSHECL.mjs.map +0 -7
- package/dist/lib/browser/chunk-SUI34XSA.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZT2VPYRM.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-SIRQT36Z.mjs.map +0 -7
- package/dist/lib/browser/react-root-PI7VTZUZ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-BPE7VWI7.mjs.map +0 -7
- package/dist/lib/browser/settings-ZS2AQ73E.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-OQDGWUOS.mjs.map +0 -7
- package/dist/lib/browser/state-7YZQB2KY.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs +0 -130
- package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectCardStack-C5ZXRKP7.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetails-6ZLDRKCO.mjs.map +0 -7
- package/dist/lib/node-esm/RecordArticle-SSV74Z46.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-HZ3XXDFZ.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-WJ2TIQG6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2SW6S2BB.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7KMYUWSR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-EYS3L2NO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JOBIWCBC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MPL6NHQX.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-ZE3XJL5J.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-KUXM33JI.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-STCQKUZ4.mjs.map +0 -7
- package/dist/lib/node-esm/settings-PVI2VG56.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-R744OHQG.mjs.map +0 -7
- package/dist/lib/node-esm/state-XE5YGPHM.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-AWVAX26X.mjs.map → chunk-NF3ZFAB4.mjs.map} +0 -0
- /package/dist/lib/browser/{repair-CJG26D52.mjs.map → repair-DKU4TUD2.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-HREWB23G.mjs.map → chunk-PG7DNOEX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs.map → repair-C2H6JQCL.mjs.map} +0 -0
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Capabilities, Capability, Plugin, UndoMapping } from '@dxos/app-framework';
|
|
8
|
+
import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
|
|
8
9
|
import { SpaceState, getSpace } from '@dxos/client/echo';
|
|
9
10
|
import { Database, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
|
|
10
11
|
import { EchoDatabaseImpl, Serializer } from '@dxos/echo-db';
|
|
@@ -28,6 +29,7 @@ import {
|
|
|
28
29
|
OBJECT_RENAME_POPOVER,
|
|
29
30
|
SPACE_RENAME_POPOVER,
|
|
30
31
|
} from '../../constants';
|
|
32
|
+
import { meta } from '../../meta';
|
|
31
33
|
import { SpaceEvents } from '../../types';
|
|
32
34
|
import { SpaceCapabilities, SpaceOperation } from '../../types';
|
|
33
35
|
import { COMPOSER_SPACE_LOCK, cloneObject, getNestedObjects } from '../../util';
|
|
@@ -43,11 +45,11 @@ export default Capability.makeModule(
|
|
|
43
45
|
const capabilityManager = yield* Capability.Service;
|
|
44
46
|
|
|
45
47
|
const resolve = (typename: string) =>
|
|
46
|
-
capabilityManager.getAll(
|
|
47
|
-
|
|
48
|
+
capabilityManager.getAll(AppCapabilities.Metadata).find(({ id }: { id: string }) => id === typename)?.metadata ??
|
|
49
|
+
{};
|
|
48
50
|
|
|
49
51
|
return [
|
|
50
|
-
Capability.contributes(
|
|
52
|
+
Capability.contributes(Capabilities.UndoMapping, [
|
|
51
53
|
UndoMapping.make({
|
|
52
54
|
operation: SpaceOperation.DeleteField,
|
|
53
55
|
inverse: SpaceOperation.RestoreField,
|
|
@@ -57,7 +59,7 @@ export default Capability.makeModule(
|
|
|
57
59
|
props: output.props,
|
|
58
60
|
index: output.index,
|
|
59
61
|
}),
|
|
60
|
-
message: ['field deleted label', { ns:
|
|
62
|
+
message: ['field deleted label', { ns: meta.id }],
|
|
61
63
|
}),
|
|
62
64
|
UndoMapping.make({
|
|
63
65
|
operation: SpaceOperation.RemoveObjects,
|
|
@@ -72,12 +74,12 @@ export default Capability.makeModule(
|
|
|
72
74
|
message: (input, _output) => {
|
|
73
75
|
const ns = Obj.getTypename(input.objects[0]);
|
|
74
76
|
return ns && input.objects.length === 1
|
|
75
|
-
? ['object deleted label', { ns }]
|
|
76
|
-
: ['objects deleted label', { ns:
|
|
77
|
+
? ['object deleted label', { ns: meta.id }]
|
|
78
|
+
: ['objects deleted label', { ns: meta.id }];
|
|
77
79
|
},
|
|
78
80
|
}),
|
|
79
81
|
]),
|
|
80
|
-
Capability.contributes(
|
|
82
|
+
Capability.contributes(Capabilities.OperationResolver, [
|
|
81
83
|
//
|
|
82
84
|
// Open
|
|
83
85
|
//
|
|
@@ -106,7 +108,7 @@ export default Capability.makeModule(
|
|
|
106
108
|
OperationResolver.make({
|
|
107
109
|
operation: SpaceOperation.Join,
|
|
108
110
|
handler: Effect.fnUntraced(function* (input) {
|
|
109
|
-
yield* Operation.invoke(
|
|
111
|
+
yield* Operation.invoke(LayoutOperation.UpdateDialog, {
|
|
110
112
|
subject: JOIN_DIALOG,
|
|
111
113
|
blockAlign: 'start',
|
|
112
114
|
props: {
|
|
@@ -123,7 +125,7 @@ export default Capability.makeModule(
|
|
|
123
125
|
OperationResolver.make({
|
|
124
126
|
operation: SpaceOperation.WaitForObject,
|
|
125
127
|
handler: Effect.fnUntraced(function* (input) {
|
|
126
|
-
yield*
|
|
128
|
+
yield* Capabilities.updateAtomValue(SpaceCapabilities.EphemeralState, (current) => ({
|
|
127
129
|
...current,
|
|
128
130
|
awaiting: input.id,
|
|
129
131
|
}));
|
|
@@ -136,7 +138,7 @@ export default Capability.makeModule(
|
|
|
136
138
|
OperationResolver.make({
|
|
137
139
|
operation: SpaceOperation.OpenSettings,
|
|
138
140
|
handler: Effect.fnUntraced(function* (input) {
|
|
139
|
-
yield* Operation.invoke(
|
|
141
|
+
yield* Operation.invoke(LayoutOperation.Open, {
|
|
140
142
|
subject: [`properties-settings${ATTENDABLE_PATH_SEPARATOR}${input.space.id}`],
|
|
141
143
|
workspace: input.space.id,
|
|
142
144
|
});
|
|
@@ -149,7 +151,7 @@ export default Capability.makeModule(
|
|
|
149
151
|
OperationResolver.make({
|
|
150
152
|
operation: SpaceOperation.RemoveObjects,
|
|
151
153
|
handler: Effect.fnUntraced(function* (input) {
|
|
152
|
-
const layout = yield*
|
|
154
|
+
const layout = yield* Capabilities.getAtomValue(AppCapabilities.Layout);
|
|
153
155
|
const objects = input.objects as Obj.Unknown[];
|
|
154
156
|
|
|
155
157
|
// All objects must be a member of the same space.
|
|
@@ -205,7 +207,7 @@ export default Capability.makeModule(
|
|
|
205
207
|
}
|
|
206
208
|
|
|
207
209
|
if (wasActive.length > 0) {
|
|
208
|
-
yield* Operation.invoke(
|
|
210
|
+
yield* Operation.invoke(LayoutOperation.Close, { subject: wasActive });
|
|
209
211
|
}
|
|
210
212
|
|
|
211
213
|
// Return data needed for undo.
|
|
@@ -225,7 +227,7 @@ export default Capability.makeModule(
|
|
|
225
227
|
OperationResolver.make({
|
|
226
228
|
operation: SpaceOperation.DeleteField,
|
|
227
229
|
handler: Effect.fnUntraced(function* (input) {
|
|
228
|
-
const registry = yield* Capability.get(
|
|
230
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
229
231
|
const view = input.view as any;
|
|
230
232
|
const db = Obj.getDatabase(view);
|
|
231
233
|
invariant(db);
|
|
@@ -259,9 +261,9 @@ export default Capability.makeModule(
|
|
|
259
261
|
OperationResolver.make({
|
|
260
262
|
operation: SpaceOperation.OpenCreateObject,
|
|
261
263
|
handler: Effect.fnUntraced(function* (input) {
|
|
262
|
-
const ephemeralState = yield*
|
|
264
|
+
const ephemeralState = yield* Capabilities.getAtomValue(SpaceCapabilities.EphemeralState);
|
|
263
265
|
const navigable = input.navigable ?? true;
|
|
264
|
-
yield* Operation.invoke(
|
|
266
|
+
yield* Operation.invoke(LayoutOperation.UpdateDialog, {
|
|
265
267
|
subject: CREATE_OBJECT_DIALOG,
|
|
266
268
|
blockAlign: 'start',
|
|
267
269
|
props: {
|
|
@@ -297,7 +299,7 @@ export default Capability.makeModule(
|
|
|
297
299
|
object,
|
|
298
300
|
target: Database.isDatabase(target) ? undefined : target,
|
|
299
301
|
hidden: input.hidden,
|
|
300
|
-
}).pipe(Effect.provide(Database.
|
|
302
|
+
}).pipe(Effect.provide(Database.layer(db)));
|
|
301
303
|
|
|
302
304
|
yield* Operation.schedule(ObservabilityOperation.SendEvent, {
|
|
303
305
|
name: 'space.object.add',
|
|
@@ -381,7 +383,7 @@ export default Capability.makeModule(
|
|
|
381
383
|
OperationResolver.make({
|
|
382
384
|
operation: SpaceOperation.OpenCreateSpace,
|
|
383
385
|
handler: Effect.fnUntraced(function* () {
|
|
384
|
-
yield* Operation.invoke(
|
|
386
|
+
yield* Operation.invoke(LayoutOperation.UpdateDialog, {
|
|
385
387
|
subject: CREATE_SPACE_DIALOG,
|
|
386
388
|
blockAlign: 'start',
|
|
387
389
|
});
|
|
@@ -447,12 +449,12 @@ export default Capability.makeModule(
|
|
|
447
449
|
const { space, version: targetVersion } = input;
|
|
448
450
|
|
|
449
451
|
if (space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {
|
|
450
|
-
yield*
|
|
452
|
+
yield* Capabilities.updateAtomValue(SpaceCapabilities.EphemeralState, (current) => ({
|
|
451
453
|
...current,
|
|
452
454
|
sdkMigrationRunning: { ...current.sdkMigrationRunning, [space.id]: true },
|
|
453
455
|
}));
|
|
454
456
|
yield* Effect.promise(() => space.internal.migrate());
|
|
455
|
-
yield*
|
|
457
|
+
yield* Capabilities.updateAtomValue(SpaceCapabilities.EphemeralState, (current) => ({
|
|
456
458
|
...current,
|
|
457
459
|
sdkMigrationRunning: { ...current.sdkMigrationRunning, [space.id]: false },
|
|
458
460
|
}));
|
|
@@ -494,7 +496,7 @@ export default Capability.makeModule(
|
|
|
494
496
|
OperationResolver.make({
|
|
495
497
|
operation: SpaceOperation.Rename,
|
|
496
498
|
handler: Effect.fnUntraced(function* (input) {
|
|
497
|
-
yield* Operation.invoke(
|
|
499
|
+
yield* Operation.invoke(LayoutOperation.UpdatePopover, {
|
|
498
500
|
subject: SPACE_RENAME_POPOVER,
|
|
499
501
|
anchorId: `dxos.org/ui/${input.caller}/${input.space.id}`,
|
|
500
502
|
props: input.space,
|
|
@@ -509,7 +511,7 @@ export default Capability.makeModule(
|
|
|
509
511
|
operation: SpaceOperation.RenameObject,
|
|
510
512
|
handler: Effect.fnUntraced(function* (input) {
|
|
511
513
|
const object = input.object as Obj.Unknown;
|
|
512
|
-
yield* Operation.invoke(
|
|
514
|
+
yield* Operation.invoke(LayoutOperation.UpdatePopover, {
|
|
513
515
|
subject: OBJECT_RENAME_POPOVER,
|
|
514
516
|
anchorId: `dxos.org/ui/${input.caller}/${Obj.getDXN(object).toString()}`,
|
|
515
517
|
props: object,
|
|
@@ -523,7 +525,7 @@ export default Capability.makeModule(
|
|
|
523
525
|
OperationResolver.make({
|
|
524
526
|
operation: SpaceOperation.OpenMembers,
|
|
525
527
|
handler: Effect.fnUntraced(function* (input) {
|
|
526
|
-
yield* Operation.invoke(
|
|
528
|
+
yield* Operation.invoke(LayoutOperation.Open, {
|
|
527
529
|
subject: [`members-settings${ATTENDABLE_PATH_SEPARATOR}${input.space.id}`],
|
|
528
530
|
workspace: input.space.id,
|
|
529
531
|
});
|
|
@@ -615,10 +617,10 @@ export default Capability.makeModule(
|
|
|
615
617
|
OperationResolver.make({
|
|
616
618
|
operation: SpaceOperation.AddSchema,
|
|
617
619
|
handler: Effect.fnUntraced(function* (input) {
|
|
618
|
-
const db = input.db
|
|
619
|
-
const schemas =
|
|
620
|
+
const db = input.db;
|
|
621
|
+
const schemas = yield* Effect.promise(() => db.schemaRegistry.register([input.schema]));
|
|
620
622
|
const schema = schemas[0];
|
|
621
|
-
Obj.change(schema.
|
|
623
|
+
Obj.change(schema.persistentSchema, (s) => {
|
|
622
624
|
if (input.name) {
|
|
623
625
|
s.name = input.name;
|
|
624
626
|
}
|
|
@@ -646,7 +648,7 @@ export default Capability.makeModule(
|
|
|
646
648
|
},
|
|
647
649
|
});
|
|
648
650
|
|
|
649
|
-
return { id: schema.id, object: schema.
|
|
651
|
+
return { id: schema.id, object: schema.persistentSchema, schema };
|
|
650
652
|
}),
|
|
651
653
|
}),
|
|
652
654
|
|
|
@@ -690,7 +692,7 @@ export default Capability.makeModule(
|
|
|
690
692
|
OperationResolver.make({
|
|
691
693
|
operation: SpaceOperation.RestoreField,
|
|
692
694
|
handler: Effect.fnUntraced(function* (input) {
|
|
693
|
-
const registry = yield* Capability.get(
|
|
695
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
694
696
|
const view = input.view as any;
|
|
695
697
|
const db = Obj.getDatabase(view);
|
|
696
698
|
invariant(db);
|
|
@@ -750,7 +752,7 @@ export default Capability.makeModule(
|
|
|
750
752
|
|
|
751
753
|
// Re-open objects that were active.
|
|
752
754
|
if (wasActive.length > 0) {
|
|
753
|
-
yield* Operation.invoke(
|
|
755
|
+
yield* Operation.invoke(LayoutOperation.Open, { subject: wasActive });
|
|
754
756
|
}
|
|
755
757
|
}),
|
|
756
758
|
}),
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { useAtomCapability } from '@dxos/app-framework/
|
|
8
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
9
|
+
import { useAtomCapability } from '@dxos/app-framework/ui';
|
|
10
10
|
|
|
11
11
|
import { AwaitingObject } from '../../components';
|
|
12
12
|
import { meta } from '../../meta';
|
|
@@ -14,7 +14,7 @@ import { SpaceCapabilities } from '../../types';
|
|
|
14
14
|
|
|
15
15
|
export default Capability.makeModule(() =>
|
|
16
16
|
Effect.succeed(
|
|
17
|
-
Capability.contributes(
|
|
17
|
+
Capability.contributes(Capabilities.ReactRoot, {
|
|
18
18
|
id: meta.id,
|
|
19
19
|
root: () => {
|
|
20
20
|
const ephemeral = useAtomCapability(SpaceCapabilities.EphemeralState);
|
|
@@ -7,8 +7,10 @@ import * as Option from 'effect/Option';
|
|
|
7
7
|
import type * as Schema from 'effect/Schema';
|
|
8
8
|
import React, { useCallback } from 'react';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { Surface, useAtomCapability,
|
|
10
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
11
|
+
import { Surface, useAtomCapability, useSettingsState } from '@dxos/app-framework/ui';
|
|
12
|
+
import { AppCapabilities } from '@dxos/app-toolkit';
|
|
13
|
+
import { useLayout } from '@dxos/app-toolkit/ui';
|
|
12
14
|
import { Database, Obj, type Ref } from '@dxos/echo';
|
|
13
15
|
import { findAnnotation } from '@dxos/effect';
|
|
14
16
|
import { type Space, SpaceState, getSpace, isSpace, parseId, useSpace } from '@dxos/react-client/echo';
|
|
@@ -67,15 +69,15 @@ export default Capability.makeModule(
|
|
|
67
69
|
Effect.fnUntraced(function* (props?: ReactSurfaceOptions) {
|
|
68
70
|
const { createInvitationUrl } = props!;
|
|
69
71
|
|
|
70
|
-
return Capability.contributes(
|
|
71
|
-
|
|
72
|
+
return Capability.contributes(Capabilities.ReactSurface, [
|
|
73
|
+
Surface.create({
|
|
72
74
|
id: `${meta.id}/article`,
|
|
73
75
|
role: 'article',
|
|
74
76
|
filter: (data): data is { subject: Space } =>
|
|
75
77
|
// TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
|
|
76
78
|
isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,
|
|
77
79
|
component: ({ data, role, ...rest }) => (
|
|
78
|
-
<Surface
|
|
80
|
+
<Surface.Surface
|
|
79
81
|
data={{
|
|
80
82
|
id: data.subject.id,
|
|
81
83
|
subject: data.subject.properties[Collection.Collection.typename]?.target,
|
|
@@ -85,7 +87,7 @@ export default Capability.makeModule(
|
|
|
85
87
|
/>
|
|
86
88
|
),
|
|
87
89
|
}),
|
|
88
|
-
|
|
90
|
+
Surface.create({
|
|
89
91
|
id: `${meta.id}/collection-fallback`,
|
|
90
92
|
role: 'article',
|
|
91
93
|
position: 'fallback',
|
|
@@ -93,31 +95,31 @@ export default Capability.makeModule(
|
|
|
93
95
|
Obj.instanceOf(Collection.Collection, data.subject) || Obj.instanceOf(Collection.Managed, data.subject),
|
|
94
96
|
component: ({ data }) => <CollectionArticle subject={data.subject} />,
|
|
95
97
|
}),
|
|
96
|
-
|
|
98
|
+
Surface.create({
|
|
97
99
|
id: `${meta.id}/record-article`,
|
|
98
100
|
role: 'article',
|
|
99
101
|
position: 'fallback',
|
|
100
102
|
filter: (data): data is { subject: Obj.Unknown } => Obj.isObject(data.subject),
|
|
101
103
|
component: ({ data }) => <RecordArticle subject={data.subject} />,
|
|
102
104
|
}),
|
|
103
|
-
|
|
105
|
+
Surface.create({
|
|
104
106
|
id: `${meta.id}/plugin-settings`,
|
|
105
107
|
role: 'article',
|
|
106
|
-
filter: (data): data is { subject:
|
|
107
|
-
|
|
108
|
+
filter: (data): data is { subject: AppCapabilities.Settings } =>
|
|
109
|
+
AppCapabilities.isSettings(data.subject) && data.subject.prefix === meta.id,
|
|
108
110
|
component: ({ data: { subject } }) => {
|
|
109
111
|
const { settings, updateSettings } = useSettingsState<SpaceSettingsProps>(subject.atom);
|
|
110
112
|
return <SpacePluginSettings settings={settings} onSettingsChange={updateSettings} />;
|
|
111
113
|
},
|
|
112
114
|
}),
|
|
113
|
-
|
|
115
|
+
Surface.create({
|
|
114
116
|
id: `${meta.id}/companion/object-settings`,
|
|
115
117
|
role: 'article',
|
|
116
118
|
filter: (data): data is { companionTo: Obj.Unknown } =>
|
|
117
119
|
Obj.isObject(data.companionTo) && data.subject === 'settings',
|
|
118
120
|
component: ({ ref, data, role }) => <ObjectDetails subject={data.companionTo} role={role} ref={ref} />,
|
|
119
121
|
}),
|
|
120
|
-
|
|
122
|
+
Surface.create({
|
|
121
123
|
id: `${meta.id}/space-settings-properties`,
|
|
122
124
|
role: 'article',
|
|
123
125
|
filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
|
|
@@ -129,10 +131,10 @@ export default Capability.makeModule(
|
|
|
129
131
|
return null;
|
|
130
132
|
}
|
|
131
133
|
|
|
132
|
-
return <SpaceSettingsContainer space={space}
|
|
134
|
+
return <SpaceSettingsContainer space={space} />;
|
|
133
135
|
},
|
|
134
136
|
}),
|
|
135
|
-
|
|
137
|
+
Surface.create({
|
|
136
138
|
id: `${meta.id}/space-settings-members`,
|
|
137
139
|
role: 'article',
|
|
138
140
|
position: 'hoist',
|
|
@@ -148,7 +150,7 @@ export default Capability.makeModule(
|
|
|
148
150
|
return <MembersContainer space={space} createInvitationUrl={createInvitationUrl} />;
|
|
149
151
|
},
|
|
150
152
|
}),
|
|
151
|
-
|
|
153
|
+
Surface.create({
|
|
152
154
|
id: `${meta.id}/space-settings-schema`,
|
|
153
155
|
role: 'article',
|
|
154
156
|
filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
|
|
@@ -163,7 +165,7 @@ export default Capability.makeModule(
|
|
|
163
165
|
return <SchemaContainer space={space} />;
|
|
164
166
|
},
|
|
165
167
|
}),
|
|
166
|
-
|
|
168
|
+
Surface.create({
|
|
167
169
|
id: `${meta.id}/selected-objects`,
|
|
168
170
|
role: 'article',
|
|
169
171
|
filter: (data): data is { companionTo: Obj.Obj<{ view: Ref.Ref<View.View> }>; subject: 'selected-objects' } => {
|
|
@@ -187,25 +189,25 @@ export default Capability.makeModule(
|
|
|
187
189
|
/>
|
|
188
190
|
),
|
|
189
191
|
}),
|
|
190
|
-
|
|
192
|
+
Surface.create({
|
|
191
193
|
id: JOIN_DIALOG,
|
|
192
194
|
role: 'dialog',
|
|
193
195
|
filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,
|
|
194
196
|
component: ({ data }) => <JoinDialog {...data.props} />,
|
|
195
197
|
}),
|
|
196
|
-
|
|
198
|
+
Surface.create({
|
|
197
199
|
id: CREATE_SPACE_DIALOG,
|
|
198
200
|
role: 'dialog',
|
|
199
201
|
filter: (data): data is any => data.component === CREATE_SPACE_DIALOG,
|
|
200
202
|
component: () => <CreateSpaceDialog />,
|
|
201
203
|
}),
|
|
202
|
-
|
|
204
|
+
Surface.create({
|
|
203
205
|
id: CREATE_OBJECT_DIALOG,
|
|
204
206
|
role: 'dialog',
|
|
205
207
|
filter: (data): data is { props: CreateObjectDialogProps } => data.component === CREATE_OBJECT_DIALOG,
|
|
206
208
|
component: ({ data }) => <CreateObjectDialog {...data.props} />,
|
|
207
209
|
}),
|
|
208
|
-
|
|
210
|
+
Surface.create({
|
|
209
211
|
id: `${meta.id}/create-initial-space-form-[hue]`,
|
|
210
212
|
role: 'form-input',
|
|
211
213
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
@@ -224,7 +226,7 @@ export default Capability.makeModule(
|
|
|
224
226
|
);
|
|
225
227
|
},
|
|
226
228
|
}),
|
|
227
|
-
|
|
229
|
+
Surface.create({
|
|
228
230
|
id: `${meta.id}/create-initial-space-form-[icon]`,
|
|
229
231
|
role: 'form-input',
|
|
230
232
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
@@ -248,7 +250,7 @@ export default Capability.makeModule(
|
|
|
248
250
|
);
|
|
249
251
|
},
|
|
250
252
|
}),
|
|
251
|
-
|
|
253
|
+
Surface.create({
|
|
252
254
|
id: `${meta.id}/typename-form-input`,
|
|
253
255
|
role: 'form-input',
|
|
254
256
|
filter: (
|
|
@@ -275,7 +277,7 @@ export default Capability.makeModule(
|
|
|
275
277
|
return <SelectField {...props} options={options} />;
|
|
276
278
|
},
|
|
277
279
|
}),
|
|
278
|
-
|
|
280
|
+
Surface.create({
|
|
279
281
|
id: `${meta.id}/object-settings`,
|
|
280
282
|
role: 'object-settings',
|
|
281
283
|
filter: (data): data is { subject: { view: Ref.Ref<View.View> } } => {
|
|
@@ -298,26 +300,26 @@ export default Capability.makeModule(
|
|
|
298
300
|
return <ViewEditor view={view} />;
|
|
299
301
|
},
|
|
300
302
|
}),
|
|
301
|
-
|
|
303
|
+
Surface.create({
|
|
302
304
|
id: SPACE_RENAME_POPOVER,
|
|
303
305
|
role: 'popover',
|
|
304
306
|
filter: (data): data is { props: Space } => data.component === SPACE_RENAME_POPOVER && isSpace(data.props),
|
|
305
307
|
component: ({ data }) => <SpaceRenamePopover space={data.props} />,
|
|
306
308
|
}),
|
|
307
|
-
|
|
309
|
+
Surface.create({
|
|
308
310
|
id: OBJECT_RENAME_POPOVER,
|
|
309
311
|
role: 'popover',
|
|
310
312
|
filter: (data): data is { props: Obj.Unknown } =>
|
|
311
313
|
data.component === OBJECT_RENAME_POPOVER && Obj.isObject(data.props),
|
|
312
314
|
component: ({ data }) => <ObjectRenamePopover object={data.props} />,
|
|
313
315
|
}),
|
|
314
|
-
|
|
316
|
+
Surface.create({
|
|
315
317
|
id: `${meta.id}/menu-footer`,
|
|
316
318
|
role: 'menu-footer',
|
|
317
319
|
filter: (data): data is { subject: Obj.Unknown } => Obj.isObject(data.subject),
|
|
318
320
|
component: ({ data }) => <MenuFooter object={data.subject} />,
|
|
319
321
|
}),
|
|
320
|
-
|
|
322
|
+
Surface.create({
|
|
321
323
|
id: `${meta.id}/navtree-presence`,
|
|
322
324
|
role: 'navtree-item-end',
|
|
323
325
|
filter: (data): data is { id: string; subject: Obj.Unknown; open?: boolean } =>
|
|
@@ -328,7 +330,7 @@ export default Capability.makeModule(
|
|
|
328
330
|
},
|
|
329
331
|
}),
|
|
330
332
|
// TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
|
|
331
|
-
|
|
333
|
+
Surface.create({
|
|
332
334
|
id: `${meta.id}/navtree-presence-fallback`,
|
|
333
335
|
role: 'navtree-item-end',
|
|
334
336
|
position: 'fallback',
|
|
@@ -336,13 +338,13 @@ export default Capability.makeModule(
|
|
|
336
338
|
component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,
|
|
337
339
|
}),
|
|
338
340
|
// TODO(wittjosiah): Broken?
|
|
339
|
-
|
|
341
|
+
Surface.create({
|
|
340
342
|
id: `${meta.id}/navtree-sync-status`,
|
|
341
343
|
role: 'navtree-item-end',
|
|
342
344
|
filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
|
|
343
345
|
component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
|
|
344
346
|
}),
|
|
345
|
-
|
|
347
|
+
Surface.create({
|
|
346
348
|
id: `${meta.id}/navbar-presence`,
|
|
347
349
|
role: 'navbar-end',
|
|
348
350
|
position: 'hoist',
|
|
@@ -358,14 +360,14 @@ export default Capability.makeModule(
|
|
|
358
360
|
return object ? <SpacePresence object={object} /> : null;
|
|
359
361
|
},
|
|
360
362
|
}),
|
|
361
|
-
|
|
363
|
+
Surface.create({
|
|
362
364
|
id: `${meta.id}/collection-section`,
|
|
363
365
|
role: 'section',
|
|
364
366
|
filter: (data): data is { subject: Collection.Collection } =>
|
|
365
367
|
Obj.instanceOf(Collection.Collection, data.subject),
|
|
366
368
|
component: ({ data }) => <CollectionSection subject={data.subject} />,
|
|
367
369
|
}),
|
|
368
|
-
|
|
370
|
+
Surface.create({
|
|
369
371
|
id: `${meta.id}/status`,
|
|
370
372
|
role: 'status',
|
|
371
373
|
component: () => <SyncStatus />,
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import { Capability
|
|
7
|
+
import { Capability } from '@dxos/app-framework';
|
|
8
|
+
import { AppCapabilities } from '@dxos/app-toolkit';
|
|
8
9
|
import { createKvsStore } from '@dxos/effect';
|
|
9
10
|
|
|
10
11
|
import { meta } from '../../meta';
|
|
@@ -22,7 +23,7 @@ export default Capability.makeModule(() =>
|
|
|
22
23
|
|
|
23
24
|
return [
|
|
24
25
|
Capability.contributes(SpaceCapabilities.Settings, settingsAtom),
|
|
25
|
-
Capability.contributes(
|
|
26
|
+
Capability.contributes(AppCapabilities.Settings, {
|
|
26
27
|
prefix: meta.id,
|
|
27
28
|
schema: SpaceSettingsSchema,
|
|
28
29
|
atom: settingsAtom,
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
import * as Option from 'effect/Option';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
9
|
+
import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
|
|
9
10
|
import { SubscriptionList } from '@dxos/async';
|
|
10
11
|
import { Filter, Obj } from '@dxos/echo';
|
|
11
12
|
import { log } from '@dxos/log';
|
|
@@ -32,10 +33,10 @@ export default Capability.makeModule(
|
|
|
32
33
|
const subscriptions = new SubscriptionList();
|
|
33
34
|
const spaceSubscriptions = new SubscriptionList();
|
|
34
35
|
|
|
35
|
-
const { invoke, invokePromise } = yield* Capability.get(
|
|
36
|
-
const { graph } = yield* Capability.get(
|
|
37
|
-
const registry = yield* Capability.get(
|
|
38
|
-
const layoutAtom = yield* Capability.get(
|
|
36
|
+
const { invoke, invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
37
|
+
const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
|
|
38
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
39
|
+
const layoutAtom = yield* Capability.get(AppCapabilities.Layout);
|
|
39
40
|
const attention = yield* Capability.get(AttentionCapabilities.Attention);
|
|
40
41
|
const stateAtom = yield* Capability.get(SpaceCapabilities.State);
|
|
41
42
|
const ephemeralAtom = yield* Capability.get(SpaceCapabilities.EphemeralState);
|
|
@@ -47,7 +48,7 @@ export default Capability.makeModule(
|
|
|
47
48
|
// Check if deck state indicates we should switch to default space.
|
|
48
49
|
const layout = registry.get(layoutAtom);
|
|
49
50
|
if (layout.workspace === 'default') {
|
|
50
|
-
yield* invoke(
|
|
51
|
+
yield* invoke(LayoutOperation.SwitchWorkspace, { subject: defaultSpace.id });
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
// Initialize space sharing lock in default space.
|
|
@@ -279,7 +280,7 @@ export default Capability.makeModule(
|
|
|
279
280
|
log.catch(err);
|
|
280
281
|
}
|
|
281
282
|
|
|
282
|
-
return Capability.contributes(
|
|
283
|
+
return Capability.contributes(Capabilities.Null, null, () =>
|
|
283
284
|
Effect.sync(() => {
|
|
284
285
|
spaceSubscriptions.clear();
|
|
285
286
|
subscriptions.clear();
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { Atom } from '@effect-atom/atom-react';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
9
9
|
import { createKvsStore } from '@dxos/effect';
|
|
10
10
|
import { PublicKey } from '@dxos/keys';
|
|
11
11
|
import { ComplexMap } from '@dxos/util';
|
|
@@ -21,7 +21,7 @@ const defaultSpaceState: SpaceCapabilities.SpaceState = {
|
|
|
21
21
|
|
|
22
22
|
export default Capability.makeModule(
|
|
23
23
|
Effect.fnUntraced(function* () {
|
|
24
|
-
const registry = yield* Capability.get(
|
|
24
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
25
25
|
|
|
26
26
|
// Persisted state using KVS store.
|
|
27
27
|
const stateAtom = createKvsStore({
|
|
@@ -39,7 +39,7 @@ export default Capability.makeModule(
|
|
|
39
39
|
viewersByIdentity: new ComplexMap<PublicKey, Set<string>>(PublicKey.hash),
|
|
40
40
|
}).pipe(Atom.keepAlive);
|
|
41
41
|
|
|
42
|
-
const manager = yield* Capability.get(
|
|
42
|
+
const manager = yield* Capability.get(Capabilities.PluginManager);
|
|
43
43
|
// Update navigableCollections based on plugin state.
|
|
44
44
|
const updateNavigableCollections = () => {
|
|
45
45
|
const enabled = manager.getEnabled().includes('dxos.org/plugin/stack');
|
|
@@ -11,7 +11,8 @@ import * as Option from 'effect/Option';
|
|
|
11
11
|
import type * as Schema from 'effect/Schema';
|
|
12
12
|
|
|
13
13
|
// eslint-disable-next-line unused-imports/no-unused-imports
|
|
14
|
-
import {
|
|
14
|
+
import { type Capability, Plugin } from '@dxos/app-framework';
|
|
15
|
+
import { AppActivationEvents, AppCapabilities } from '@dxos/app-toolkit';
|
|
15
16
|
import { CommandConfig, Common, flushAndSync, print, spaceLayer } from '@dxos/cli-util';
|
|
16
17
|
import { SpaceProperties } from '@dxos/client/echo';
|
|
17
18
|
import { Database, Filter, Obj, Ref, Type } from '@dxos/echo';
|
|
@@ -42,19 +43,17 @@ export const add = Command.make(
|
|
|
42
43
|
const manager = yield* Plugin.Service;
|
|
43
44
|
const { db } = yield* Database.Service;
|
|
44
45
|
|
|
45
|
-
yield* manager.activate(
|
|
46
|
+
yield* manager.activate(AppActivationEvents.SetupMetadata);
|
|
46
47
|
|
|
47
48
|
const resolve = (typename: string) => {
|
|
48
49
|
const metadata = manager.capabilities
|
|
49
|
-
.getAll(
|
|
50
|
+
.getAll(AppCapabilities.Metadata)
|
|
50
51
|
.find(({ id }) => id === typename)?.metadata;
|
|
51
52
|
return metadata?.createObject ? (metadata as Metadata) : undefined;
|
|
52
53
|
};
|
|
53
54
|
|
|
54
|
-
const [properties] = yield* Database.
|
|
55
|
-
const collection = yield* Database.
|
|
56
|
-
properties[Collection.Collection.typename],
|
|
57
|
-
);
|
|
55
|
+
const [properties] = yield* Database.runQuery(Filter.type(SpaceProperties));
|
|
56
|
+
const collection = yield* Database.load<Collection.Collection>(properties[Collection.Collection.typename]);
|
|
58
57
|
|
|
59
58
|
const selectedTypename = yield* Option.match(typename, {
|
|
60
59
|
onNone: () => selectTypename(resolve),
|
|
@@ -92,7 +91,7 @@ export const add = Command.make(
|
|
|
92
91
|
* Prompts for typename selection if not provided.
|
|
93
92
|
*/
|
|
94
93
|
const selectTypename = Effect.fn(function* (resolve: (typename: string) => Metadata | undefined) {
|
|
95
|
-
const schemas = yield* Database.
|
|
94
|
+
const schemas = yield* Database.runSchemaQuery({
|
|
96
95
|
location: ['database', 'runtime'],
|
|
97
96
|
includeSystem: false,
|
|
98
97
|
}).pipe(
|
|
@@ -20,7 +20,7 @@ export const handler = ({ typename }: { typename: Option.Option<string> }) =>
|
|
|
20
20
|
onNone: () => Filter.everything(),
|
|
21
21
|
onSome: (typename) => Filter.typename(typename),
|
|
22
22
|
});
|
|
23
|
-
const objects = yield* Database.
|
|
23
|
+
const objects = yield* Database.runQuery(filter);
|
|
24
24
|
|
|
25
25
|
if (json) {
|
|
26
26
|
yield* Console.log(JSON.stringify(objects, null, 2));
|
|
@@ -34,9 +34,9 @@ export const remove = Command.make(
|
|
|
34
34
|
} else {
|
|
35
35
|
throw new Error('Must specify typename or id');
|
|
36
36
|
}
|
|
37
|
-
const objects = yield* Database.
|
|
37
|
+
const objects = yield* Database.runQuery(query);
|
|
38
38
|
for (const object of objects) {
|
|
39
|
-
yield* Database.
|
|
39
|
+
yield* Database.remove(object);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
if (json) {
|
|
@@ -24,7 +24,7 @@ export const stats = Command.make(
|
|
|
24
24
|
() =>
|
|
25
25
|
Effect.gen(function* () {
|
|
26
26
|
const { json } = yield* CommandConfig;
|
|
27
|
-
const objects = yield* Database.
|
|
27
|
+
const objects = yield* Database.runQuery(Query.select(Filter.everything()));
|
|
28
28
|
const stats = Function.pipe(
|
|
29
29
|
objects,
|
|
30
30
|
Array.groupBy((obj) => Obj.getTypename(obj) ?? '<empty>'),
|