@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.a4bbb77
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/{CollectionMain-D2B75XBS.mjs → CollectionMain-AX7KKXWP.mjs} +4 -4
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +7 -0
- package/dist/lib/browser/{ObjectDetailsPanel-YPTDQKMG.mjs → ObjectDetailsPanel-ETI5YBTH.mjs} +10 -8
- package/dist/lib/browser/ObjectDetailsPanel-ETI5YBTH.mjs.map +7 -0
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +68 -0
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-V3MP3CDK.mjs → app-graph-builder-W7RVDAUA.mjs} +80 -43
- package/dist/lib/browser/app-graph-builder-W7RVDAUA.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-VLHVTDX4.mjs} +14 -14
- package/dist/lib/browser/app-graph-serializer-VLHVTDX4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-2BFVC5K6.mjs} +139 -150
- package/dist/lib/browser/chunk-2BFVC5K6.mjs.map +7 -0
- package/dist/lib/browser/chunk-E2I747A7.mjs +20 -0
- package/dist/lib/browser/chunk-E2I747A7.mjs.map +7 -0
- package/dist/lib/browser/chunk-EIXZABXD.mjs +19 -0
- package/dist/lib/browser/chunk-EIXZABXD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-ELJDGQTO.mjs} +3 -3
- package/dist/lib/browser/{chunk-VLBRSGJ2.mjs.map → chunk-ELJDGQTO.mjs.map} +3 -3
- package/dist/lib/browser/chunk-IRKDREHY.mjs +11 -0
- package/dist/lib/browser/chunk-IRKDREHY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SGTQ52SU.mjs → chunk-JCHSUOPF.mjs} +14 -8
- package/dist/lib/browser/chunk-JCHSUOPF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-PN27K4I7.mjs} +93 -41
- package/dist/lib/browser/chunk-PN27K4I7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-ZIZ2JLW6.mjs} +10 -9
- package/dist/lib/browser/chunk-ZIZ2JLW6.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-PW2BA46S.mjs} +4 -4
- package/dist/lib/browser/{identity-created-23XJJV2N.mjs.map → identity-created-PW2BA46S.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +19 -39
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-HA7DPAUE.mjs} +46 -41
- package/dist/lib/browser/intent-resolver-HA7DPAUE.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-CMWOGJG5.mjs → react-root-YQUJU64P.mjs} +11 -11
- package/dist/lib/browser/react-root-YQUJU64P.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-HTXYMRSW.mjs} +50 -40
- package/dist/lib/browser/react-surface-HTXYMRSW.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-Z6FC4AHC.mjs → schema-defs-R56ZDBZ7.mjs} +5 -5
- package/dist/lib/browser/schema-defs-R56ZDBZ7.mjs.map +7 -0
- package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-5XPQMSPO.mjs} +5 -5
- package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-5XPQMSPO.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YY77ANIF.mjs} +17 -15
- package/dist/lib/browser/spaces-ready-YY77ANIF.mjs.map +7 -0
- package/dist/lib/browser/{state-QYZAB45H.mjs → state-Y4RVCG4A.mjs} +7 -7
- package/dist/lib/browser/state-Y4RVCG4A.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionMain-EU57SRYK.mjs} +4 -4
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectDetailsPanel-QKZEDSZK.mjs → ObjectDetailsPanel-TQ5GN4QJ.mjs} +10 -8
- package/dist/lib/node-esm/ObjectDetailsPanel-TQ5GN4QJ.mjs.map +7 -0
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +70 -0
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-SG4VECBB.mjs → app-graph-builder-5ZJJUMQI.mjs} +80 -43
- package/dist/lib/node-esm/app-graph-builder-5ZJJUMQI.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-EZJSGJUT.mjs} +14 -14
- package/dist/lib/node-esm/app-graph-serializer-EZJSGJUT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-5XRYHWL7.mjs} +10 -9
- package/dist/lib/node-esm/chunk-5XRYHWL7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JH6F4C3I.mjs → chunk-6WNZW6KT.mjs} +14 -8
- package/dist/lib/node-esm/chunk-6WNZW6KT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-BLPXWPLB.mjs} +139 -150
- package/dist/lib/node-esm/chunk-BLPXWPLB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-IJVBBVCL.mjs +21 -0
- package/dist/lib/node-esm/chunk-IJVBBVCL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HWNG4MEU.mjs → chunk-MWNATOXL.mjs} +2 -4
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-Q6AAQLQG.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs.map → chunk-Q6AAQLQG.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +20 -0
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-XDQXUZMK.mjs} +93 -41
- package/dist/lib/node-esm/chunk-XDQXUZMK.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-MWTLGQRU.mjs} +4 -4
- package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs.map → identity-created-MWTLGQRU.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +19 -39
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-LQNHMPIX.mjs} +46 -41
- package/dist/lib/node-esm/intent-resolver-LQNHMPIX.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-UTLJEIKE.mjs} +11 -11
- package/dist/lib/node-esm/react-root-UTLJEIKE.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-LYDYON3U.mjs} +50 -40
- package/dist/lib/node-esm/react-surface-LYDYON3U.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-WHJM7UZE.mjs → schema-defs-7IMJPIWS.mjs} +5 -5
- package/dist/lib/node-esm/schema-defs-7IMJPIWS.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-XBSK5KHH.mjs} +5 -5
- package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-XBSK5KHH.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-YX4IHT4P.mjs} +17 -15
- package/dist/lib/node-esm/spaces-ready-YX4IHT4P.mjs.map +7 -0
- package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-HOHAVPUO.mjs} +7 -7
- package/dist/lib/node-esm/state-HOHAVPUO.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SpacePlugin.d.ts +1 -1
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +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 +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +3 -3
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +11 -12
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +2 -2
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
- package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/capabilities/state.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 +1584 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -3
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +1 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.d.ts +3 -2
- package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.stories.d.ts +1584 -5
- package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/RecordMain.d.ts +7 -0
- package/dist/types/src/components/RecordMain.d.ts.map +1 -0
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +1412 -4
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1417 -4
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1418 -5
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor.d.ts +1 -1
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +8 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1216 -26
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +73 -93
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +8 -6
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +63 -62
- package/src/SpacePlugin.ts +203 -218
- package/src/capabilities/app-graph-builder.ts +100 -53
- package/src/capabilities/app-graph-serializer.ts +7 -7
- package/src/capabilities/capabilities.ts +11 -10
- package/src/capabilities/identity-created.ts +1 -1
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +36 -24
- package/src/capabilities/react-root.tsx +4 -3
- package/src/capabilities/react-surface.tsx +45 -36
- package/src/capabilities/schema-defs.ts +3 -2
- package/src/capabilities/spaces-ready.ts +10 -7
- package/src/capabilities/state.ts +5 -4
- package/src/components/AwaitingObject.tsx +3 -3
- package/src/components/CollectionMain.tsx +2 -2
- package/src/components/CollectionSection.tsx +2 -2
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -10
- package/src/components/CreateDialog/CreateObjectDialog.tsx +21 -11
- package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +4 -4
- package/src/components/JoinDialog.tsx +7 -7
- package/src/components/MembersContainer.stories.tsx +36 -10
- package/src/components/MembersContainer.tsx +12 -13
- package/src/components/MenuFooter.tsx +2 -2
- package/src/components/ObjectDetailsPanel.tsx +6 -4
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -2
- package/src/components/ObjectSettings/ForeignKeys.tsx +2 -2
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +3 -2
- package/src/components/PersistenceStatus.tsx +2 -2
- package/src/components/PopoverRenameObject.tsx +9 -15
- package/src/components/PopoverRenameSpace.tsx +4 -4
- package/src/components/RecordMain.tsx +43 -0
- package/src/components/SchemaContainer.tsx +4 -4
- package/src/components/SpacePluginSettings.tsx +8 -9
- package/src/components/SpacePresence.stories.tsx +23 -22
- package/src/components/SpacePresence.tsx +9 -9
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +17 -17
- package/src/components/SyncStatus/InlineSyncStatus.tsx +2 -2
- package/src/components/SyncStatus/SyncStatus.stories.tsx +6 -7
- package/src/components/SyncStatus/SyncStatus.tsx +4 -3
- package/src/components/ViewEditor.tsx +13 -18
- package/src/components/index.ts +1 -0
- package/src/events.ts +7 -7
- package/src/hooks/useActiveSpace.ts +2 -2
- package/src/hooks/useInputSurfaceLookup.tsx +1 -1
- package/src/meta.ts +1 -3
- package/src/translations.ts +8 -7
- package/src/types/types.ts +15 -10
- package/src/util.tsx +86 -37
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
- package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
- package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
- package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
- package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
- package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
- package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
- package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
- package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
- package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
- package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
- package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
- package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
- package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
- package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
- package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
- package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
- package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
- package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
- package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
- package/src/capabilities/schema-tool.test.ts +0 -44
- package/src/capabilities/schema-tools.ts +0 -125
|
@@ -7,9 +7,9 @@ import React, { useCallback, useMemo } from 'react';
|
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
9
|
Capabilities,
|
|
10
|
+
Surface,
|
|
10
11
|
contributes,
|
|
11
12
|
createSurface,
|
|
12
|
-
Surface,
|
|
13
13
|
useCapabilities,
|
|
14
14
|
useCapability,
|
|
15
15
|
useLayout,
|
|
@@ -20,14 +20,14 @@ import { SettingsStore } from '@dxos/local-storage';
|
|
|
20
20
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
21
21
|
import { useClient } from '@dxos/react-client';
|
|
22
22
|
import {
|
|
23
|
+
type Space,
|
|
24
|
+
SpaceState,
|
|
23
25
|
fullyQualifiedId,
|
|
24
26
|
getSpace,
|
|
25
27
|
isLiveObject,
|
|
26
28
|
isSpace,
|
|
27
29
|
parseId,
|
|
28
|
-
SpaceState,
|
|
29
30
|
useSpace,
|
|
30
|
-
type Space,
|
|
31
31
|
} from '@dxos/react-client/echo';
|
|
32
32
|
import { Input, useTranslation } from '@dxos/react-ui';
|
|
33
33
|
import { type InputProps, SelectInput } from '@dxos/react-ui-form';
|
|
@@ -35,13 +35,13 @@ import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
|
35
35
|
import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
|
|
36
36
|
import { type JoinPanelProps } from '@dxos/shell/react';
|
|
37
37
|
|
|
38
|
-
import { SpaceCapabilities } from './capabilities';
|
|
39
38
|
import {
|
|
40
|
-
CollectionMain,
|
|
41
|
-
CollectionSection,
|
|
42
39
|
CREATE_OBJECT_DIALOG,
|
|
43
40
|
CREATE_SPACE_DIALOG,
|
|
41
|
+
CollectionMain,
|
|
42
|
+
CollectionSection,
|
|
44
43
|
CreateObjectDialog,
|
|
44
|
+
type CreateObjectDialogProps,
|
|
45
45
|
CreateSpaceDialog,
|
|
46
46
|
InlineSyncStatus,
|
|
47
47
|
JOIN_DIALOG,
|
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
POPOVER_RENAME_SPACE,
|
|
55
55
|
PopoverRenameObject,
|
|
56
56
|
PopoverRenameSpace,
|
|
57
|
+
RecordMain,
|
|
57
58
|
SchemaContainer,
|
|
58
59
|
SmallPresenceLive,
|
|
59
60
|
SpacePluginSettings,
|
|
@@ -61,21 +62,22 @@ import {
|
|
|
61
62
|
SpaceSettingsContainer,
|
|
62
63
|
SyncStatus,
|
|
63
64
|
ViewEditor,
|
|
64
|
-
type CreateObjectDialogProps,
|
|
65
65
|
} from '../components';
|
|
66
|
-
import {
|
|
66
|
+
import { meta } from '../meta';
|
|
67
67
|
import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
|
|
68
68
|
|
|
69
|
+
import { SpaceCapabilities } from './capabilities';
|
|
70
|
+
|
|
69
71
|
type ReactSurfaceOptions = {
|
|
70
72
|
createInvitationUrl: (invitationCode: string) => string;
|
|
71
73
|
};
|
|
72
74
|
|
|
73
|
-
const OMIT = [DataType.Collection.typename, DataType.QueryCollection
|
|
75
|
+
const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
|
|
74
76
|
|
|
75
77
|
export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
76
78
|
contributes(Capabilities.ReactSurface, [
|
|
77
79
|
createSurface({
|
|
78
|
-
id: `${
|
|
80
|
+
id: `${meta.id}/article`,
|
|
79
81
|
role: 'article',
|
|
80
82
|
filter: (data): data is { subject: Space } =>
|
|
81
83
|
// TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
|
|
@@ -92,29 +94,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
92
94
|
),
|
|
93
95
|
}),
|
|
94
96
|
createSurface({
|
|
95
|
-
id: `${
|
|
97
|
+
id: `${meta.id}/record-article`,
|
|
98
|
+
role: 'article',
|
|
99
|
+
position: 'fallback',
|
|
100
|
+
filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
|
|
101
|
+
component: ({ data }) => <RecordMain record={data.subject} />,
|
|
102
|
+
}),
|
|
103
|
+
createSurface({
|
|
104
|
+
id: `${meta.id}/collection-fallback`,
|
|
96
105
|
role: 'article',
|
|
97
106
|
position: 'fallback',
|
|
98
107
|
filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
|
|
99
108
|
component: ({ data }) => <CollectionMain collection={data.subject} />,
|
|
100
109
|
}),
|
|
101
110
|
createSurface({
|
|
102
|
-
id: `${
|
|
111
|
+
id: `${meta.id}/plugin-settings`,
|
|
103
112
|
role: 'article',
|
|
104
113
|
filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
|
|
105
|
-
data.subject instanceof SettingsStore && data.subject.prefix ===
|
|
114
|
+
data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
|
|
106
115
|
component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
|
|
107
116
|
}),
|
|
108
117
|
createSurface({
|
|
109
|
-
id: `${
|
|
118
|
+
id: `${meta.id}/companion/object-settings`,
|
|
110
119
|
role: 'article',
|
|
111
120
|
filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
|
|
112
121
|
component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
|
|
113
122
|
}),
|
|
114
123
|
createSurface({
|
|
115
|
-
id: `${
|
|
124
|
+
id: `${meta.id}/space-settings-properties`,
|
|
116
125
|
role: 'article',
|
|
117
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
126
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
|
|
118
127
|
component: () => {
|
|
119
128
|
const layout = useLayout();
|
|
120
129
|
const { spaceId } = parseId(layout.workspace);
|
|
@@ -127,10 +136,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
127
136
|
},
|
|
128
137
|
}),
|
|
129
138
|
createSurface({
|
|
130
|
-
id: `${
|
|
139
|
+
id: `${meta.id}/space-settings-members`,
|
|
131
140
|
role: 'article',
|
|
132
141
|
position: 'hoist',
|
|
133
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
142
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
|
|
134
143
|
component: () => {
|
|
135
144
|
const layout = useLayout();
|
|
136
145
|
const { spaceId } = parseId(layout.workspace);
|
|
@@ -143,9 +152,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
143
152
|
},
|
|
144
153
|
}),
|
|
145
154
|
createSurface({
|
|
146
|
-
id: `${
|
|
155
|
+
id: `${meta.id}/space-settings-schema`,
|
|
147
156
|
role: 'article',
|
|
148
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
157
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
|
|
149
158
|
component: () => {
|
|
150
159
|
const layout = useLayout();
|
|
151
160
|
const { spaceId } = parseId(layout.workspace);
|
|
@@ -158,7 +167,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
158
167
|
},
|
|
159
168
|
}),
|
|
160
169
|
createSurface({
|
|
161
|
-
id: `${
|
|
170
|
+
id: `${meta.id}/selected-objects`,
|
|
162
171
|
role: 'article',
|
|
163
172
|
filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
|
|
164
173
|
Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
|
|
@@ -189,45 +198,45 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
189
198
|
component: ({ data }) => <CreateObjectDialog {...data.props} />,
|
|
190
199
|
}),
|
|
191
200
|
createSurface({
|
|
192
|
-
id: `${
|
|
201
|
+
id: `${meta.id}/create-initial-space-form-[hue]`,
|
|
193
202
|
role: 'form-input',
|
|
194
203
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
195
204
|
const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
|
|
196
205
|
return !!annotation;
|
|
197
206
|
},
|
|
198
207
|
component: ({ data: _, ...inputProps }) => {
|
|
199
|
-
const { label,
|
|
208
|
+
const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
|
|
200
209
|
const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
|
|
201
210
|
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
|
|
202
211
|
return (
|
|
203
212
|
<Input.Root>
|
|
204
213
|
<Input.Label>{label}</Input.Label>
|
|
205
|
-
<HuePicker disabled={
|
|
214
|
+
<HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
|
|
206
215
|
</Input.Root>
|
|
207
216
|
);
|
|
208
217
|
},
|
|
209
218
|
}),
|
|
210
219
|
createSurface({
|
|
211
|
-
id: `${
|
|
220
|
+
id: `${meta.id}/create-initial-space-form-[icon]`,
|
|
212
221
|
role: 'form-input',
|
|
213
222
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
214
223
|
const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
|
|
215
224
|
return !!annotation;
|
|
216
225
|
},
|
|
217
226
|
component: ({ data: _, ...inputProps }) => {
|
|
218
|
-
const { label,
|
|
227
|
+
const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
|
|
219
228
|
const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
|
|
220
229
|
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
|
|
221
230
|
return (
|
|
222
231
|
<Input.Root>
|
|
223
232
|
<Input.Label>{label}</Input.Label>
|
|
224
|
-
<IconPicker disabled={
|
|
233
|
+
<IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
|
|
225
234
|
</Input.Root>
|
|
226
235
|
);
|
|
227
236
|
},
|
|
228
237
|
}),
|
|
229
238
|
createSurface({
|
|
230
|
-
id: `${
|
|
239
|
+
id: `${meta.id}/typename-form-input`,
|
|
231
240
|
role: 'form-input',
|
|
232
241
|
filter: (
|
|
233
242
|
data,
|
|
@@ -311,7 +320,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
311
320
|
},
|
|
312
321
|
}),
|
|
313
322
|
createSurface({
|
|
314
|
-
id: `${
|
|
323
|
+
id: `${meta.id}/object-settings`,
|
|
315
324
|
role: 'object-settings',
|
|
316
325
|
filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
|
|
317
326
|
component: ({ data }) => <ViewEditor view={data.subject} />,
|
|
@@ -330,13 +339,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
330
339
|
component: ({ data }) => <PopoverRenameObject object={data.props} />,
|
|
331
340
|
}),
|
|
332
341
|
createSurface({
|
|
333
|
-
id: `${
|
|
342
|
+
id: `${meta.id}/menu-footer`,
|
|
334
343
|
role: 'menu-footer',
|
|
335
344
|
filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
|
|
336
345
|
component: ({ data }) => <MenuFooter object={data.subject} />,
|
|
337
346
|
}),
|
|
338
347
|
createSurface({
|
|
339
|
-
id: `${
|
|
348
|
+
id: `${meta.id}/navtree-presence`,
|
|
340
349
|
role: 'navtree-item-end',
|
|
341
350
|
filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
|
|
342
351
|
typeof data.id === 'string' && Obj.isObject(data.subject),
|
|
@@ -348,7 +357,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
348
357
|
}),
|
|
349
358
|
// TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
|
|
350
359
|
createSurface({
|
|
351
|
-
id: `${
|
|
360
|
+
id: `${meta.id}/navtree-presence-fallback`,
|
|
352
361
|
role: 'navtree-item-end',
|
|
353
362
|
position: 'fallback',
|
|
354
363
|
filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
|
|
@@ -356,13 +365,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
356
365
|
}),
|
|
357
366
|
// TODO(wittjosiah): Broken?
|
|
358
367
|
createSurface({
|
|
359
|
-
id: `${
|
|
368
|
+
id: `${meta.id}/navtree-sync-status`,
|
|
360
369
|
role: 'navtree-item-end',
|
|
361
370
|
filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
|
|
362
371
|
component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
|
|
363
372
|
}),
|
|
364
373
|
createSurface({
|
|
365
|
-
id: `${
|
|
374
|
+
id: `${meta.id}/navbar-presence`,
|
|
366
375
|
role: 'navbar-end',
|
|
367
376
|
position: 'hoist',
|
|
368
377
|
filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
|
|
@@ -378,13 +387,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
378
387
|
},
|
|
379
388
|
}),
|
|
380
389
|
createSurface({
|
|
381
|
-
id: `${
|
|
390
|
+
id: `${meta.id}/collection-section`,
|
|
382
391
|
role: 'section',
|
|
383
392
|
filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
|
|
384
393
|
component: ({ data }) => <CollectionSection collection={data.subject} />,
|
|
385
394
|
}),
|
|
386
395
|
createSurface({
|
|
387
|
-
id: `${
|
|
396
|
+
id: `${meta.id}/status`,
|
|
388
397
|
role: 'status',
|
|
389
398
|
component: () => <SyncStatus />,
|
|
390
399
|
}),
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Capabilities,
|
|
5
|
+
import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
|
|
6
6
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
7
7
|
|
|
8
|
-
import { SpaceCapabilities } from './capabilities';
|
|
9
8
|
import { type ObjectForm } from '../types';
|
|
10
9
|
|
|
10
|
+
import { SpaceCapabilities } from './capabilities';
|
|
11
|
+
|
|
11
12
|
export default (context: PluginContext) => {
|
|
12
13
|
const registry = context.getCapability(Capabilities.RxRegistry);
|
|
13
14
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { Option } from 'effect';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
8
8
|
import { SubscriptionList } from '@dxos/async';
|
|
9
9
|
import { Filter, Obj, Type } from '@dxos/echo';
|
|
10
10
|
import { scheduledEffect } from '@dxos/echo-signals/core';
|
|
@@ -14,13 +14,14 @@ import { ClientCapabilities } from '@dxos/plugin-client';
|
|
|
14
14
|
import { DeckCapabilities } from '@dxos/plugin-deck';
|
|
15
15
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
16
16
|
import { PublicKey } from '@dxos/react-client';
|
|
17
|
-
import { FQ_ID_LENGTH,
|
|
17
|
+
import { FQ_ID_LENGTH, SpaceState, parseFullyQualifiedId } from '@dxos/react-client/echo';
|
|
18
18
|
import { ComplexMap, reduceGroupBy } from '@dxos/util';
|
|
19
19
|
|
|
20
|
-
import { SpaceCapabilities } from './capabilities';
|
|
21
20
|
import { SpaceAction } from '../types';
|
|
22
21
|
import { COMPOSER_SPACE_LOCK, SHARED } from '../util';
|
|
23
22
|
|
|
23
|
+
import { SpaceCapabilities } from './capabilities';
|
|
24
|
+
|
|
24
25
|
const ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;
|
|
25
26
|
const WAIT_FOR_OBJECT_TIMEOUT = 5_000;
|
|
26
27
|
|
|
@@ -66,12 +67,14 @@ export default async (context: PluginContext) => {
|
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
const
|
|
70
|
-
|
|
70
|
+
const id = active[0];
|
|
71
|
+
const node = graph.getNode(id).pipe(Option.getOrNull);
|
|
72
|
+
if (!node && id.length === FQ_ID_LENGTH) {
|
|
73
|
+
void graph.initialize(id);
|
|
71
74
|
const timeout = setTimeout(async () => {
|
|
72
|
-
const node = graph.getNode(
|
|
75
|
+
const node = graph.getNode(id).pipe(Option.getOrNull);
|
|
73
76
|
if (!node) {
|
|
74
|
-
await dispatch(createIntent(SpaceAction.WaitForObject, { id
|
|
77
|
+
await dispatch(createIntent(SpaceAction.WaitForObject, { id }));
|
|
75
78
|
}
|
|
76
79
|
}, WAIT_FOR_OBJECT_TIMEOUT);
|
|
77
80
|
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
|
|
5
5
|
import { effect } from '@preact/signals-core';
|
|
6
6
|
|
|
7
|
-
import { Capabilities,
|
|
7
|
+
import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
|
|
8
8
|
import { PublicKey } from '@dxos/keys';
|
|
9
9
|
import { LocalStorageStore } from '@dxos/local-storage';
|
|
10
10
|
import { ComplexMap } from '@dxos/util';
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
import { SPACE_PLUGIN } from '../meta';
|
|
12
|
+
import { meta } from '../meta';
|
|
14
13
|
import { type PluginState } from '../types';
|
|
15
14
|
|
|
15
|
+
import { SpaceCapabilities } from './capabilities';
|
|
16
|
+
|
|
16
17
|
export default (context: PluginContext) => {
|
|
17
|
-
const state = new LocalStorageStore<PluginState>(
|
|
18
|
+
const state = new LocalStorageStore<PluginState>(meta.id, {
|
|
18
19
|
awaiting: undefined,
|
|
19
20
|
spaceNames: {},
|
|
20
21
|
viewersByObject: {},
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { LayoutAction, createIntent, useIntentDispatcher, useLayout } from '@dxos/app-framework';
|
|
8
8
|
import { useClient } from '@dxos/react-client';
|
|
9
9
|
import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
|
|
10
10
|
import { Button, Icon, Toast, useTranslation } from '@dxos/react-ui';
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { meta } from '../meta';
|
|
13
13
|
import { SpaceAction } from '../types';
|
|
14
14
|
|
|
15
15
|
const WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes
|
|
@@ -19,7 +19,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
|
|
|
19
19
|
const [open, setOpen] = useState(true);
|
|
20
20
|
const [waiting, setWaiting] = useState(true);
|
|
21
21
|
const [found, setFound] = useState(false);
|
|
22
|
-
const { t } = useTranslation(
|
|
22
|
+
const { t } = useTranslation(meta.id);
|
|
23
23
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
24
24
|
const layout = useLayout();
|
|
25
25
|
|
|
@@ -8,10 +8,10 @@ import { useTranslation } from '@dxos/react-ui';
|
|
|
8
8
|
import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
|
|
9
9
|
import { type DataType } from '@dxos/schema';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { meta } from '../meta';
|
|
12
12
|
|
|
13
13
|
export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
|
|
14
|
-
const { t } = useTranslation(
|
|
14
|
+
const { t } = useTranslation(meta.id);
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
17
|
<div
|
|
@@ -7,10 +7,10 @@ import React from 'react';
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { type DataType } from '@dxos/schema';
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { meta } from '../meta';
|
|
11
11
|
|
|
12
12
|
export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
|
|
13
|
-
const { t } = useTranslation(
|
|
13
|
+
const { t } = useTranslation(meta.id);
|
|
14
14
|
// TODO(wittjosiah): Better placeholder.
|
|
15
15
|
return (
|
|
16
16
|
<div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
|
|
@@ -2,47 +2,48 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useEffect } from 'react';
|
|
9
7
|
|
|
8
|
+
import { IntentPlugin } from '@dxos/app-framework';
|
|
9
|
+
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
10
|
import { Filter, Obj, Type } from '@dxos/echo';
|
|
11
11
|
import { useQuery, useSpace } from '@dxos/react-client/echo';
|
|
12
12
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
13
13
|
import { Dialog } from '@dxos/react-ui';
|
|
14
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
14
15
|
import { DataType } from '@dxos/schema';
|
|
15
16
|
import { translations as shellTranslations } from '@dxos/shell/react';
|
|
16
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
17
17
|
|
|
18
|
-
import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
|
|
19
18
|
import { translations } from '../../translations';
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
|
|
21
|
+
|
|
22
|
+
const Story = (props: CreateObjectDialogProps) => {
|
|
22
23
|
return (
|
|
23
24
|
<Dialog.Root open>
|
|
24
25
|
<Dialog.Overlay blockAlign='start'>
|
|
25
|
-
<CreateObjectDialog {...
|
|
26
|
+
<CreateObjectDialog {...props} />
|
|
26
27
|
</Dialog.Overlay>
|
|
27
28
|
</Dialog.Root>
|
|
28
29
|
);
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
// TODO(wittjosiah): Story should be for CreateObjectPanel.
|
|
32
|
-
const meta
|
|
33
|
+
const meta = {
|
|
33
34
|
title: 'plugins/plugin-space/CreateObjectDialog',
|
|
34
35
|
component: CreateObjectDialog,
|
|
35
36
|
render: Story,
|
|
36
37
|
decorators: [
|
|
38
|
+
withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
|
|
39
|
+
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
37
40
|
withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
|
|
38
|
-
withTheme,
|
|
39
|
-
withLayout(),
|
|
40
41
|
],
|
|
41
42
|
parameters: {
|
|
42
43
|
translations: [...translations, ...shellTranslations],
|
|
43
44
|
},
|
|
44
45
|
args: {},
|
|
45
|
-
}
|
|
46
|
+
} satisfies Meta<typeof CreateObjectDialog>;
|
|
46
47
|
|
|
47
48
|
export default meta;
|
|
48
49
|
|
|
@@ -17,20 +17,24 @@ import {
|
|
|
17
17
|
import { Obj, Query, Type } from '@dxos/echo';
|
|
18
18
|
import { invariant } from '@dxos/invariant';
|
|
19
19
|
import { useClient } from '@dxos/react-client';
|
|
20
|
-
import { getSpace, isLiveObject, isSpace,
|
|
20
|
+
import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
|
|
21
21
|
import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
|
|
22
22
|
import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
|
|
23
|
-
import { DataType } from '@dxos/schema';
|
|
23
|
+
import { DataType, typenameFromQuery } from '@dxos/schema';
|
|
24
24
|
import { isNonNullable } from '@dxos/util';
|
|
25
25
|
|
|
26
|
-
import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
|
|
27
26
|
import { SpaceCapabilities } from '../../capabilities';
|
|
28
|
-
import {
|
|
27
|
+
import { meta } from '../../meta';
|
|
29
28
|
import { SpaceAction } from '../../types';
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
|
|
31
|
+
|
|
32
|
+
export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
|
|
32
33
|
|
|
33
|
-
export type CreateObjectDialogProps = Pick<
|
|
34
|
+
export type CreateObjectDialogProps = Pick<
|
|
35
|
+
CreateObjectPanelProps,
|
|
36
|
+
'target' | 'views' | 'typename' | 'initialFormValues'
|
|
37
|
+
> & {
|
|
34
38
|
onCreateObject?: (object: Obj.Any) => void;
|
|
35
39
|
shouldNavigate?: (object: Obj.Any) => boolean;
|
|
36
40
|
};
|
|
@@ -38,13 +42,14 @@ export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 't
|
|
|
38
42
|
export const CreateObjectDialog = ({
|
|
39
43
|
target: initialTarget,
|
|
40
44
|
typename: initialTypename,
|
|
41
|
-
|
|
45
|
+
views,
|
|
46
|
+
initialFormValues,
|
|
42
47
|
onCreateObject,
|
|
43
48
|
shouldNavigate: _shouldNavigate,
|
|
44
49
|
}: CreateObjectDialogProps) => {
|
|
45
50
|
const closeRef = useRef<HTMLButtonElement | null>(null);
|
|
46
51
|
const manager = usePluginManager();
|
|
47
|
-
const { t } = useTranslation(
|
|
52
|
+
const { t } = useTranslation(meta.id);
|
|
48
53
|
const client = useClient();
|
|
49
54
|
const spaces = useSpaces();
|
|
50
55
|
const { dispatch } = useIntentDispatcher();
|
|
@@ -53,7 +58,9 @@ export const CreateObjectDialog = ({
|
|
|
53
58
|
const [typename, setTypename] = useState<string | undefined>(initialTypename);
|
|
54
59
|
const space = isSpace(target) ? target : getSpace(target);
|
|
55
60
|
const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
|
|
56
|
-
const hiddenTypenames = queryCollections
|
|
61
|
+
const hiddenTypenames = queryCollections
|
|
62
|
+
.map((collection) => typenameFromQuery(collection.query))
|
|
63
|
+
.filter(isNonNullable);
|
|
57
64
|
|
|
58
65
|
const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
|
|
59
66
|
(typename) =>
|
|
@@ -98,7 +105,9 @@ export const CreateObjectDialog = ({
|
|
|
98
105
|
<Dialog.Content classNames={cardDialogContent}>
|
|
99
106
|
<div role='none' className={cardDialogHeader}>
|
|
100
107
|
<Dialog.Title>
|
|
101
|
-
{t('create object dialog title', {
|
|
108
|
+
{t('create object dialog title', {
|
|
109
|
+
object: t('typename label', { ns: typename, defaultValue: views ? 'View' : 'Item' }),
|
|
110
|
+
})}
|
|
102
111
|
</Dialog.Title>
|
|
103
112
|
<Dialog.Close asChild>
|
|
104
113
|
<Button ref={closeRef} density='fine' variant='ghost' autoFocus>
|
|
@@ -111,8 +120,9 @@ export const CreateObjectDialog = ({
|
|
|
111
120
|
forms={forms}
|
|
112
121
|
spaces={spaces}
|
|
113
122
|
target={target}
|
|
123
|
+
views={views}
|
|
114
124
|
typename={typename}
|
|
115
|
-
|
|
125
|
+
initialFormValues={initialFormValues}
|
|
116
126
|
defaultSpaceId={client.spaces.default.id}
|
|
117
127
|
resolve={resolve}
|
|
118
128
|
onTargetChange={setTarget}
|
|
@@ -2,20 +2,21 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Option } from 'effect';
|
|
5
6
|
import React, { useCallback } from 'react';
|
|
6
7
|
|
|
7
8
|
import { Type } from '@dxos/echo';
|
|
8
|
-
import {
|
|
9
|
-
import { type
|
|
10
|
-
import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
9
|
+
import { type BaseObject, type TypeAnnotation, ViewAnnotation, getTypeAnnotation } from '@dxos/echo-schema';
|
|
10
|
+
import { type Space, type SpaceId } from '@dxos/react-client/echo';
|
|
11
|
+
import { Icon, toLocalizedString, useDefaultValue, useTranslation } from '@dxos/react-ui';
|
|
11
12
|
import { Form } from '@dxos/react-ui-form';
|
|
12
13
|
import { SearchList } from '@dxos/react-ui-searchlist';
|
|
13
14
|
import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
|
|
14
15
|
import { type DataType } from '@dxos/schema';
|
|
15
|
-
import {
|
|
16
|
+
import { type MaybePromise, isNonNullable } from '@dxos/util';
|
|
16
17
|
|
|
17
18
|
import { useInputSurfaceLookup } from '../../hooks';
|
|
18
|
-
import {
|
|
19
|
+
import { meta } from '../../meta';
|
|
19
20
|
import { type ObjectForm } from '../../types';
|
|
20
21
|
import { getSpaceDisplayName } from '../../util';
|
|
21
22
|
|
|
@@ -24,7 +25,8 @@ export type CreateObjectPanelProps = {
|
|
|
24
25
|
spaces: Space[];
|
|
25
26
|
typename?: string;
|
|
26
27
|
target?: Space | DataType.Collection;
|
|
27
|
-
|
|
28
|
+
views?: boolean;
|
|
29
|
+
initialFormValues?: Partial<BaseObject>;
|
|
28
30
|
defaultSpaceId?: SpaceId;
|
|
29
31
|
resolve?: (typename: string) => Record<string, any>;
|
|
30
32
|
onTargetChange?: (target: Space) => void;
|
|
@@ -37,16 +39,25 @@ export const CreateObjectPanel = ({
|
|
|
37
39
|
spaces,
|
|
38
40
|
typename,
|
|
39
41
|
target,
|
|
40
|
-
|
|
42
|
+
views,
|
|
43
|
+
initialFormValues: _initialFormValues,
|
|
41
44
|
defaultSpaceId,
|
|
42
45
|
resolve,
|
|
43
46
|
onTargetChange,
|
|
44
47
|
onTypenameChange,
|
|
45
48
|
onCreateObject,
|
|
46
49
|
}: CreateObjectPanelProps) => {
|
|
47
|
-
const { t } = useTranslation(
|
|
50
|
+
const { t } = useTranslation(meta.id);
|
|
51
|
+
const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
|
|
48
52
|
const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
|
|
49
53
|
const options: TypeAnnotation[] = forms
|
|
54
|
+
.filter((form) => {
|
|
55
|
+
if (views == null) {
|
|
56
|
+
return true;
|
|
57
|
+
} else {
|
|
58
|
+
return views === ViewAnnotation.get(form.objectSchema).pipe(Option.getOrElse(() => false));
|
|
59
|
+
}
|
|
60
|
+
})
|
|
50
61
|
.map((form) => getTypeAnnotation(form.objectSchema))
|
|
51
62
|
.filter(isNonNullable)
|
|
52
63
|
.sort((a, b) => {
|
|
@@ -88,7 +99,7 @@ export const CreateObjectPanel = ({
|
|
|
88
99
|
<div role='none' className={cardDialogOverflow}>
|
|
89
100
|
<Form
|
|
90
101
|
autoFocus
|
|
91
|
-
values={
|
|
102
|
+
values={initialFormValues}
|
|
92
103
|
schema={form.formSchema}
|
|
93
104
|
testId='create-object-form'
|
|
94
105
|
onSave={handleCreateObject}
|
|
@@ -104,7 +115,7 @@ const SelectSpace = ({
|
|
|
104
115
|
defaultSpaceId,
|
|
105
116
|
onChange,
|
|
106
117
|
}: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
|
|
107
|
-
const { t } = useTranslation(
|
|
118
|
+
const { t } = useTranslation(meta.id);
|
|
108
119
|
|
|
109
120
|
return (
|
|
110
121
|
<SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
|
|
@@ -145,7 +156,7 @@ const SelectSchema = ({
|
|
|
145
156
|
options: TypeAnnotation[];
|
|
146
157
|
onChange: (type: string) => void;
|
|
147
158
|
} & Pick<CreateObjectPanelProps, 'resolve'>) => {
|
|
148
|
-
const { t } = useTranslation(
|
|
159
|
+
const { t } = useTranslation(meta.id);
|
|
149
160
|
|
|
150
161
|
return (
|
|
151
162
|
<SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
|