@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
|
@@ -3,26 +3,27 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Schema } from 'effect';
|
|
6
|
-
import React, { useCallback } from 'react';
|
|
6
|
+
import React, { useCallback, useMemo } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
|
|
8
|
+
import {
|
|
9
|
+
Capabilities,
|
|
10
|
+
contributes,
|
|
11
|
+
createSurface,
|
|
12
|
+
Surface,
|
|
13
|
+
useCapabilities,
|
|
14
|
+
useCapability,
|
|
15
|
+
useLayout,
|
|
16
|
+
} from '@dxos/app-framework';
|
|
17
|
+
import { Obj, Type } from '@dxos/echo';
|
|
10
18
|
import { findAnnotation } from '@dxos/effect';
|
|
11
19
|
import { SettingsStore } from '@dxos/local-storage';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
parseId,
|
|
18
|
-
SpaceState,
|
|
19
|
-
useSpace,
|
|
20
|
-
type AnyLiveObject,
|
|
21
|
-
type Space,
|
|
22
|
-
} from '@dxos/react-client/echo';
|
|
23
|
-
import { Input } from '@dxos/react-ui';
|
|
24
|
-
import { type InputProps } from '@dxos/react-ui-form';
|
|
20
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
21
|
+
import { useClient } from '@dxos/react-client';
|
|
22
|
+
import { getSpace, isLiveObject, isSpace, parseId, SpaceState, useSpace, type Space } from '@dxos/react-client/echo';
|
|
23
|
+
import { Input, useTranslation } from '@dxos/react-ui';
|
|
24
|
+
import { type InputProps, SelectInput } from '@dxos/react-ui-form';
|
|
25
25
|
import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
26
|
+
import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
|
|
26
27
|
import { type JoinPanelProps } from '@dxos/shell/react';
|
|
27
28
|
|
|
28
29
|
import { SpaceCapabilities } from './capabilities';
|
|
@@ -52,12 +53,14 @@ import {
|
|
|
52
53
|
type CreateObjectDialogProps,
|
|
53
54
|
} from '../components';
|
|
54
55
|
import { SPACE_PLUGIN } from '../meta';
|
|
55
|
-
import {
|
|
56
|
+
import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
|
|
56
57
|
|
|
57
58
|
type ReactSurfaceOptions = {
|
|
58
59
|
createInvitationUrl: (invitationCode: string) => string;
|
|
59
60
|
};
|
|
60
61
|
|
|
62
|
+
const OMIT = [Type.getTypename(DataType.Collection), Type.getTypename(DataType.QueryCollection)];
|
|
63
|
+
|
|
61
64
|
export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
62
65
|
contributes(Capabilities.ReactSurface, [
|
|
63
66
|
createSurface({
|
|
@@ -68,7 +71,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
68
71
|
isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,
|
|
69
72
|
component: ({ data, role, ...rest }) => (
|
|
70
73
|
<Surface
|
|
71
|
-
data={{
|
|
74
|
+
data={{
|
|
75
|
+
id: data.subject.id,
|
|
76
|
+
subject: data.subject.properties[Type.getTypename(DataType.Collection)]?.target,
|
|
77
|
+
}}
|
|
72
78
|
role={role}
|
|
73
79
|
{...rest}
|
|
74
80
|
/>
|
|
@@ -78,7 +84,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
78
84
|
id: `${SPACE_PLUGIN}/collection-fallback`,
|
|
79
85
|
role: 'article',
|
|
80
86
|
position: 'fallback',
|
|
81
|
-
filter: (data): data is { subject:
|
|
87
|
+
filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
|
|
82
88
|
component: ({ data }) => <CollectionMain collection={data.subject} />,
|
|
83
89
|
}),
|
|
84
90
|
createSurface({
|
|
@@ -91,8 +97,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
91
97
|
createSurface({
|
|
92
98
|
id: `${SPACE_PLUGIN}/companion/object-settings`,
|
|
93
99
|
role: 'article',
|
|
94
|
-
filter: (data): data is { companionTo:
|
|
95
|
-
isEchoObject(data.companionTo) && data.subject === 'settings',
|
|
100
|
+
filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
|
|
96
101
|
component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
|
|
97
102
|
}),
|
|
98
103
|
createSurface({
|
|
@@ -197,6 +202,78 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
197
202
|
);
|
|
198
203
|
},
|
|
199
204
|
}),
|
|
205
|
+
createSurface({
|
|
206
|
+
id: `${SPACE_PLUGIN}/typename-form-input`,
|
|
207
|
+
role: 'form-input',
|
|
208
|
+
filter: (
|
|
209
|
+
data,
|
|
210
|
+
): data is { prop: string; schema: Schema.Schema<any>; target: Space | DataType.Collection | undefined } => {
|
|
211
|
+
if (data.prop !== 'typename') {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypenameAnnotationId);
|
|
216
|
+
return !!annotation;
|
|
217
|
+
},
|
|
218
|
+
component: ({ data: { schema, target }, ...inputProps }) => {
|
|
219
|
+
const { t } = useTranslation();
|
|
220
|
+
const client = useClient();
|
|
221
|
+
const props = inputProps as any as InputProps;
|
|
222
|
+
const space = isSpace(target) ? target : getSpace(target);
|
|
223
|
+
if (!space) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
|
|
228
|
+
|
|
229
|
+
const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
230
|
+
const whitelistedTypenames = useMemo(
|
|
231
|
+
() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),
|
|
232
|
+
[schemaWhitelists],
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
236
|
+
const objectFormTypenames = useMemo(
|
|
237
|
+
() =>
|
|
238
|
+
new Set(
|
|
239
|
+
objectForms
|
|
240
|
+
.map((form) => Type.getTypename(form.objectSchema))
|
|
241
|
+
// TODO(wittjosiah): Remove.
|
|
242
|
+
.filter((typename) => !OMIT.includes(typename)),
|
|
243
|
+
),
|
|
244
|
+
[objectForms],
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
|
|
248
|
+
const limitedStatic =
|
|
249
|
+
annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
|
|
250
|
+
const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
|
|
251
|
+
return annotation.includes('static') || limitedStatic || objectForm;
|
|
252
|
+
});
|
|
253
|
+
const dynamic = space?.db.schemaRegistry.query().runSync();
|
|
254
|
+
const typenames = Array.from(
|
|
255
|
+
new Set<string>([
|
|
256
|
+
...(annotation.includes('limited-static') ||
|
|
257
|
+
annotation.includes('static') ||
|
|
258
|
+
annotation.includes('object-form')
|
|
259
|
+
? fixed.map((schema) => Type.getTypename(schema))
|
|
260
|
+
: []),
|
|
261
|
+
...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
|
|
262
|
+
]),
|
|
263
|
+
).sort();
|
|
264
|
+
|
|
265
|
+
const options = useMemo(
|
|
266
|
+
() =>
|
|
267
|
+
typenames.map((typename) => ({
|
|
268
|
+
value: typename,
|
|
269
|
+
label: t('typename label', { ns: typename, defaultValue: typename }),
|
|
270
|
+
})),
|
|
271
|
+
[t, typenames],
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
return <SelectInput {...props} options={options} />;
|
|
275
|
+
},
|
|
276
|
+
}),
|
|
200
277
|
createSurface({
|
|
201
278
|
id: POPOVER_RENAME_SPACE,
|
|
202
279
|
role: 'popover',
|
|
@@ -206,21 +283,21 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
206
283
|
createSurface({
|
|
207
284
|
id: POPOVER_RENAME_OBJECT,
|
|
208
285
|
role: 'popover',
|
|
209
|
-
filter: (data): data is { props:
|
|
286
|
+
filter: (data): data is { props: Obj.Any } =>
|
|
210
287
|
data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
|
|
211
288
|
component: ({ data }) => <PopoverRenameObject object={data.props} />,
|
|
212
289
|
}),
|
|
213
290
|
createSurface({
|
|
214
291
|
id: `${SPACE_PLUGIN}/menu-footer`,
|
|
215
292
|
role: 'menu-footer',
|
|
216
|
-
filter: (data): data is { subject:
|
|
293
|
+
filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
|
|
217
294
|
component: ({ data }) => <MenuFooter object={data.subject} />,
|
|
218
295
|
}),
|
|
219
296
|
createSurface({
|
|
220
297
|
id: `${SPACE_PLUGIN}/navtree-presence`,
|
|
221
298
|
role: 'navtree-item-end',
|
|
222
|
-
filter: (data): data is { id: string; subject:
|
|
223
|
-
typeof data.id === 'string' &&
|
|
299
|
+
filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
|
|
300
|
+
typeof data.id === 'string' && Obj.isObject(data.subject),
|
|
224
301
|
component: ({ data }) => {
|
|
225
302
|
// TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
|
|
226
303
|
const state = useCapability(SpaceCapabilities.MutableState);
|
|
@@ -246,13 +323,12 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
246
323
|
id: `${SPACE_PLUGIN}/navbar-presence`,
|
|
247
324
|
role: 'navbar-end',
|
|
248
325
|
position: 'hoist',
|
|
249
|
-
filter: (data): data is { subject: Space |
|
|
250
|
-
isSpace(data.subject) || isEchoObject(data.subject),
|
|
326
|
+
filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
|
|
251
327
|
component: ({ data }) => {
|
|
252
328
|
const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
|
|
253
329
|
const object = isSpace(data.subject)
|
|
254
330
|
? data.subject.state.get() === SpaceState.SPACE_READY
|
|
255
|
-
? (space?.properties[
|
|
331
|
+
? (space?.properties[Type.getTypename(DataType.Collection)]?.target as DataType.Collection)
|
|
256
332
|
: undefined
|
|
257
333
|
: data.subject;
|
|
258
334
|
|
|
@@ -262,7 +338,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
262
338
|
createSurface({
|
|
263
339
|
id: `${SPACE_PLUGIN}/collection-section`,
|
|
264
340
|
role: 'section',
|
|
265
|
-
filter: (data): data is { subject:
|
|
341
|
+
filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
|
|
266
342
|
component: ({ data }) => <CollectionSection collection={data.subject} />,
|
|
267
343
|
}),
|
|
268
344
|
createSurface({
|
|
@@ -7,7 +7,8 @@ import { Schema, SchemaAST } from 'effect';
|
|
|
7
7
|
import { createTool, ToolResult } from '@dxos/ai';
|
|
8
8
|
import { Capabilities, contributes, type PromiseIntentDispatcher } from '@dxos/app-framework';
|
|
9
9
|
import { type Space } from '@dxos/client/echo';
|
|
10
|
-
import {
|
|
10
|
+
import { Type } from '@dxos/echo';
|
|
11
|
+
import { FormatEnum, FormatEnums, SelectOptionSchema } from '@dxos/echo-schema';
|
|
11
12
|
import { invariant } from '@dxos/invariant';
|
|
12
13
|
import { hues } from '@dxos/react-ui-theme';
|
|
13
14
|
import { getSchemaFromPropertyDefinitions } from '@dxos/schema';
|
|
@@ -32,7 +33,7 @@ export const TypeNameSchema = Schema.String.pipe(
|
|
|
32
33
|
);
|
|
33
34
|
|
|
34
35
|
const formatDescription = `The format of the property. Additional information:
|
|
35
|
-
${FormatEnum.GeoPoint}: ${JSON.stringify(toJsonSchema(GeoPoint))}
|
|
36
|
+
${FormatEnum.GeoPoint}: ${JSON.stringify(Type.toJsonSchema(Type.Format.GeoPoint))}
|
|
36
37
|
This tuple is GeoJSON. You must specify \`${FormatEnum.GeoPoint}\` as [Longitude, Latitude]`;
|
|
37
38
|
|
|
38
39
|
// TODO(ZaymonFC): All properties are default optional, but maybe we should allow for required properties.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { Capabilities, contributes } from '@dxos/app-framework';
|
|
6
6
|
import { live } from '@dxos/live-object';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { meta } from '../meta';
|
|
9
9
|
import { type SpaceSettingsProps, SpaceSettingsSchema } from '../types';
|
|
10
10
|
|
|
11
11
|
export default () => {
|
|
@@ -13,5 +13,9 @@ export default () => {
|
|
|
13
13
|
showHidden: false,
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
return contributes(Capabilities.Settings, {
|
|
16
|
+
return contributes(Capabilities.Settings, {
|
|
17
|
+
prefix: meta.id,
|
|
18
|
+
schema: SpaceSettingsSchema,
|
|
19
|
+
value: settings,
|
|
20
|
+
});
|
|
17
21
|
};
|
|
@@ -4,18 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
import { Option } from 'effect';
|
|
6
6
|
|
|
7
|
-
import { contributes, createIntent,
|
|
7
|
+
import { contributes, createIntent, Capabilities, LayoutAction, type PluginContext } from '@dxos/app-framework';
|
|
8
8
|
import { SubscriptionList } from '@dxos/async';
|
|
9
|
-
import {
|
|
9
|
+
import { Filter, Obj, Type } from '@dxos/echo';
|
|
10
10
|
import { scheduledEffect } from '@dxos/echo-signals/core';
|
|
11
|
-
import { live } from '@dxos/live-object';
|
|
12
11
|
import { log } from '@dxos/log';
|
|
13
12
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
14
13
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
15
14
|
import { DeckCapabilities } from '@dxos/plugin-deck';
|
|
16
15
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
17
16
|
import { PublicKey } from '@dxos/react-client';
|
|
18
|
-
import {
|
|
17
|
+
import { FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
|
|
19
18
|
import { ComplexMap, reduceGroupBy } from '@dxos/util';
|
|
20
19
|
|
|
21
20
|
import { SpaceCapabilities } from './capabilities';
|
|
@@ -32,7 +31,7 @@ export default async (context: PluginContext) => {
|
|
|
32
31
|
const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
33
32
|
const { graph } = context.getCapability(Capabilities.AppGraph);
|
|
34
33
|
const layout = context.getCapability(Capabilities.Layout);
|
|
35
|
-
const deck = context.
|
|
34
|
+
const deck = context.getCapabilities(DeckCapabilities.DeckState)[0];
|
|
36
35
|
const attention = context.getCapability(AttentionCapabilities.Attention);
|
|
37
36
|
const state = context.getCapability(SpaceCapabilities.MutableState);
|
|
38
37
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
@@ -40,7 +39,7 @@ export default async (context: PluginContext) => {
|
|
|
40
39
|
const defaultSpace = client.spaces.default;
|
|
41
40
|
await defaultSpace.waitUntilReady();
|
|
42
41
|
|
|
43
|
-
if (deck
|
|
42
|
+
if (deck?.activeDeck === 'default') {
|
|
44
43
|
await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: defaultSpace.id }));
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -51,11 +50,11 @@ export default async (context: PluginContext) => {
|
|
|
51
50
|
|
|
52
51
|
const {
|
|
53
52
|
objects: [spacesOrder],
|
|
54
|
-
} = await defaultSpace.db.query(Filter.type(Expando, { key: SHARED })).run();
|
|
53
|
+
} = await defaultSpace.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
|
|
55
54
|
if (!spacesOrder) {
|
|
56
55
|
// TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.
|
|
57
56
|
// Instead, we store order as an array of space ids.
|
|
58
|
-
defaultSpace.db.add(
|
|
57
|
+
defaultSpace.db.add(Obj.make(Type.Expando, { key: SHARED, order: [] }));
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
// Await missing objects.
|
|
@@ -6,11 +6,11 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
|
|
9
|
+
import { type DataType } from '@dxos/schema';
|
|
9
10
|
|
|
10
11
|
import { SPACE_PLUGIN } from '../meta';
|
|
11
|
-
import type { CollectionType } from '../types';
|
|
12
12
|
|
|
13
|
-
export const CollectionMain = ({ collection }: { collection:
|
|
13
|
+
export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
|
|
14
14
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
15
15
|
|
|
16
16
|
return (
|
|
@@ -21,7 +21,7 @@ export const CollectionMain = ({ collection }: { collection: CollectionType }) =
|
|
|
21
21
|
>
|
|
22
22
|
<p
|
|
23
23
|
role='alert'
|
|
24
|
-
className={mx(descriptionMessage, 'rounded-
|
|
24
|
+
className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}
|
|
25
25
|
>
|
|
26
26
|
{collection.name ?? t('unnamed collection label')}
|
|
27
27
|
</p>
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
+
import { type DataType } from '@dxos/schema';
|
|
8
9
|
|
|
9
10
|
import { SPACE_PLUGIN } from '../meta';
|
|
10
|
-
import type { CollectionType } from '../types';
|
|
11
11
|
|
|
12
|
-
export const CollectionSection = ({ collection }: { collection:
|
|
12
|
+
export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
|
|
13
13
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
14
14
|
// TODO(wittjosiah): Better placeholder.
|
|
15
15
|
return (
|
|
@@ -7,15 +7,16 @@ import '@dxos-theme';
|
|
|
7
7
|
import { type Meta, type StoryObj } from '@storybook/react';
|
|
8
8
|
import React, { useEffect } from 'react';
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { Filter, Obj, Type } from '@dxos/echo';
|
|
11
|
+
import { useQuery, useSpace } from '@dxos/react-client/echo';
|
|
11
12
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
12
13
|
import { Dialog } from '@dxos/react-ui';
|
|
14
|
+
import { DataType } from '@dxos/schema';
|
|
13
15
|
import { osTranslations } from '@dxos/shell/react';
|
|
14
16
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
15
17
|
|
|
16
18
|
import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
|
|
17
19
|
import translations from '../../translations';
|
|
18
|
-
import { CollectionType } from '../../types';
|
|
19
20
|
|
|
20
21
|
const Story = (args: CreateObjectDialogProps) => {
|
|
21
22
|
return (
|
|
@@ -33,7 +34,7 @@ const meta: Meta<typeof CreateObjectDialog> = {
|
|
|
33
34
|
component: CreateObjectDialog,
|
|
34
35
|
render: Story,
|
|
35
36
|
decorators: [
|
|
36
|
-
withClientProvider({ createIdentity: true, createSpace: true, types: [
|
|
37
|
+
withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
|
|
37
38
|
withTheme,
|
|
38
39
|
withLayout(),
|
|
39
40
|
],
|
|
@@ -48,7 +49,7 @@ export default meta;
|
|
|
48
49
|
export const Default: StoryObj<typeof CreateObjectDialog> = {};
|
|
49
50
|
|
|
50
51
|
export const Typename: StoryObj<typeof CreateObjectDialog> = {
|
|
51
|
-
args: { typename:
|
|
52
|
+
args: { typename: Type.getTypename(DataType.Collection) },
|
|
52
53
|
};
|
|
53
54
|
|
|
54
55
|
export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
|
|
@@ -66,11 +67,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
|
|
|
66
67
|
export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
|
|
67
68
|
render: (args) => {
|
|
68
69
|
const space = useSpace();
|
|
69
|
-
const [collection] = useQuery(space, Filter.type(
|
|
70
|
+
const [collection] = useQuery(space, Filter.type(DataType.Collection));
|
|
70
71
|
|
|
71
72
|
useEffect(() => {
|
|
72
73
|
if (space) {
|
|
73
|
-
space.db.add(
|
|
74
|
+
space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
|
|
74
75
|
}
|
|
75
76
|
}, [space]);
|
|
76
77
|
|
|
@@ -3,36 +3,40 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { pipe } from 'effect';
|
|
6
|
-
import React, { useCallback, useRef } from 'react';
|
|
6
|
+
import React, { useCallback, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
9
|
Capabilities,
|
|
10
|
+
LayoutAction,
|
|
10
11
|
chain,
|
|
11
12
|
createIntent,
|
|
12
|
-
LayoutAction,
|
|
13
13
|
useCapabilities,
|
|
14
14
|
useIntentDispatcher,
|
|
15
15
|
usePluginManager,
|
|
16
16
|
} from '@dxos/app-framework';
|
|
17
|
+
import { Query, Type, type Obj } from '@dxos/echo';
|
|
17
18
|
import { invariant } from '@dxos/invariant';
|
|
18
19
|
import { useClient } from '@dxos/react-client';
|
|
19
|
-
import { getSpace, isLiveObject, isSpace, type
|
|
20
|
+
import { getSpace, isLiveObject, isSpace, type Space, useQuery, useSpaces } from '@dxos/react-client/echo';
|
|
20
21
|
import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
|
|
22
|
+
import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
|
|
23
|
+
import { DataType } from '@dxos/schema';
|
|
24
|
+
import { isNonNullable } from '@dxos/util';
|
|
21
25
|
|
|
22
26
|
import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
|
|
23
27
|
import { SpaceCapabilities } from '../../capabilities';
|
|
24
28
|
import { SPACE_PLUGIN } from '../../meta';
|
|
25
|
-
import {
|
|
29
|
+
import { SpaceAction } from '../../types';
|
|
26
30
|
|
|
27
31
|
export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
|
|
28
32
|
|
|
29
33
|
export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
|
|
30
|
-
shouldNavigate?: (object:
|
|
34
|
+
shouldNavigate?: (object: Obj.Any) => boolean;
|
|
31
35
|
};
|
|
32
36
|
|
|
33
37
|
export const CreateObjectDialog = ({
|
|
34
|
-
target,
|
|
35
|
-
typename,
|
|
38
|
+
target: initialTarget,
|
|
39
|
+
typename: initialTypename,
|
|
36
40
|
name,
|
|
37
41
|
shouldNavigate: _shouldNavigate,
|
|
38
42
|
}: CreateObjectDialogProps) => {
|
|
@@ -43,23 +47,20 @@ export const CreateObjectDialog = ({
|
|
|
43
47
|
const spaces = useSpaces();
|
|
44
48
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
45
49
|
const forms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
50
|
+
const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
|
|
51
|
+
const [typename, setTypename] = useState<string | undefined>(initialTypename);
|
|
52
|
+
const space = isSpace(target) ? target : getSpace(target);
|
|
53
|
+
const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
|
|
54
|
+
const hiddenTypenames = queryCollections.map((collection) => collection.query.typename).filter(isNonNullable);
|
|
46
55
|
|
|
47
|
-
const resolve = useCallback(
|
|
48
|
-
(typename
|
|
56
|
+
const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
|
|
57
|
+
(typename) =>
|
|
49
58
|
manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
|
|
50
59
|
[manager],
|
|
51
60
|
);
|
|
52
61
|
|
|
53
|
-
const handleCreateObject = useCallback(
|
|
54
|
-
async ({
|
|
55
|
-
form,
|
|
56
|
-
target,
|
|
57
|
-
data = {},
|
|
58
|
-
}: {
|
|
59
|
-
form: ObjectForm;
|
|
60
|
-
target: CreateObjectPanelProps['target'];
|
|
61
|
-
data?: Record<string, any>;
|
|
62
|
-
}) => {
|
|
62
|
+
const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
|
|
63
|
+
async ({ form, data = {} }) => {
|
|
63
64
|
if (!target) {
|
|
64
65
|
// TODO(wittjosiah): UI feedback.
|
|
65
66
|
return;
|
|
@@ -73,7 +74,9 @@ export const CreateObjectDialog = ({
|
|
|
73
74
|
const result = await dispatch(form.getIntent(data, { space }));
|
|
74
75
|
const object = result.data?.object;
|
|
75
76
|
if (isLiveObject(object)) {
|
|
76
|
-
|
|
77
|
+
// TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
|
|
78
|
+
const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
|
|
79
|
+
const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden });
|
|
77
80
|
const shouldNavigate = _shouldNavigate ?? (() => true);
|
|
78
81
|
if (shouldNavigate(object)) {
|
|
79
82
|
await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
|
|
@@ -82,15 +85,17 @@ export const CreateObjectDialog = ({
|
|
|
82
85
|
}
|
|
83
86
|
}
|
|
84
87
|
},
|
|
85
|
-
[dispatch, resolve],
|
|
88
|
+
[dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
|
|
86
89
|
);
|
|
87
90
|
|
|
88
91
|
return (
|
|
89
92
|
// TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
|
|
90
93
|
// Consider factoring it out to the tabs package.
|
|
91
|
-
<Dialog.Content classNames=
|
|
92
|
-
<div role='none' className=
|
|
93
|
-
<Dialog.Title>
|
|
94
|
+
<Dialog.Content classNames={cardDialogContent}>
|
|
95
|
+
<div role='none' className={cardDialogHeader}>
|
|
96
|
+
<Dialog.Title>
|
|
97
|
+
{t('create object dialog title', { object: t('typename label', { ns: typename, defaultValue: 'Item' }) })}
|
|
98
|
+
</Dialog.Title>
|
|
94
99
|
<Dialog.Close asChild>
|
|
95
100
|
<Button ref={closeRef} density='fine' variant='ghost' autoFocus>
|
|
96
101
|
<Icon icon='ph--x--regular' size={4} />
|
|
@@ -99,7 +104,6 @@ export const CreateObjectDialog = ({
|
|
|
99
104
|
</div>
|
|
100
105
|
|
|
101
106
|
<CreateObjectPanel
|
|
102
|
-
classNames='p-4'
|
|
103
107
|
forms={forms}
|
|
104
108
|
spaces={spaces}
|
|
105
109
|
target={target}
|
|
@@ -107,6 +111,8 @@ export const CreateObjectDialog = ({
|
|
|
107
111
|
name={name}
|
|
108
112
|
defaultSpaceId={client.spaces.default.id}
|
|
109
113
|
resolve={resolve}
|
|
114
|
+
onTargetChange={setTarget}
|
|
115
|
+
onTypenameChange={setTypename}
|
|
110
116
|
onCreateObject={handleCreateObject}
|
|
111
117
|
/>
|
|
112
118
|
</Dialog.Content>
|