@dxos/plugin-space 0.8.3-main.672df60 → 0.8.3-staging.0fa589b
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/{app-graph-builder-DCWUULKX.mjs → app-graph-builder-M2RH72VL.mjs} +49 -14
- package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-MLU7XI2P.mjs → app-graph-serializer-F7ISRRBV.mjs} +13 -13
- package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VEBKN45O.mjs → chunk-4ZKSFDXM.mjs} +29 -17
- package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3LN4LJN6.mjs → chunk-BXNL6SDI.mjs} +2 -1
- package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZQEIXWBK.mjs → chunk-NFUKCRGE.mjs} +157 -141
- package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +7 -0
- package/dist/lib/browser/chunk-TW7O2EPP.mjs +284 -0
- package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +7 -0
- package/dist/lib/browser/{chunk-N5QMRLKI.mjs → chunk-V24VASAJ.mjs} +112 -43
- package/dist/lib/browser/chunk-V24VASAJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-YMCZR6EZ.mjs +18 -0
- package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-O63SIYOF.mjs → identity-created-PI7TKANR.mjs} +5 -10
- package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +61 -51
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-PG473BRV.mjs → intent-resolver-RWU6ZE4H.mjs} +66 -45
- package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-FRDC4UXB.mjs → react-root-QIKHSNT2.mjs} +5 -5
- package/dist/lib/browser/{react-surface-QOP7T66K.mjs → react-surface-W56UD53I.mjs} +79 -19
- package/dist/lib/browser/react-surface-W56UD53I.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-JMN74RNK.mjs → schema-defs-WREJNMIC.mjs} +2 -2
- package/dist/lib/browser/{schema-tools-JIEMHUXV.mjs → schema-tools-ILTVSSS3.mjs} +7 -6
- package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +7 -0
- package/dist/lib/browser/{settings-2IN2WLUK.mjs → settings-K54STC5A.mjs} +4 -4
- package/dist/lib/browser/settings-K54STC5A.mjs.map +7 -0
- package/dist/lib/browser/{spaces-ready-L4QAGTDE.mjs → spaces-ready-3PDRDHPC.mjs} +12 -13
- package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +7 -0
- package/dist/lib/browser/{state-6HOSHLIN.mjs → state-HRZ4VRXU.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -3
- package/dist/lib/node/{app-graph-builder-WC445X77.cjs → app-graph-builder-6LK5HLLE.cjs} +79 -43
- package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-UPQOQVMJ.cjs → app-graph-serializer-HKHBNHA3.cjs} +24 -23
- package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +7 -0
- package/dist/lib/node/chunk-3X4EA4XL.cjs +37 -0
- package/dist/lib/node/chunk-3X4EA4XL.cjs.map +7 -0
- package/dist/lib/node/{chunk-DXL5TDFP.cjs → chunk-DOC5XEZ4.cjs} +32 -18
- package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +7 -0
- package/dist/lib/node/{chunk-USFHJG7C.cjs → chunk-NCHF433F.cjs} +207 -190
- package/dist/lib/node/chunk-NCHF433F.cjs.map +7 -0
- package/dist/lib/node/{chunk-7GQGM4ZF.cjs → chunk-NL5Y4EDX.cjs} +5 -4
- package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +7 -0
- package/dist/lib/node/chunk-ULJZPATP.cjs +312 -0
- package/dist/lib/node/chunk-ULJZPATP.cjs.map +7 -0
- package/dist/lib/node/{chunk-COQYISES.cjs → chunk-XHWVT7LW.cjs} +137 -67
- package/dist/lib/node/chunk-XHWVT7LW.cjs.map +7 -0
- package/dist/lib/node/{identity-created-UXEAUGC7.cjs → identity-created-FF4WZ2WY.cjs} +8 -10
- package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +7 -0
- package/dist/lib/node/index.cjs +130 -119
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/{intent-resolver-VPVZSSIL.cjs → intent-resolver-AV4CMM3Z.cjs} +99 -79
- package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-JXLRINF3.cjs → react-root-RQUU3A45.cjs} +10 -10
- package/dist/lib/node/{react-surface-ZIYDBL3C.cjs → react-surface-AZFJLE72.cjs} +119 -58
- package/dist/lib/node/react-surface-AZFJLE72.cjs.map +7 -0
- package/dist/lib/node/{schema-defs-XLFBG3XK.cjs → schema-defs-OB2X2HBH.cjs} +6 -6
- package/dist/lib/node/{schema-tools-ZG6Z2QRC.cjs → schema-tools-IYREN4IH.cjs} +9 -8
- package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +7 -0
- package/dist/lib/node/{settings-FOH7EB5C.cjs → settings-P2EQ7VKQ.cjs} +7 -7
- package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +7 -0
- package/dist/lib/node/{spaces-ready-VXQYCBII.cjs → spaces-ready-DXPOHYV7.cjs} +26 -27
- package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +7 -0
- package/dist/lib/node/{state-ZT3MTZXB.cjs → state-M35DK75Z.cjs} +6 -6
- package/dist/lib/node/types/index.cjs +11 -13
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/{app-graph-builder-E7CCGPQJ.mjs → app-graph-builder-BCHVZ4OM.mjs} +49 -14
- package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-UCMSLPIA.mjs → app-graph-serializer-TXRGGNP2.mjs} +13 -13
- package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3CP67AYY.mjs +19 -0
- package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4X4Y63ND.mjs → chunk-BSLREHIX.mjs} +2 -1
- package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D4QMPPS7.mjs +285 -0
- package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XAZNQ3QN.mjs → chunk-HO7AIKQS.mjs} +112 -43
- package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OSPEGYX3.mjs → chunk-JBQKU4K5.mjs} +29 -17
- package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BE2BLE7K.mjs → chunk-LA6AVVH6.mjs} +157 -141
- package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-ZECO4NH3.mjs → identity-created-35CTAQWI.mjs} +5 -9
- package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +61 -51
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-SK5LP5ZK.mjs → intent-resolver-JO6L2VXC.mjs} +66 -45
- package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs → react-root-YFGL3B4J.mjs} +5 -5
- package/dist/lib/node-esm/{react-surface-XNUWZCSH.mjs → react-surface-CVAPDLEZ.mjs} +79 -19
- package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs → schema-defs-4MEJETVX.mjs} +2 -2
- package/dist/lib/node-esm/{schema-tools-2Y4D42PD.mjs → schema-tools-SRLCRZ3B.mjs} +7 -6
- package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-Q4XDFSYD.mjs → settings-TD76LTQS.mjs} +4 -4
- package/dist/lib/node-esm/settings-TD76LTQS.mjs.map +7 -0
- package/dist/lib/node-esm/{spaces-ready-JHKPD4PH.mjs → spaces-ready-FJMGPAVV.mjs} +12 -13
- package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +7 -0
- package/dist/lib/node-esm/{state-4ATRHSKA.mjs → state-XQNDCN37.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -3
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +8 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/CollectionMain.d.ts +2 -2
- package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts +2 -2
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +8 -7
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/components/MenuFooter.d.ts +2 -2
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts +2 -2
- 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.d.ts +2 -2
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +1 -3
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +275 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +0 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +81 -12
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +16 -11
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +45 -45
- package/src/{SpacePlugin.tsx → SpacePlugin.ts} +30 -10
- package/src/capabilities/app-graph-builder.ts +74 -20
- package/src/capabilities/app-graph-serializer.ts +11 -8
- package/src/capabilities/capabilities.ts +6 -1
- package/src/capabilities/identity-created.ts +5 -4
- package/src/capabilities/intent-resolver.ts +60 -36
- package/src/capabilities/react-surface.tsx +105 -29
- package/src/capabilities/schema-tools.ts +3 -2
- package/src/capabilities/settings.ts +6 -2
- package/src/capabilities/spaces-ready.ts +7 -8
- package/src/components/CollectionMain.tsx +3 -3
- package/src/components/CollectionSection.tsx +2 -2
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +7 -6
- package/src/components/CreateDialog/CreateObjectDialog.tsx +31 -25
- package/src/components/CreateDialog/CreateObjectPanel.tsx +45 -52
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
- package/src/components/MembersContainer.tsx +4 -2
- package/src/components/MenuFooter.tsx +3 -2
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +12 -4
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +7 -7
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -4
- package/src/components/SchemaContainer.tsx +3 -3
- package/src/components/SpacePluginSettings.tsx +24 -19
- package/src/components/SpacePresence.tsx +22 -15
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +2 -1
- package/src/events.ts +1 -5
- package/src/translations.ts +30 -14
- package/src/types/index.ts +0 -1
- package/src/types/types.ts +32 -11
- package/src/util.tsx +136 -57
- package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-MLU7XI2P.mjs.map +0 -7
- package/dist/lib/browser/chunk-3LN4LJN6.mjs.map +0 -7
- package/dist/lib/browser/chunk-N5QMRLKI.mjs.map +0 -7
- package/dist/lib/browser/chunk-VEBKN45O.mjs.map +0 -7
- package/dist/lib/browser/chunk-W46VVHFM.mjs +0 -288
- package/dist/lib/browser/chunk-W46VVHFM.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZQEIXWBK.mjs.map +0 -7
- package/dist/lib/browser/identity-created-O63SIYOF.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-PG473BRV.mjs.map +0 -7
- package/dist/lib/browser/react-surface-QOP7T66K.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-JIEMHUXV.mjs.map +0 -7
- package/dist/lib/browser/settings-2IN2WLUK.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-L4QAGTDE.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-WC445X77.cjs.map +0 -7
- package/dist/lib/node/app-graph-serializer-UPQOQVMJ.cjs.map +0 -7
- package/dist/lib/node/chunk-7GQGM4ZF.cjs.map +0 -7
- package/dist/lib/node/chunk-COQYISES.cjs.map +0 -7
- package/dist/lib/node/chunk-DXL5TDFP.cjs.map +0 -7
- package/dist/lib/node/chunk-FXHI7JNY.cjs +0 -315
- package/dist/lib/node/chunk-FXHI7JNY.cjs.map +0 -7
- package/dist/lib/node/chunk-USFHJG7C.cjs.map +0 -7
- package/dist/lib/node/identity-created-UXEAUGC7.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-VPVZSSIL.cjs.map +0 -7
- package/dist/lib/node/react-surface-ZIYDBL3C.cjs.map +0 -7
- package/dist/lib/node/schema-tools-ZG6Z2QRC.cjs.map +0 -7
- package/dist/lib/node/settings-FOH7EB5C.cjs.map +0 -7
- package/dist/lib/node/spaces-ready-VXQYCBII.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-UCMSLPIA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4X4Y63ND.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BE2BLE7K.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FTELJGEG.mjs +0 -289
- package/dist/lib/node-esm/chunk-FTELJGEG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OSPEGYX3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XAZNQ3QN.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-ZECO4NH3.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-SK5LP5ZK.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-XNUWZCSH.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-2Y4D42PD.mjs.map +0 -7
- package/dist/lib/node-esm/settings-Q4XDFSYD.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-JHKPD4PH.mjs.map +0 -7
- package/dist/types/src/types/collection.d.ts +0 -15
- package/dist/types/src/types/collection.d.ts.map +0 -1
- package/src/types/collection.ts +0 -18
- /package/dist/lib/browser/{react-root-FRDC4UXB.mjs.map → react-root-QIKHSNT2.mjs.map} +0 -0
- /package/dist/lib/browser/{schema-defs-JMN74RNK.mjs.map → schema-defs-WREJNMIC.mjs.map} +0 -0
- /package/dist/lib/browser/{state-6HOSHLIN.mjs.map → state-HRZ4VRXU.mjs.map} +0 -0
- /package/dist/lib/node/{react-root-JXLRINF3.cjs.map → react-root-RQUU3A45.cjs.map} +0 -0
- /package/dist/lib/node/{schema-defs-XLFBG3XK.cjs.map → schema-defs-OB2X2HBH.cjs.map} +0 -0
- /package/dist/lib/node/{state-ZT3MTZXB.cjs.map → state-M35DK75Z.cjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs.map → react-root-YFGL3B4J.mjs.map} +0 -0
- /package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs.map → schema-defs-4MEJETVX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-4ATRHSKA.mjs.map → state-XQNDCN37.mjs.map} +0 -0
|
@@ -6,26 +6,19 @@ import { Rx } from '@effect-rx/rx-react';
|
|
|
6
6
|
import { Array, Option, pipe } from 'effect';
|
|
7
7
|
|
|
8
8
|
import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
Filter,
|
|
12
|
-
getSpace,
|
|
13
|
-
isEchoObject,
|
|
14
|
-
SpaceState,
|
|
15
|
-
type Space,
|
|
16
|
-
isSpace,
|
|
17
|
-
type QueryResult,
|
|
18
|
-
} from '@dxos/client/echo';
|
|
9
|
+
import { getSpace, SpaceState, type Space, isSpace, type QueryResult } from '@dxos/client/echo';
|
|
10
|
+
import { Filter, Obj, Query, Type } from '@dxos/echo';
|
|
19
11
|
import { log } from '@dxos/log';
|
|
20
12
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
21
13
|
import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
|
|
22
14
|
import { createExtension, rxFromObservable, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';
|
|
15
|
+
import { DataType } from '@dxos/schema';
|
|
23
16
|
import { isNonNullable } from '@dxos/util';
|
|
24
17
|
|
|
25
18
|
import { SpaceCapabilities } from './capabilities';
|
|
26
19
|
import { getActiveSpace } from '../hooks';
|
|
27
20
|
import { SPACE_PLUGIN } from '../meta';
|
|
28
|
-
import {
|
|
21
|
+
import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
|
|
29
22
|
import {
|
|
30
23
|
constructObjectActions,
|
|
31
24
|
constructSpaceActions,
|
|
@@ -37,6 +30,7 @@ import {
|
|
|
37
30
|
} from '../util';
|
|
38
31
|
|
|
39
32
|
export default (context: PluginContext) => {
|
|
33
|
+
// TODO(wittjosiah): Make reactive.
|
|
40
34
|
const resolve = (typename: string) =>
|
|
41
35
|
context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
42
36
|
|
|
@@ -67,7 +61,7 @@ export default (context: PluginContext) => {
|
|
|
67
61
|
|
|
68
62
|
const {
|
|
69
63
|
objects: [spacesOrder],
|
|
70
|
-
} = await client.spaces.default.db.query(Filter.type(Expando, { key: SHARED })).run();
|
|
64
|
+
} = await client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
|
|
71
65
|
if (spacesOrder) {
|
|
72
66
|
spacesOrder.order = nextOrder.map(({ id }) => id);
|
|
73
67
|
} else {
|
|
@@ -175,7 +169,7 @@ export default (context: PluginContext) => {
|
|
|
175
169
|
createExtension({
|
|
176
170
|
id: SPACES,
|
|
177
171
|
connector: (node) => {
|
|
178
|
-
let query: QueryResult<Expando> | undefined;
|
|
172
|
+
let query: QueryResult<Type.Expando> | undefined;
|
|
179
173
|
return Rx.make((get) =>
|
|
180
174
|
pipe(
|
|
181
175
|
get(node),
|
|
@@ -200,7 +194,7 @@ export default (context: PluginContext) => {
|
|
|
200
194
|
// TODO(wittjosiah): During client reset, accessing default space throws.
|
|
201
195
|
try {
|
|
202
196
|
if (!query) {
|
|
203
|
-
query = client.spaces.default.db.query(Filter.type(Expando, { key: SHARED }));
|
|
197
|
+
query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
|
|
204
198
|
}
|
|
205
199
|
const [spacesOrder] = get(rxFromQuery(query));
|
|
206
200
|
return get(
|
|
@@ -321,14 +315,16 @@ export default (context: PluginContext) => {
|
|
|
321
315
|
),
|
|
322
316
|
Option.map((space) => {
|
|
323
317
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
324
|
-
|
|
325
318
|
const spaceState = get(rxFromObservable(space.state));
|
|
326
319
|
if (spaceState !== SpaceState.SPACE_READY) {
|
|
327
320
|
return [];
|
|
328
321
|
}
|
|
329
322
|
|
|
330
323
|
const collection = get(
|
|
331
|
-
rxFromSignal(
|
|
324
|
+
rxFromSignal(
|
|
325
|
+
() =>
|
|
326
|
+
space.properties[Type.getTypename(DataType.Collection)]?.target as DataType.Collection | undefined,
|
|
327
|
+
),
|
|
332
328
|
);
|
|
333
329
|
if (!collection) {
|
|
334
330
|
return [];
|
|
@@ -342,8 +338,8 @@ export default (context: PluginContext) => {
|
|
|
342
338
|
Array.filter(isNonNullable),
|
|
343
339
|
Array.map((object) =>
|
|
344
340
|
createObjectNode({
|
|
345
|
-
object,
|
|
346
341
|
space,
|
|
342
|
+
object,
|
|
347
343
|
resolve,
|
|
348
344
|
navigable: state.navigableCollections,
|
|
349
345
|
}),
|
|
@@ -365,7 +361,9 @@ export default (context: PluginContext) => {
|
|
|
365
361
|
Rx.make((get) =>
|
|
366
362
|
pipe(
|
|
367
363
|
get(node),
|
|
368
|
-
Option.flatMap((node) =>
|
|
364
|
+
Option.flatMap((node) =>
|
|
365
|
+
Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
|
|
366
|
+
),
|
|
369
367
|
Option.map((collection) => {
|
|
370
368
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
371
369
|
const space = getSpace(collection);
|
|
@@ -427,6 +425,60 @@ export default (context: PluginContext) => {
|
|
|
427
425
|
// },
|
|
428
426
|
}),
|
|
429
427
|
|
|
428
|
+
// Create nodes for objects in a query collection.
|
|
429
|
+
createExtension({
|
|
430
|
+
id: `${SPACE_PLUGIN}/query-collection-objects`,
|
|
431
|
+
connector: (node) => {
|
|
432
|
+
let query: QueryResult<Type.Expando> | undefined;
|
|
433
|
+
return Rx.make((get) =>
|
|
434
|
+
pipe(
|
|
435
|
+
get(node),
|
|
436
|
+
Option.flatMap((node) =>
|
|
437
|
+
Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
|
|
438
|
+
),
|
|
439
|
+
Option.flatMap((collection) => {
|
|
440
|
+
const space = getSpace(collection);
|
|
441
|
+
return collection.query.typename && space
|
|
442
|
+
? Option.some({ typename: collection.query.typename, space })
|
|
443
|
+
: Option.none();
|
|
444
|
+
}),
|
|
445
|
+
Option.map(({ typename, space }) => {
|
|
446
|
+
const state = context.getCapability(SpaceCapabilities.State);
|
|
447
|
+
if (!query) {
|
|
448
|
+
query = space.db.query(
|
|
449
|
+
Query.without(
|
|
450
|
+
Query.select(Filter.typename(typename)),
|
|
451
|
+
// TODO(wittjosiah): This query is broader than it should be.
|
|
452
|
+
// It will return all objects in the collection, not just the ones of the given type.
|
|
453
|
+
// However this works fine for now because this query is only used for exclusions.
|
|
454
|
+
Query.select(Filter.typename(typename))
|
|
455
|
+
.referencedBy(DataType.Collection, 'objects')
|
|
456
|
+
.reference('objects'),
|
|
457
|
+
),
|
|
458
|
+
);
|
|
459
|
+
}
|
|
460
|
+
return get(rxFromQuery(query))
|
|
461
|
+
.map((object) =>
|
|
462
|
+
get(
|
|
463
|
+
rxFromSignal(() =>
|
|
464
|
+
createObjectNode({
|
|
465
|
+
object,
|
|
466
|
+
space,
|
|
467
|
+
resolve,
|
|
468
|
+
droppable: false, // Cannot rearrange query collections.
|
|
469
|
+
navigable: state.navigableCollections,
|
|
470
|
+
}),
|
|
471
|
+
),
|
|
472
|
+
),
|
|
473
|
+
)
|
|
474
|
+
.filter(isNonNullable);
|
|
475
|
+
}),
|
|
476
|
+
Option.getOrElse(() => []),
|
|
477
|
+
),
|
|
478
|
+
);
|
|
479
|
+
},
|
|
480
|
+
}),
|
|
481
|
+
|
|
430
482
|
// Create collection actions and action groups.
|
|
431
483
|
createExtension({
|
|
432
484
|
id: `${SPACE_PLUGIN}/object-actions`,
|
|
@@ -434,11 +486,12 @@ export default (context: PluginContext) => {
|
|
|
434
486
|
Rx.make((get) =>
|
|
435
487
|
pipe(
|
|
436
488
|
get(node),
|
|
437
|
-
Option.flatMap((node) => (
|
|
489
|
+
Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),
|
|
438
490
|
Option.flatMap((object) => {
|
|
439
491
|
const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
|
|
440
492
|
const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
|
|
441
493
|
const [state] = get(context.capabilities(SpaceCapabilities.State));
|
|
494
|
+
const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
|
|
442
495
|
|
|
443
496
|
if (!dispatcher || !appGraph || !state) {
|
|
444
497
|
return Option.none();
|
|
@@ -447,6 +500,7 @@ export default (context: PluginContext) => {
|
|
|
447
500
|
object,
|
|
448
501
|
graph: appGraph.graph,
|
|
449
502
|
dispatch: dispatcher.dispatchPromise,
|
|
503
|
+
objectForms,
|
|
450
504
|
navigable: get(rxFromSignal(() => state.navigableCollections)),
|
|
451
505
|
});
|
|
452
506
|
}
|
|
@@ -464,7 +518,7 @@ export default (context: PluginContext) => {
|
|
|
464
518
|
Rx.make((get) =>
|
|
465
519
|
pipe(
|
|
466
520
|
get(node),
|
|
467
|
-
Option.flatMap((node) => (
|
|
521
|
+
Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
|
|
468
522
|
Option.map((node) => [
|
|
469
523
|
{
|
|
470
524
|
id: [node.id, 'settings'].join(ATTENDABLE_PATH_SEPARATOR),
|
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
|
|
6
6
|
import { isSpace } from '@dxos/client/echo';
|
|
7
|
-
import {
|
|
7
|
+
import { Obj, Type } from '@dxos/echo';
|
|
8
|
+
import { DataType } from '@dxos/schema';
|
|
8
9
|
|
|
9
10
|
import { SPACE_PLUGIN } from '../meta';
|
|
10
11
|
import translations from '../translations';
|
|
11
|
-
import {
|
|
12
|
+
import { SPACE_TYPE, SpaceAction } from '../types';
|
|
12
13
|
import { SPACES } from '../util';
|
|
13
14
|
|
|
15
|
+
const COLLECTION_TYPE = Type.getTypename(DataType.Collection);
|
|
16
|
+
|
|
14
17
|
// https://stackoverflow.com/a/19016910
|
|
15
18
|
const DIRECTORY_TYPE = 'text/directory';
|
|
16
19
|
|
|
@@ -43,18 +46,18 @@ export default (context: PluginContext) =>
|
|
|
43
46
|
},
|
|
44
47
|
},
|
|
45
48
|
{
|
|
46
|
-
inputType:
|
|
49
|
+
inputType: COLLECTION_TYPE,
|
|
47
50
|
outputType: DIRECTORY_TYPE,
|
|
48
51
|
serialize: (node) => ({
|
|
49
|
-
name: node.data.name ?? translations[0]['en-US'][
|
|
50
|
-
data: node.data.name ?? translations[0]['en-US'][
|
|
52
|
+
name: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
|
|
53
|
+
data: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
|
|
51
54
|
type: DIRECTORY_TYPE,
|
|
52
55
|
}),
|
|
53
56
|
deserialize: async (data, ancestors) => {
|
|
54
57
|
const space = ancestors.find(isSpace);
|
|
55
58
|
const collection =
|
|
56
|
-
ancestors.findLast((ancestor) => ancestor
|
|
57
|
-
space?.properties[
|
|
59
|
+
ancestors.findLast((ancestor) => Obj.instanceOf(DataType.Collection, ancestor)) ??
|
|
60
|
+
space?.properties[COLLECTION_TYPE]?.target;
|
|
58
61
|
if (!space || !collection) {
|
|
59
62
|
return;
|
|
60
63
|
}
|
|
@@ -63,7 +66,7 @@ export default (context: PluginContext) =>
|
|
|
63
66
|
const result = await dispatch(
|
|
64
67
|
createIntent(SpaceAction.AddObject, {
|
|
65
68
|
target: collection,
|
|
66
|
-
object:
|
|
69
|
+
object: Obj.make(DataType.Collection, { name: data.name, objects: [] }),
|
|
67
70
|
}),
|
|
68
71
|
);
|
|
69
72
|
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { defineCapability, type Label } from '@dxos/app-framework';
|
|
6
|
-
import { type
|
|
6
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
7
|
+
import { type DataType } from '@dxos/schema';
|
|
8
|
+
import { type Position, type DeepReadonly, type MaybePromise } from '@dxos/util';
|
|
7
9
|
|
|
8
10
|
import { SPACE_PLUGIN } from '../meta';
|
|
9
11
|
import { type ObjectForm, type PluginState } from '../types';
|
|
@@ -15,5 +17,8 @@ export namespace SpaceCapabilities {
|
|
|
15
17
|
export type SettingsSection = { id: string; label: Label; position?: Position };
|
|
16
18
|
export const SettingsSection = defineCapability<SettingsSection>(`${SPACE_PLUGIN}/capability/settings-section`);
|
|
17
19
|
|
|
20
|
+
export type OnSpaceCreated = (params: { space: Space; rootCollection: DataType.Collection }) => MaybePromise<void>;
|
|
21
|
+
export const OnSpaceCreated = defineCapability<OnSpaceCreated>(`${SPACE_PLUGIN}/capability/on-space-created`);
|
|
22
|
+
|
|
18
23
|
export const ObjectForm = defineCapability<ObjectForm<any>>(`${SPACE_PLUGIN}/capability/object-form`);
|
|
19
24
|
}
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { contributes, type PluginContext, Capabilities } from '@dxos/app-framework';
|
|
6
|
-
import {
|
|
6
|
+
import { Obj, Ref, Type } from '@dxos/echo';
|
|
7
7
|
import { Migrations } from '@dxos/migrations';
|
|
8
8
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
9
|
-
|
|
10
|
-
import { CollectionType } from '../types';
|
|
9
|
+
import { DataType } from '@dxos/schema';
|
|
11
10
|
|
|
12
11
|
export default async (context: PluginContext) => {
|
|
13
12
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
@@ -17,7 +16,9 @@ export default async (context: PluginContext) => {
|
|
|
17
16
|
await defaultSpace.waitUntilReady();
|
|
18
17
|
|
|
19
18
|
// Create root collection structure.
|
|
20
|
-
defaultSpace.properties[
|
|
19
|
+
defaultSpace.properties[Type.getTypename(DataType.Collection)] = Ref.make(
|
|
20
|
+
Obj.make(DataType.Collection, { objects: [] }),
|
|
21
|
+
);
|
|
21
22
|
if (Migrations.versionProperty) {
|
|
22
23
|
defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
|
|
23
24
|
}
|
|
@@ -6,36 +6,36 @@ import { Effect } from 'effect';
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
Capabilities,
|
|
9
|
+
LayoutAction,
|
|
10
|
+
type PluginContext,
|
|
9
11
|
contributes,
|
|
10
12
|
createIntent,
|
|
11
13
|
createResolver,
|
|
12
|
-
LayoutAction,
|
|
13
|
-
type PluginContext,
|
|
14
14
|
} from '@dxos/app-framework';
|
|
15
|
-
import { Relation } from '@dxos/echo';
|
|
16
|
-
import { type Expando, getTypename, type HasId } from '@dxos/echo-schema';
|
|
15
|
+
import { Obj, Ref, Relation, Type } from '@dxos/echo';
|
|
17
16
|
import { invariant } from '@dxos/invariant';
|
|
18
|
-
import { live, makeRef, type Live } from '@dxos/live-object';
|
|
19
17
|
import { Migrations } from '@dxos/migrations';
|
|
20
18
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
21
19
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
22
20
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
23
|
-
import { isSpace, getSpace, SpaceState, fullyQualifiedId
|
|
21
|
+
import { isSpace, getSpace, SpaceState, fullyQualifiedId } from '@dxos/react-client/echo';
|
|
24
22
|
import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
|
|
25
23
|
import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
|
|
24
|
+
import { DataType } from '@dxos/schema';
|
|
26
25
|
|
|
27
26
|
import { SpaceCapabilities } from './capabilities';
|
|
28
27
|
import {
|
|
28
|
+
CREATE_OBJECT_DIALOG,
|
|
29
29
|
CREATE_SPACE_DIALOG,
|
|
30
30
|
JOIN_DIALOG,
|
|
31
|
-
|
|
31
|
+
POPOVER_RENAME_OBJECT,
|
|
32
32
|
POPOVER_RENAME_SPACE,
|
|
33
|
-
CREATE_OBJECT_DIALOG,
|
|
34
33
|
type CreateObjectDialogProps,
|
|
35
|
-
|
|
34
|
+
type JoinDialogProps,
|
|
36
35
|
} from '../components';
|
|
36
|
+
import { SpaceEvents } from '../events';
|
|
37
37
|
import { SPACE_PLUGIN } from '../meta';
|
|
38
|
-
import { CollectionAction,
|
|
38
|
+
import { CollectionAction, SpaceAction } from '../types';
|
|
39
39
|
import { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';
|
|
40
40
|
|
|
41
41
|
// TODO(wittjosiah): Remove.
|
|
@@ -75,13 +75,19 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
75
75
|
await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
|
|
76
76
|
}
|
|
77
77
|
await space.waitUntilReady();
|
|
78
|
-
const collection =
|
|
79
|
-
space.properties[
|
|
78
|
+
const collection = Obj.make(DataType.Collection, { objects: [] });
|
|
79
|
+
space.properties[Type.getTypename(DataType.Collection)] = Ref.make(collection);
|
|
80
80
|
|
|
81
81
|
if (Migrations.versionProperty) {
|
|
82
82
|
space.properties[Migrations.versionProperty] = Migrations.targetVersion;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
await context.activatePromise(SpaceEvents.SpaceCreated);
|
|
86
|
+
const onSpaceCreatedCallbacks = context.getCapabilities(SpaceCapabilities.OnSpaceCreated);
|
|
87
|
+
await Promise.all(
|
|
88
|
+
onSpaceCreatedCallbacks.map((onSpaceCreated) => onSpaceCreated({ space, rootCollection: collection })),
|
|
89
|
+
);
|
|
90
|
+
|
|
85
91
|
return {
|
|
86
92
|
data: {
|
|
87
93
|
id: space.id,
|
|
@@ -305,7 +311,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
305
311
|
}),
|
|
306
312
|
createResolver({
|
|
307
313
|
intent: SpaceAction.OpenCreateObject,
|
|
308
|
-
resolve: ({ target, navigable = true }) => {
|
|
314
|
+
resolve: ({ target, typename, navigable = true }) => {
|
|
309
315
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
310
316
|
|
|
311
317
|
return {
|
|
@@ -317,8 +323,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
317
323
|
blockAlign: 'start',
|
|
318
324
|
props: {
|
|
319
325
|
target,
|
|
326
|
+
typename,
|
|
320
327
|
shouldNavigate: navigable
|
|
321
|
-
? (object:
|
|
328
|
+
? (object: Obj.Any) => {
|
|
329
|
+
const isCollection = Obj.instanceOf(DataType.Collection, object);
|
|
330
|
+
const isQueryCollection = Obj.instanceOf(DataType.QueryCollection, object);
|
|
331
|
+
return (!isCollection && !isQueryCollection) || state.navigableCollections;
|
|
332
|
+
}
|
|
322
333
|
: () => false,
|
|
323
334
|
} satisfies Partial<CreateObjectDialogProps>,
|
|
324
335
|
},
|
|
@@ -365,18 +376,18 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
365
376
|
};
|
|
366
377
|
}
|
|
367
378
|
|
|
368
|
-
if (target
|
|
369
|
-
target.objects.push(
|
|
379
|
+
if (Obj.instanceOf(DataType.Collection, target)) {
|
|
380
|
+
target.objects.push(Ref.make(object));
|
|
370
381
|
} else if (isSpace(target) && hidden) {
|
|
371
382
|
space.db.add(object);
|
|
372
383
|
} else if (isSpace(target)) {
|
|
373
|
-
const collection = space.properties[
|
|
374
|
-
if (collection
|
|
375
|
-
collection.objects.push(
|
|
384
|
+
const collection = space.properties[Type.getTypename(DataType.Collection)]?.target;
|
|
385
|
+
if (Obj.instanceOf(DataType.Collection, collection)) {
|
|
386
|
+
collection.objects.push(Ref.make(object));
|
|
376
387
|
} else {
|
|
377
388
|
// TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.
|
|
378
|
-
const collection =
|
|
379
|
-
space.properties[
|
|
389
|
+
const collection = Obj.make(DataType.Collection, { objects: [Ref.make(object)] });
|
|
390
|
+
space.properties[Type.getTypename(DataType.Collection)] = Ref.make(collection);
|
|
380
391
|
}
|
|
381
392
|
}
|
|
382
393
|
|
|
@@ -384,7 +395,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
384
395
|
data: {
|
|
385
396
|
id: fullyQualifiedId(object),
|
|
386
397
|
subject: [fullyQualifiedId(object)],
|
|
387
|
-
object
|
|
398
|
+
object,
|
|
388
399
|
},
|
|
389
400
|
intents: [
|
|
390
401
|
...(observability
|
|
@@ -394,7 +405,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
394
405
|
properties: {
|
|
395
406
|
spaceId: space.id,
|
|
396
407
|
objectId: object.id,
|
|
397
|
-
typename: getTypename(object),
|
|
408
|
+
typename: Obj.getTypename(object),
|
|
398
409
|
},
|
|
399
410
|
}),
|
|
400
411
|
]
|
|
@@ -406,8 +417,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
406
417
|
createResolver({
|
|
407
418
|
intent: SpaceAction.AddRelation,
|
|
408
419
|
resolve: ({ space, schema, source, target, fields }) => {
|
|
409
|
-
const relation =
|
|
410
|
-
|
|
420
|
+
const relation = space.db.add(
|
|
421
|
+
Relation.make(schema, {
|
|
422
|
+
[Relation.Source]: source,
|
|
423
|
+
[Relation.Target]: target,
|
|
424
|
+
...fields,
|
|
425
|
+
}),
|
|
426
|
+
);
|
|
427
|
+
|
|
411
428
|
return {
|
|
412
429
|
data: {
|
|
413
430
|
relation,
|
|
@@ -422,18 +439,19 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
422
439
|
|
|
423
440
|
// All objects must be a member of the same space.
|
|
424
441
|
const space = getSpace(objects[0]);
|
|
425
|
-
invariant(space && objects.every((obj) =>
|
|
442
|
+
invariant(space && objects.every((obj) => Obj.isObject(obj) && getSpace(obj) === space));
|
|
426
443
|
const openObjectIds = new Set<string>(layout.active);
|
|
427
444
|
|
|
428
445
|
if (!undo) {
|
|
429
|
-
const parentCollection:
|
|
446
|
+
const parentCollection: DataType.Collection =
|
|
447
|
+
target ?? space.properties[Type.getTypename(DataType.Collection)]?.target;
|
|
430
448
|
const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));
|
|
431
449
|
|
|
432
450
|
const deletionData = {
|
|
433
451
|
objects,
|
|
434
452
|
parentCollection,
|
|
435
453
|
indices: objects.map((obj) =>
|
|
436
|
-
parentCollection
|
|
454
|
+
Obj.instanceOf(DataType.Collection, parentCollection)
|
|
437
455
|
? parentCollection.objects.findIndex((object) => object.target === obj)
|
|
438
456
|
: -1,
|
|
439
457
|
),
|
|
@@ -444,7 +462,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
444
462
|
.filter((id) => openObjectIds.has(id)),
|
|
445
463
|
} satisfies SpaceAction.DeletionData;
|
|
446
464
|
|
|
447
|
-
if (deletionData.parentCollection
|
|
465
|
+
if (Obj.instanceOf(DataType.Collection, deletionData.parentCollection)) {
|
|
448
466
|
[...deletionData.indices]
|
|
449
467
|
.sort((a, b) => b - a)
|
|
450
468
|
.forEach((index: number) => {
|
|
@@ -459,7 +477,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
459
477
|
});
|
|
460
478
|
objects.forEach((obj) => space.db.remove(obj));
|
|
461
479
|
|
|
462
|
-
const undoMessageKey = objects.some((obj) => obj
|
|
480
|
+
const undoMessageKey = objects.some((obj) => Obj.instanceOf(DataType.Collection, obj))
|
|
463
481
|
? 'collection deleted label'
|
|
464
482
|
: objects.length > 1
|
|
465
483
|
? 'objects deleted label'
|
|
@@ -485,20 +503,20 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
485
503
|
} else {
|
|
486
504
|
if (
|
|
487
505
|
deletionData?.objects?.length &&
|
|
488
|
-
deletionData.objects.every(
|
|
489
|
-
deletionData.parentCollection
|
|
506
|
+
deletionData.objects.every(Obj.isObject) &&
|
|
507
|
+
Obj.instanceOf(DataType.Collection, deletionData.parentCollection)
|
|
490
508
|
) {
|
|
491
509
|
// Restore the object to the space.
|
|
492
|
-
const restoredObjects = deletionData.objects.map((obj: Expando) => space.db.add(obj));
|
|
510
|
+
const restoredObjects = deletionData.objects.map((obj: Type.Expando) => space.db.add(obj));
|
|
493
511
|
|
|
494
512
|
// Restore nested objects to the space.
|
|
495
|
-
deletionData.nestedObjectsList.flat().forEach((obj: Expando) => {
|
|
513
|
+
deletionData.nestedObjectsList.flat().forEach((obj: Type.Expando) => {
|
|
496
514
|
space.db.add(obj);
|
|
497
515
|
});
|
|
498
516
|
|
|
499
517
|
deletionData.indices.forEach((index: number, i: number) => {
|
|
500
518
|
if (index !== -1) {
|
|
501
|
-
deletionData.parentCollection.objects.splice(index, 0,
|
|
519
|
+
deletionData.parentCollection.objects.splice(index, 0, Ref.make(restoredObjects[i] as Type.Expando));
|
|
502
520
|
}
|
|
503
521
|
});
|
|
504
522
|
|
|
@@ -554,7 +572,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
554
572
|
createResolver({
|
|
555
573
|
intent: CollectionAction.Create,
|
|
556
574
|
resolve: async ({ name }) => ({
|
|
557
|
-
data: { object:
|
|
575
|
+
data: { object: Obj.make(DataType.Collection, { name, objects: [] }) },
|
|
576
|
+
}),
|
|
577
|
+
}),
|
|
578
|
+
createResolver({
|
|
579
|
+
intent: CollectionAction.CreateQueryCollection,
|
|
580
|
+
resolve: async ({ name, typename }) => ({
|
|
581
|
+
data: { object: Obj.make(DataType.QueryCollection, { name, query: { typename } }) },
|
|
558
582
|
}),
|
|
559
583
|
}),
|
|
560
584
|
]);
|