@dxos/plugin-space 0.7.5-main.9d2a38b → 0.7.5-main.e94eead
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-F6XSETHX.mjs → app-graph-builder-MGK5HWPZ.mjs} +26 -103
- package/dist/lib/browser/app-graph-builder-MGK5HWPZ.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-FYJE23GN.mjs → app-graph-serializer-FOWFLYGU.mjs} +5 -5
- package/dist/lib/browser/{chunk-IZ7QKQ2E.mjs → chunk-23RVI5FZ.mjs} +27 -11
- package/dist/lib/browser/chunk-23RVI5FZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-UH5P4UL3.mjs → chunk-NU7WDVGN.mjs} +4 -2
- package/dist/lib/browser/chunk-NU7WDVGN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SOXNANA6.mjs → chunk-PQXZCNAU.mjs} +3 -2
- package/dist/lib/browser/{chunk-SOXNANA6.mjs.map → chunk-PQXZCNAU.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-XXD33C4E.mjs → chunk-S6B7627U.mjs} +486 -349
- package/dist/lib/browser/chunk-S6B7627U.mjs.map +7 -0
- package/dist/lib/browser/{chunk-T36CIHPG.mjs → chunk-UDWHTKB5.mjs} +7 -4
- package/dist/lib/browser/chunk-UDWHTKB5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SSJ772GK.mjs → chunk-ULA2UQJ4.mjs} +18 -5
- package/dist/lib/browser/chunk-ULA2UQJ4.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-4Q4PFIC5.mjs → identity-created-FYGS6TBH.mjs} +3 -3
- package/dist/lib/browser/index.mjs +59 -24
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-QVR4MSJV.mjs +555 -0
- package/dist/lib/browser/intent-resolver-QVR4MSJV.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-BDOPFJGJ.mjs → react-root-IP2ZB245.mjs} +6 -6
- package/dist/lib/browser/{react-surface-EGOL2JBL.mjs → react-surface-BT3EHB6V.mjs} +36 -49
- package/dist/lib/browser/react-surface-BT3EHB6V.mjs.map +7 -0
- package/dist/lib/browser/schema-5W3DSY2E.mjs +24 -0
- package/dist/lib/browser/schema-5W3DSY2E.mjs.map +7 -0
- package/dist/lib/browser/{settings-WF67QZSD.mjs → settings-PHPCXX33.mjs} +3 -3
- package/dist/lib/browser/{spaces-ready-WVU7US3C.mjs → spaces-ready-K47RR7N2.mjs} +31 -32
- package/dist/lib/browser/spaces-ready-K47RR7N2.mjs.map +7 -0
- package/dist/lib/browser/{state-MS4KYJWI.mjs → state-INJ63O57.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +6 -4
- package/dist/lib/node/{app-graph-builder-GKLVZ4PM.cjs → app-graph-builder-ZIUBXRPA.cjs} +59 -136
- package/dist/lib/node/app-graph-builder-ZIUBXRPA.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-RMTU5YSC.cjs → app-graph-serializer-VQOGHKXL.cjs} +21 -21
- package/dist/lib/node/{chunk-AJRP7AD6.cjs → chunk-N2FS7PRA.cjs} +552 -414
- package/dist/lib/node/chunk-N2FS7PRA.cjs.map +7 -0
- package/dist/lib/node/{chunk-5D4RWKTV.cjs → chunk-OVGKWJOC.cjs} +78 -62
- package/dist/lib/node/chunk-OVGKWJOC.cjs.map +7 -0
- package/dist/lib/node/{chunk-UENH2YBM.cjs → chunk-U6DYXAR3.cjs} +12 -9
- package/dist/lib/node/chunk-U6DYXAR3.cjs.map +7 -0
- package/dist/lib/node/{chunk-YCBBGTFD.cjs → chunk-WAJKBO3J.cjs} +25 -11
- package/dist/lib/node/chunk-WAJKBO3J.cjs.map +7 -0
- package/dist/lib/node/{chunk-AO4EW2RX.cjs → chunk-WZR6OAN3.cjs} +6 -5
- package/dist/lib/node/{chunk-AO4EW2RX.cjs.map → chunk-WZR6OAN3.cjs.map} +3 -3
- package/dist/lib/node/{chunk-56NGXG2A.cjs → chunk-YZKNRFHU.cjs} +10 -8
- package/dist/lib/node/chunk-YZKNRFHU.cjs.map +7 -0
- package/dist/lib/node/{identity-created-QQWX7WX3.cjs → identity-created-AXI64BLE.cjs} +7 -7
- package/dist/lib/node/index.cjs +132 -98
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/intent-resolver-MLENGECT.cjs +553 -0
- package/dist/lib/node/intent-resolver-MLENGECT.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-ZTR2J2I3.cjs → react-root-3OX5Z5CX.cjs} +12 -12
- package/dist/lib/node/{react-surface-75KRPQYT.cjs → react-surface-5NYCMXSM.cjs} +77 -89
- package/dist/lib/node/react-surface-5NYCMXSM.cjs.map +7 -0
- package/dist/lib/node/schema-YN7WVFRX.cjs +40 -0
- package/dist/lib/node/schema-YN7WVFRX.cjs.map +7 -0
- package/dist/lib/node/{settings-KOVSPA3S.cjs → settings-5QYFWNH7.cjs} +8 -8
- package/dist/lib/node/{spaces-ready-ILVGUHJH.cjs → spaces-ready-FQNAKR7G.cjs} +39 -40
- package/dist/lib/node/spaces-ready-FQNAKR7G.cjs.map +7 -0
- package/dist/lib/node/{state-4UIOUKLJ.cjs → state-57UE3DYE.cjs} +8 -8
- package/dist/lib/node/types/index.cjs +19 -17
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/{app-graph-builder-NEHQ5Z63.mjs → app-graph-builder-TERVM2SL.mjs} +26 -103
- package/dist/lib/node-esm/app-graph-builder-TERVM2SL.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-UWWS5OVC.mjs → app-graph-serializer-GZRSWHEN.mjs} +5 -5
- package/dist/lib/node-esm/{chunk-E5DWIQ3N.mjs → chunk-2TQ2AJEZ.mjs} +7 -4
- package/dist/lib/node-esm/chunk-2TQ2AJEZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-375RB3CZ.mjs → chunk-6RSVVEPS.mjs} +4 -2
- package/dist/lib/node-esm/chunk-6RSVVEPS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GVOPDPS2.mjs → chunk-DIKRH2IK.mjs} +486 -349
- package/dist/lib/node-esm/chunk-DIKRH2IK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7FUVU45N.mjs → chunk-ICCM4YRJ.mjs} +3 -2
- package/dist/lib/node-esm/{chunk-7FUVU45N.mjs.map → chunk-ICCM4YRJ.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-5QMAPAZD.mjs → chunk-PGH5L7MV.mjs} +27 -11
- package/dist/lib/node-esm/chunk-PGH5L7MV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HTBGWQEU.mjs → chunk-TRNZQEEN.mjs} +18 -5
- package/dist/lib/node-esm/chunk-TRNZQEEN.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-HMNY2MPB.mjs → identity-created-3CGEXNPO.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +59 -24
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-BLW4RM6X.mjs +556 -0
- package/dist/lib/node-esm/intent-resolver-BLW4RM6X.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-OUPJA4RY.mjs → react-root-7XXGP56B.mjs} +6 -6
- package/dist/lib/node-esm/{react-surface-7EVWCKIP.mjs → react-surface-R2ECJSFB.mjs} +36 -49
- package/dist/lib/node-esm/react-surface-R2ECJSFB.mjs.map +7 -0
- package/dist/lib/node-esm/schema-LOR2EVGY.mjs +25 -0
- package/dist/lib/node-esm/schema-LOR2EVGY.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-EDK6WI3V.mjs → settings-H6MXTEQM.mjs} +3 -3
- package/dist/lib/node-esm/{spaces-ready-CH3W7OGN.mjs → spaces-ready-HKAQG5SA.mjs} +31 -32
- package/dist/lib/node-esm/spaces-ready-HKAQG5SA.mjs.map +7 -0
- package/dist/lib/node-esm/{state-BMISGQ2O.mjs → state-VYA6OFHD.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +6 -4
- package/dist/types/src/SpacePlugin.d.ts +5 -1
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +110 -110
- package/dist/types/src/capabilities/app-graph-builder.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/index.d.ts +123 -121
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +2 -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.d.ts +4 -0
- package/dist/types/src/capabilities/schema.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts +1 -2
- package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts +1 -2
- package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject.d.ts +1 -2
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/BaseObjectSettings.d.ts +1 -2
- package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/CollectionMain.d.ts +1 -2
- package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts +1 -2
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -4
- 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 -9
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -2
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +1 -2
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MenuFooter.d.ts +1 -2
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/PersistenceStatus.d.ts +1 -2
- package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
- package/dist/types/src/components/PopoverAddSpace.d.ts +3 -0
- package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -0
- package/dist/types/src/components/PopoverRenameObject.d.ts +1 -2
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -2
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/ShareSpaceButton.d.ts +2 -3
- package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts +1 -2
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts +4 -5
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +2 -3
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +1 -2
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +3 -5
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +1 -2
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/Space.d.ts +2 -3
- package/dist/types/src/components/SyncStatus/Space.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +3 -4
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +4 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/collection.d.ts +2 -2
- package/dist/types/src/types/thread.d.ts +34 -34
- package/dist/types/src/types/types.d.ts +37 -12
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +3 -2
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +41 -38
- package/src/SpacePlugin.tsx +44 -15
- package/src/capabilities/app-graph-builder.ts +19 -92
- package/src/capabilities/capabilities.ts +7 -2
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +428 -312
- package/src/capabilities/react-surface.tsx +32 -56
- package/src/capabilities/schema.ts +27 -0
- package/src/capabilities/spaces-ready.ts +20 -21
- package/src/components/AwaitingObject.tsx +5 -5
- package/src/components/BaseObjectSettings.tsx +7 -0
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +1 -3
- package/src/components/CreateDialog/CreateObjectDialog.tsx +42 -34
- package/src/components/CreateDialog/CreateObjectPanel.tsx +126 -129
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +18 -9
- package/src/components/JoinDialog.tsx +27 -19
- package/src/components/PopoverAddSpace.tsx +46 -0
- package/src/components/SpacePluginSettings.tsx +3 -3
- package/src/components/SpacePresence.stories.tsx +2 -2
- package/src/components/SpacePresence.tsx +2 -3
- package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +16 -1
- package/src/components/SpaceSettings/SpaceSettingsPanel.stories.tsx +5 -1
- package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +30 -8
- package/src/components/SyncStatus/InlineSyncStatus.tsx +2 -2
- package/src/components/SyncStatus/SyncStatus.tsx +2 -1
- package/src/components/index.ts +1 -0
- package/src/events.ts +6 -0
- package/src/index.ts +1 -1
- package/src/meta.ts +1 -0
- package/src/translations.ts +3 -0
- package/src/types/types.ts +23 -4
- package/src/util.tsx +16 -6
- package/dist/lib/browser/app-graph-builder-F6XSETHX.mjs.map +0 -7
- package/dist/lib/browser/chunk-IZ7QKQ2E.mjs.map +0 -7
- package/dist/lib/browser/chunk-SSJ772GK.mjs.map +0 -7
- package/dist/lib/browser/chunk-T36CIHPG.mjs.map +0 -7
- package/dist/lib/browser/chunk-UH5P4UL3.mjs.map +0 -7
- package/dist/lib/browser/chunk-XXD33C4E.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-XRZYCXXX.mjs +0 -459
- package/dist/lib/browser/intent-resolver-XRZYCXXX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-EGOL2JBL.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-WVU7US3C.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-GKLVZ4PM.cjs.map +0 -7
- package/dist/lib/node/chunk-56NGXG2A.cjs.map +0 -7
- package/dist/lib/node/chunk-5D4RWKTV.cjs.map +0 -7
- package/dist/lib/node/chunk-AJRP7AD6.cjs.map +0 -7
- package/dist/lib/node/chunk-UENH2YBM.cjs.map +0 -7
- package/dist/lib/node/chunk-YCBBGTFD.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-3NI6AUAI.cjs +0 -458
- package/dist/lib/node/intent-resolver-3NI6AUAI.cjs.map +0 -7
- package/dist/lib/node/react-surface-75KRPQYT.cjs.map +0 -7
- package/dist/lib/node/spaces-ready-ILVGUHJH.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-NEHQ5Z63.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-375RB3CZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5QMAPAZD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-E5DWIQ3N.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GVOPDPS2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HTBGWQEU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-P5EVBOGP.mjs +0 -460
- package/dist/lib/node-esm/intent-resolver-P5EVBOGP.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7EVWCKIP.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-CH3W7OGN.mjs.map +0 -7
- /package/dist/lib/browser/{app-graph-serializer-FYJE23GN.mjs.map → app-graph-serializer-FOWFLYGU.mjs.map} +0 -0
- /package/dist/lib/browser/{identity-created-4Q4PFIC5.mjs.map → identity-created-FYGS6TBH.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-BDOPFJGJ.mjs.map → react-root-IP2ZB245.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-WF67QZSD.mjs.map → settings-PHPCXX33.mjs.map} +0 -0
- /package/dist/lib/browser/{state-MS4KYJWI.mjs.map → state-INJ63O57.mjs.map} +0 -0
- /package/dist/lib/node/{app-graph-serializer-RMTU5YSC.cjs.map → app-graph-serializer-VQOGHKXL.cjs.map} +0 -0
- /package/dist/lib/node/{identity-created-QQWX7WX3.cjs.map → identity-created-AXI64BLE.cjs.map} +0 -0
- /package/dist/lib/node/{react-root-ZTR2J2I3.cjs.map → react-root-3OX5Z5CX.cjs.map} +0 -0
- /package/dist/lib/node/{settings-KOVSPA3S.cjs.map → settings-5QYFWNH7.cjs.map} +0 -0
- /package/dist/lib/node/{state-4UIOUKLJ.cjs.map → state-57UE3DYE.cjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-serializer-UWWS5OVC.mjs.map → app-graph-serializer-GZRSWHEN.mjs.map} +0 -0
- /package/dist/lib/node-esm/{identity-created-HMNY2MPB.mjs.map → identity-created-3CGEXNPO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-OUPJA4RY.mjs.map → react-root-7XXGP56B.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-EDK6WI3V.mjs.map → settings-H6MXTEQM.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-BMISGQ2O.mjs.map → state-VYA6OFHD.mjs.map} +0 -0
|
@@ -2,18 +2,10 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React
|
|
5
|
+
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
contributes,
|
|
10
|
-
createSurface,
|
|
11
|
-
Surface,
|
|
12
|
-
useCapability,
|
|
13
|
-
useCapabilities,
|
|
14
|
-
usePluginManager,
|
|
15
|
-
} from '@dxos/app-framework';
|
|
16
|
-
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
7
|
+
import { Capabilities, contributes, createSurface, Surface, useCapability } from '@dxos/app-framework';
|
|
8
|
+
import { SettingsStore } from '@dxos/local-storage';
|
|
17
9
|
import {
|
|
18
10
|
getSpace,
|
|
19
11
|
isEchoObject,
|
|
@@ -43,7 +35,6 @@ import {
|
|
|
43
35
|
POPOVER_RENAME_SPACE,
|
|
44
36
|
PopoverRenameObject,
|
|
45
37
|
PopoverRenameSpace,
|
|
46
|
-
ShareSpaceButton,
|
|
47
38
|
SmallPresenceLive,
|
|
48
39
|
SPACE_SETTINGS_DIALOG,
|
|
49
40
|
SpacePluginSettings,
|
|
@@ -53,10 +44,11 @@ import {
|
|
|
53
44
|
SyncStatus,
|
|
54
45
|
type CreateObjectDialogProps,
|
|
55
46
|
type SpaceSettingsDialogProps,
|
|
47
|
+
POPOVER_ADD_SPACE,
|
|
48
|
+
PopoverAddSpace,
|
|
56
49
|
} from '../components';
|
|
57
50
|
import { SPACE_PLUGIN } from '../meta';
|
|
58
51
|
import { CollectionType, type SpaceSettingsProps } from '../types';
|
|
59
|
-
import { COMPOSER_SPACE_LOCK } from '../util';
|
|
60
52
|
|
|
61
53
|
type ReactSurfaceOptions = {
|
|
62
54
|
createInvitationUrl: (invitationCode: string) => string;
|
|
@@ -81,7 +73,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
81
73
|
createSurface({
|
|
82
74
|
id: `${SPACE_PLUGIN}/collection-fallback`,
|
|
83
75
|
role: 'article',
|
|
84
|
-
|
|
76
|
+
position: 'fallback',
|
|
85
77
|
filter: (data): data is { subject: CollectionType } => data.subject instanceof CollectionType,
|
|
86
78
|
component: ({ data }) => <CollectionMain collection={data.subject} />,
|
|
87
79
|
}),
|
|
@@ -95,28 +87,28 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
95
87
|
createSurface({
|
|
96
88
|
id: `${SPACE_PLUGIN}/object-settings-base-panel`,
|
|
97
89
|
role: 'complementary--settings',
|
|
98
|
-
|
|
90
|
+
position: 'hoist',
|
|
99
91
|
filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),
|
|
100
92
|
component: ({ data }) => <BaseObjectSettings object={data.subject} />,
|
|
101
93
|
}),
|
|
102
94
|
createSurface({
|
|
103
95
|
id: `${SPACE_PLUGIN}/object-settings-advanced-panel`,
|
|
104
96
|
role: 'complementary--settings',
|
|
105
|
-
|
|
97
|
+
position: 'fallback',
|
|
106
98
|
filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),
|
|
107
99
|
component: ({ data }) => <AdvancedObjectSettings object={data.subject} />,
|
|
108
100
|
}),
|
|
109
101
|
createSurface({
|
|
110
102
|
id: SPACE_SETTINGS_DIALOG,
|
|
111
103
|
role: 'dialog',
|
|
112
|
-
filter: (data): data is {
|
|
113
|
-
component: ({ data }) => <SpaceSettingsDialog {...data.
|
|
104
|
+
filter: (data): data is { props: SpaceSettingsDialogProps } => data.component === SPACE_SETTINGS_DIALOG,
|
|
105
|
+
component: ({ data }) => <SpaceSettingsDialog {...data.props} createInvitationUrl={createInvitationUrl} />,
|
|
114
106
|
}),
|
|
115
107
|
createSurface({
|
|
116
108
|
id: JOIN_DIALOG,
|
|
117
109
|
role: 'dialog',
|
|
118
|
-
filter: (data): data is {
|
|
119
|
-
component: ({ data }) => <JoinDialog {...data.
|
|
110
|
+
filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,
|
|
111
|
+
component: ({ data }) => <JoinDialog {...data.props} />,
|
|
120
112
|
}),
|
|
121
113
|
createSurface({
|
|
122
114
|
id: CREATE_SPACE_DIALOG,
|
|
@@ -127,36 +119,27 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
127
119
|
createSurface({
|
|
128
120
|
id: CREATE_OBJECT_DIALOG,
|
|
129
121
|
role: 'dialog',
|
|
130
|
-
filter: (data): data is {
|
|
131
|
-
component: ({ data }) => {
|
|
132
|
-
const schemas = useCapabilities(ClientCapabilities.Schema).flat();
|
|
133
|
-
const manager = usePluginManager();
|
|
134
|
-
|
|
135
|
-
const resolve = useCallback(
|
|
136
|
-
(typename: string) => {
|
|
137
|
-
return (
|
|
138
|
-
manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ??
|
|
139
|
-
{}
|
|
140
|
-
);
|
|
141
|
-
},
|
|
142
|
-
[manager],
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
return <CreateObjectDialog schemas={schemas} resolve={resolve} {...data.subject} />;
|
|
146
|
-
},
|
|
122
|
+
filter: (data): data is { props: CreateObjectDialogProps } => data.component === CREATE_OBJECT_DIALOG,
|
|
123
|
+
component: ({ data }) => <CreateObjectDialog {...data.props} />,
|
|
147
124
|
}),
|
|
148
125
|
createSurface({
|
|
149
126
|
id: POPOVER_RENAME_SPACE,
|
|
150
127
|
role: 'popover',
|
|
151
|
-
filter: (data): data is {
|
|
152
|
-
component: ({ data }) => <PopoverRenameSpace space={data.
|
|
128
|
+
filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
|
|
129
|
+
component: ({ data }) => <PopoverRenameSpace space={data.props} />,
|
|
153
130
|
}),
|
|
154
131
|
createSurface({
|
|
155
132
|
id: POPOVER_RENAME_OBJECT,
|
|
156
133
|
role: 'popover',
|
|
157
|
-
filter: (data): data is {
|
|
158
|
-
data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.
|
|
159
|
-
component: ({ data }) => <PopoverRenameObject object={data.
|
|
134
|
+
filter: (data): data is { props: ReactiveEchoObject<any> } =>
|
|
135
|
+
data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.props),
|
|
136
|
+
component: ({ data }) => <PopoverRenameObject object={data.props} />,
|
|
137
|
+
}),
|
|
138
|
+
createSurface({
|
|
139
|
+
id: POPOVER_ADD_SPACE,
|
|
140
|
+
role: 'popover',
|
|
141
|
+
filter: (data): data is any => data.component === POPOVER_ADD_SPACE,
|
|
142
|
+
component: () => <PopoverAddSpace />,
|
|
160
143
|
}),
|
|
161
144
|
createSurface({
|
|
162
145
|
id: `${SPACE_PLUGIN}/navtree-presence`,
|
|
@@ -173,7 +156,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
173
156
|
// TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
|
|
174
157
|
id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
|
|
175
158
|
role: 'navtree-item-end',
|
|
176
|
-
|
|
159
|
+
position: 'fallback',
|
|
177
160
|
filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
|
|
178
161
|
component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,
|
|
179
162
|
}),
|
|
@@ -186,7 +169,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
186
169
|
createSurface({
|
|
187
170
|
id: `${SPACE_PLUGIN}/navbar-presence`,
|
|
188
171
|
role: 'navbar-end',
|
|
189
|
-
|
|
172
|
+
position: 'hoist',
|
|
190
173
|
filter: (data): data is { subject: Space | ReactiveEchoObject<any> } =>
|
|
191
174
|
isSpace(data.subject) || isEchoObject(data.subject),
|
|
192
175
|
component: ({ data }) => {
|
|
@@ -197,12 +180,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
197
180
|
: undefined
|
|
198
181
|
: data.subject;
|
|
199
182
|
|
|
200
|
-
return
|
|
201
|
-
<>
|
|
202
|
-
<SpacePresence object={object} />
|
|
203
|
-
{space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton space={space} />}
|
|
204
|
-
</>
|
|
205
|
-
) : null;
|
|
183
|
+
return object ? <SpacePresence object={object} /> : null;
|
|
206
184
|
},
|
|
207
185
|
}),
|
|
208
186
|
createSurface({
|
|
@@ -213,12 +191,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
213
191
|
}),
|
|
214
192
|
createSurface({
|
|
215
193
|
id: `${SPACE_PLUGIN}/settings`,
|
|
216
|
-
role: '
|
|
217
|
-
filter: (data): data is
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return <SpacePluginSettings settings={settings} />;
|
|
221
|
-
},
|
|
194
|
+
role: 'article',
|
|
195
|
+
filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
|
|
196
|
+
data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
|
|
197
|
+
component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
|
|
222
198
|
}),
|
|
223
199
|
createSurface({
|
|
224
200
|
id: `${SPACE_PLUGIN}/menu-footer`,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { effect } from '@preact/signals-core';
|
|
6
|
+
|
|
7
|
+
import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
|
|
8
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
9
|
+
|
|
10
|
+
import { SpaceCapabilities } from './capabilities';
|
|
11
|
+
import { type ObjectForm } from '../types';
|
|
12
|
+
|
|
13
|
+
export default (context: PluginsContext) => {
|
|
14
|
+
const client = context.requestCapability(ClientCapabilities.Client);
|
|
15
|
+
|
|
16
|
+
// TODO(wittjosiah): Unregister schemas when they are disabled.
|
|
17
|
+
let previous: ObjectForm[] = [];
|
|
18
|
+
const unsubscribe = effect(() => {
|
|
19
|
+
const forms = Array.from(new Set(context.requestCapabilities(SpaceCapabilities.ObjectForm)));
|
|
20
|
+
// TODO(wittjosiah): Filter out schemas which the client has already registered.
|
|
21
|
+
const newSchemas = forms.filter((form) => !previous.includes(form)).map((form) => form.objectSchema);
|
|
22
|
+
previous = forms;
|
|
23
|
+
client.addTypes(newSchemas);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
return contributes(Capabilities.Null, null, () => unsubscribe());
|
|
27
|
+
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { contributes, createIntent,
|
|
5
|
+
import { contributes, createIntent, type PluginsContext, Capabilities, LayoutAction } from '@dxos/app-framework';
|
|
6
6
|
import { EventSubscriptions } from '@dxos/async';
|
|
7
7
|
import { Expando } from '@dxos/echo-schema';
|
|
8
8
|
import { scheduledEffect } from '@dxos/echo-signals/core';
|
|
@@ -10,6 +10,7 @@ import { create } from '@dxos/live-object';
|
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
12
12
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
13
|
+
import { DeckCapabilities } from '@dxos/plugin-deck';
|
|
13
14
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
14
15
|
import { PublicKey } from '@dxos/react-client';
|
|
15
16
|
import { Filter, FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
|
|
@@ -29,7 +30,7 @@ export default async (context: PluginsContext) => {
|
|
|
29
30
|
const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
|
|
30
31
|
const { graph } = context.requestCapability(Capabilities.AppGraph);
|
|
31
32
|
const layout = context.requestCapability(Capabilities.Layout);
|
|
32
|
-
const
|
|
33
|
+
const deck = context.requestCapability(DeckCapabilities.DeckState);
|
|
33
34
|
const attention = context.requestCapability(AttentionCapabilities.Attention);
|
|
34
35
|
const state = context.requestCapability(SpaceCapabilities.MutableState);
|
|
35
36
|
const client = context.requestCapability(ClientCapabilities.Client);
|
|
@@ -37,6 +38,10 @@ export default async (context: PluginsContext) => {
|
|
|
37
38
|
const defaultSpace = client.spaces.default;
|
|
38
39
|
await defaultSpace.waitUntilReady();
|
|
39
40
|
|
|
41
|
+
if (deck.activeDeck === 'default') {
|
|
42
|
+
await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: defaultSpace.id }));
|
|
43
|
+
}
|
|
44
|
+
|
|
40
45
|
// Initialize space sharing lock in default space.
|
|
41
46
|
if (typeof defaultSpace.properties[COMPOSER_SPACE_LOCK] !== 'boolean') {
|
|
42
47
|
defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;
|
|
@@ -54,21 +59,18 @@ export default async (context: PluginsContext) => {
|
|
|
54
59
|
// Await missing objects.
|
|
55
60
|
subscriptions.add(
|
|
56
61
|
scheduledEffect(
|
|
57
|
-
() => ({
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}),
|
|
61
|
-
({ layoutMode, soloPart }) => {
|
|
62
|
-
if (layoutMode !== 'solo' || !soloPart) {
|
|
62
|
+
() => ({ active: layout.active }),
|
|
63
|
+
({ active }) => {
|
|
64
|
+
if (active.length !== 1) {
|
|
63
65
|
return;
|
|
64
66
|
}
|
|
65
67
|
|
|
66
|
-
const node = graph.findNode(
|
|
67
|
-
if (!node &&
|
|
68
|
+
const node = graph.findNode(active[0]);
|
|
69
|
+
if (!node && active[0].length === FQ_ID_LENGTH) {
|
|
68
70
|
const timeout = setTimeout(async () => {
|
|
69
|
-
const node = graph.findNode(
|
|
71
|
+
const node = graph.findNode(active[0]);
|
|
70
72
|
if (!node) {
|
|
71
|
-
await dispatch(createIntent(SpaceAction.WaitForObject, { id:
|
|
73
|
+
await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));
|
|
72
74
|
}
|
|
73
75
|
}, WAIT_FOR_OBJECT_TIMEOUT);
|
|
74
76
|
|
|
@@ -102,17 +104,14 @@ export default async (context: PluginsContext) => {
|
|
|
102
104
|
// Broadcast active node to other peers in the space.
|
|
103
105
|
subscriptions.add(
|
|
104
106
|
scheduledEffect(
|
|
105
|
-
() => ({
|
|
106
|
-
|
|
107
|
-
closed: [...location.closed],
|
|
108
|
-
}),
|
|
109
|
-
({ open, closed }) => {
|
|
107
|
+
() => ({ current: attention.current, active: layout.active, inactive: layout.inactive }),
|
|
108
|
+
({ current, active, inactive }) => {
|
|
110
109
|
const send = () => {
|
|
111
110
|
const spaces = client.spaces.get();
|
|
112
111
|
const identity = client.halo.identity.get();
|
|
113
|
-
if (identity
|
|
112
|
+
if (identity) {
|
|
114
113
|
// Group parts by space for efficient messaging.
|
|
115
|
-
const idsBySpace = reduceGroupBy(
|
|
114
|
+
const idsBySpace = reduceGroupBy(active, (id) => {
|
|
116
115
|
try {
|
|
117
116
|
const [spaceId] = parseFullyQualifiedId(id);
|
|
118
117
|
return spaceId;
|
|
@@ -121,7 +120,7 @@ export default async (context: PluginsContext) => {
|
|
|
121
120
|
}
|
|
122
121
|
});
|
|
123
122
|
|
|
124
|
-
const removedBySpace = reduceGroupBy(
|
|
123
|
+
const removedBySpace = reduceGroupBy(inactive, (id) => {
|
|
125
124
|
try {
|
|
126
125
|
const [spaceId] = parseFullyQualifiedId(id);
|
|
127
126
|
return spaceId;
|
|
@@ -147,7 +146,7 @@ export default async (context: PluginsContext) => {
|
|
|
147
146
|
void space
|
|
148
147
|
.postMessage('viewing', {
|
|
149
148
|
identityKey: identity.identityKey.toHex(),
|
|
150
|
-
attended:
|
|
149
|
+
attended: current,
|
|
151
150
|
added,
|
|
152
151
|
removed,
|
|
153
152
|
})
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { CheckCircle, CircleDashed, CircleNotch } from '@phosphor-icons/react';
|
|
6
6
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';
|
|
9
9
|
import { useClient } from '@dxos/react-client';
|
|
10
10
|
import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
|
|
11
11
|
import { Button, Toast, useTranslation } from '@dxos/react-ui';
|
|
@@ -23,7 +23,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
|
|
|
23
23
|
const [found, setFound] = useState(false);
|
|
24
24
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
25
25
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
26
|
-
const
|
|
26
|
+
const layout = useLayout();
|
|
27
27
|
|
|
28
28
|
const client = useClient();
|
|
29
29
|
const objects = useQuery(client.spaces, Filter.all());
|
|
@@ -44,11 +44,11 @@ export const AwaitingObject = ({ id }: { id: string }) => {
|
|
|
44
44
|
if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {
|
|
45
45
|
setFound(true);
|
|
46
46
|
|
|
47
|
-
if (
|
|
47
|
+
if (layout.active.includes(id)) {
|
|
48
48
|
setOpen(false);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
}, [id, objects,
|
|
51
|
+
}, [id, objects, layout]);
|
|
52
52
|
|
|
53
53
|
const handleClose = useCallback(
|
|
54
54
|
async () => dispatch(createIntent(SpaceAction.WaitForObject, { id: undefined })),
|
|
@@ -56,7 +56,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
|
|
|
56
56
|
);
|
|
57
57
|
|
|
58
58
|
const handleNavigate = useCallback(() => {
|
|
59
|
-
void dispatch(createIntent(
|
|
59
|
+
void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [id] }));
|
|
60
60
|
void handleClose();
|
|
61
61
|
}, [id, handleClose, dispatch]);
|
|
62
62
|
|
|
@@ -15,17 +15,24 @@ export type BaseObjectSettingsProps = {
|
|
|
15
15
|
|
|
16
16
|
export const BaseObjectSettings = ({ object }: BaseObjectSettingsProps) => {
|
|
17
17
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
18
|
+
const inputRef = React.useRef<HTMLInputElement>(null);
|
|
18
19
|
// TODO(burdon): Standardize forms.
|
|
19
20
|
return (
|
|
20
21
|
<div role='form' className='flex flex-col w-full p-2 gap-1'>
|
|
21
22
|
<Input.Root>
|
|
22
23
|
<Input.Label>{t('name label')}</Input.Label>
|
|
23
24
|
<Input.TextInput
|
|
25
|
+
ref={inputRef}
|
|
24
26
|
placeholder={t('name placeholder')}
|
|
25
27
|
value={object.name ?? ''}
|
|
26
28
|
onChange={(event) => {
|
|
27
29
|
object.name = event.target.value;
|
|
28
30
|
}}
|
|
31
|
+
onKeyDown={(event) => {
|
|
32
|
+
if (event.key === 'Enter') {
|
|
33
|
+
inputRef.current?.blur();
|
|
34
|
+
}
|
|
35
|
+
}}
|
|
29
36
|
/>
|
|
30
37
|
</Input.Root>
|
|
31
38
|
</div>
|
|
@@ -5,58 +5,65 @@
|
|
|
5
5
|
import { pipe } from 'effect';
|
|
6
6
|
import React, { useCallback, useRef } from 'react';
|
|
7
7
|
|
|
8
|
-
import { chain, createIntent, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';
|
|
9
|
-
import { useClient } from '@dxos/react-client';
|
|
10
8
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
Capabilities,
|
|
10
|
+
chain,
|
|
11
|
+
createIntent,
|
|
12
|
+
LayoutAction,
|
|
13
|
+
useCapabilities,
|
|
14
|
+
useIntentDispatcher,
|
|
15
|
+
usePluginManager,
|
|
16
|
+
} from '@dxos/app-framework';
|
|
17
|
+
import { invariant } from '@dxos/invariant';
|
|
18
|
+
import { useClient } from '@dxos/react-client';
|
|
19
|
+
import { getSpace, isReactiveObject, isSpace, type ReactiveObject, useSpaces } from '@dxos/react-client/echo';
|
|
18
20
|
import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
|
|
19
21
|
|
|
20
22
|
import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
|
|
23
|
+
import { SpaceCapabilities } from '../../capabilities';
|
|
21
24
|
import { SPACE_PLUGIN } from '../../meta';
|
|
22
|
-
import { CollectionType, SpaceAction } from '../../types';
|
|
25
|
+
import { CollectionType, type ObjectForm, SpaceAction } from '../../types';
|
|
23
26
|
|
|
24
27
|
export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
|
|
25
28
|
|
|
26
|
-
export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, '
|
|
27
|
-
resolve?: (typename: string) => Record<string, any>;
|
|
29
|
+
export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
|
|
28
30
|
shouldNavigate?: (object: ReactiveObject<any>) => boolean;
|
|
29
31
|
};
|
|
30
32
|
|
|
31
33
|
export const CreateObjectDialog = ({
|
|
32
|
-
schemas,
|
|
33
34
|
target,
|
|
34
35
|
typename,
|
|
35
36
|
name,
|
|
36
37
|
shouldNavigate: _shouldNavigate,
|
|
37
|
-
resolve,
|
|
38
38
|
}: CreateObjectDialogProps) => {
|
|
39
39
|
const closeRef = useRef<HTMLButtonElement | null>(null);
|
|
40
|
+
const manager = usePluginManager();
|
|
40
41
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
41
42
|
const client = useClient();
|
|
42
43
|
const spaces = useSpaces();
|
|
43
44
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
45
|
+
const forms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
46
|
+
|
|
47
|
+
const resolve = useCallback(
|
|
48
|
+
(typename: string) =>
|
|
49
|
+
manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
|
|
50
|
+
[manager],
|
|
51
|
+
);
|
|
44
52
|
|
|
45
53
|
const handleCreateObject = useCallback(
|
|
46
54
|
async ({
|
|
47
|
-
|
|
55
|
+
form,
|
|
48
56
|
target: _target,
|
|
49
|
-
data,
|
|
57
|
+
data = {},
|
|
50
58
|
}: {
|
|
51
|
-
|
|
59
|
+
form: ObjectForm;
|
|
52
60
|
target: CreateObjectPanelProps['target'];
|
|
53
61
|
data?: Record<string, any>;
|
|
54
62
|
}) => {
|
|
55
63
|
const target = isSpace(_target)
|
|
56
64
|
? (_target.properties[CollectionType.typename]?.target as CollectionType | undefined)
|
|
57
65
|
: _target;
|
|
58
|
-
|
|
59
|
-
if (!createObjectIntent || !target) {
|
|
66
|
+
if (!target) {
|
|
60
67
|
// TODO(wittjosiah): UI feedback.
|
|
61
68
|
return;
|
|
62
69
|
}
|
|
@@ -65,13 +72,14 @@ export const CreateObjectDialog = ({
|
|
|
65
72
|
closeRef.current?.click();
|
|
66
73
|
|
|
67
74
|
const space = isSpace(target) ? target : getSpace(target);
|
|
68
|
-
|
|
75
|
+
invariant(space, 'Missing space');
|
|
76
|
+
const result = await dispatch(form.getIntent(data, { space }));
|
|
69
77
|
const object = result.data?.object;
|
|
70
78
|
if (isReactiveObject(object)) {
|
|
71
79
|
const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object });
|
|
72
80
|
const shouldNavigate = _shouldNavigate ?? (() => true);
|
|
73
81
|
if (shouldNavigate(object)) {
|
|
74
|
-
await dispatch(pipe(addObjectIntent, chain(
|
|
82
|
+
await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
|
|
75
83
|
} else {
|
|
76
84
|
await dispatch(addObjectIntent);
|
|
77
85
|
}
|
|
@@ -83,7 +91,7 @@ export const CreateObjectDialog = ({
|
|
|
83
91
|
return (
|
|
84
92
|
// TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
|
|
85
93
|
// Consider factoring it out to the tabs package.
|
|
86
|
-
<Dialog.Content classNames='p-0 bs-content
|
|
94
|
+
<Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>
|
|
87
95
|
<div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>
|
|
88
96
|
<Dialog.Title>{t('create object dialog title')}</Dialog.Title>
|
|
89
97
|
<Dialog.Close asChild>
|
|
@@ -92,18 +100,18 @@ export const CreateObjectDialog = ({
|
|
|
92
100
|
</Button>
|
|
93
101
|
</Dialog.Close>
|
|
94
102
|
</div>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
|
|
104
|
+
<CreateObjectPanel
|
|
105
|
+
classNames='p-4'
|
|
106
|
+
forms={forms}
|
|
107
|
+
spaces={spaces}
|
|
108
|
+
target={target}
|
|
109
|
+
typename={typename}
|
|
110
|
+
name={name}
|
|
111
|
+
defaultSpaceId={client.spaces.default.id}
|
|
112
|
+
resolve={resolve}
|
|
113
|
+
onCreateObject={handleCreateObject}
|
|
114
|
+
/>
|
|
107
115
|
</Dialog.Content>
|
|
108
116
|
);
|
|
109
117
|
};
|