@dxos/plugin-space 0.8.4-main.f9ba587 → 0.8.4-main.fffef41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs +31 -0
- package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs +141 -0
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
- package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs +528 -0
- package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
- package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
- package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
- package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-CKACGS7T.mjs} +714 -571
- package/dist/lib/browser/chunk-CKACGS7T.mjs.map +7 -0
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-KFUMADZF.mjs} +301 -73
- package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-VGKOXAPE.mjs} +87 -12
- package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
- package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
- package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-ZQMSGD5J.mjs} +95 -19
- package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
- package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +148 -59
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-3FNTO3VW.mjs} +236 -68
- package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
- package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-TTHS332A.mjs} +98 -100
- package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
- package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
- package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-45PGPO2V.mjs} +5 -5
- package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-QCND4DVY.mjs} +21 -18
- package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
- package/dist/lib/browser/{state-522XTUR4.mjs → state-Q7YRE5KG.mjs} +7 -7
- package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs +32 -0
- package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs +142 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
- package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs +529 -0
- package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
- package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-6VEONPNZ.mjs} +95 -19
- package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
- package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
- package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-OK2L7N2F.mjs} +301 -73
- package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-QBRPYAEL.mjs} +87 -12
- package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-XGAMJC5C.mjs} +714 -571
- package/dist/lib/node-esm/chunk-XGAMJC5C.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
- package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +148 -59
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-6O5FSB7Z.mjs} +236 -68
- package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-K66W3FMA.mjs} +13 -12
- package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-Y7FTEIDF.mjs} +98 -100
- package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
- package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-6FO65BA6.mjs} +5 -5
- package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-P7CKVXBE.mjs} +21 -18
- package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
- package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-362I5BMK.mjs} +7 -7
- package/dist/lib/node-esm/state-362I5BMK.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 +14 -7
- 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/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CollectionArticle.d.ts +6 -0
- package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
- package/dist/types/src/components/CollectionSection.d.ts +3 -4
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +5 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +7 -5
- 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 → JoinDialog/JoinDialog.d.ts} +1 -1
- package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
- package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
- package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
- package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
- package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
- package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
- 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/BaseObjectSettings.stories.d.ts +1540 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.d.ts +5 -0
- package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
- package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
- package/dist/types/src/components/SchemaContainer.d.ts +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
- package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
- package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
- package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
- package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
- package/dist/types/src/components/ViewEditor.d.ts +7 -0
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +11 -5
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +1 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/helpers/index.d.ts +2 -0
- package/dist/types/src/helpers/index.d.ts.map +1 -0
- package/dist/types/src/helpers/query.d.ts +8 -0
- package/dist/types/src/helpers/query.d.ts.map +1 -0
- package/dist/types/src/helpers/query.test.d.ts +2 -0
- package/dist/types/src/helpers/query.test.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/usePath.d.ts +1 -1
- package/dist/types/src/hooks/usePath.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.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 +1382 -11
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +141 -66
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +40 -10
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +67 -61
- package/src/SpacePlugin.ts +232 -139
- package/src/capabilities/app-graph-builder.ts +335 -88
- package/src/capabilities/app-graph-serializer.ts +12 -12
- package/src/capabilities/capabilities.ts +21 -10
- package/src/capabilities/identity-created.ts +3 -3
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +191 -54
- package/src/capabilities/react-root.tsx +6 -4
- package/src/capabilities/react-surface.tsx +94 -119
- package/src/capabilities/schema-defs.ts +4 -3
- package/src/capabilities/spaces-ready.ts +16 -10
- package/src/capabilities/state.ts +5 -4
- package/src/components/AwaitingObject.tsx +16 -20
- package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +8 -5
- package/src/components/CollectionSection.tsx +8 -6
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
- package/src/components/CreateDialog/CreateObjectDialog.tsx +76 -54
- package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
- package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
- package/src/components/JoinDialog/index.ts +5 -0
- package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
- package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +27 -24
- package/src/components/MembersContainer/index.ts +5 -0
- package/src/components/MenuFooter.tsx +4 -5
- package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
- package/src/components/ObjectDetailsPanel/index.ts +7 -0
- package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +11 -17
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
- package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
- package/src/components/ObjectSettings/index.ts +3 -1
- package/src/components/RecordArticle.stories.tsx +115 -0
- package/src/components/RecordArticle.tsx +114 -0
- package/src/components/SchemaContainer.tsx +25 -28
- package/src/components/SpacePluginSettings.tsx +16 -11
- package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
- package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
- package/src/components/SpacePresence/index.ts +5 -0
- package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
- package/src/components/SpaceRenamePopover/index.ts +5 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +49 -28
- package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
- package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
- package/src/components/SyncStatus/SyncStatus.tsx +110 -13
- package/src/components/SyncStatus/status.ts +4 -4
- package/src/components/ViewEditor.tsx +92 -0
- package/src/components/index.ts +10 -5
- package/src/events.ts +7 -6
- package/src/helpers/index.ts +5 -0
- package/src/helpers/query.test.ts +24 -0
- package/src/helpers/query.ts +158 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useActiveSpace.ts +3 -2
- package/src/hooks/useInputSurfaceLookup.tsx +8 -3
- package/src/hooks/usePath.ts +1 -1
- package/src/hooks/useTypeOptions.ts +59 -0
- package/src/index.ts +1 -0
- package/src/meta.ts +6 -3
- package/src/translations.ts +85 -7
- package/src/types/types.ts +94 -22
- package/src/util.tsx +297 -75
- package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs +0 -363
- package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-UKYMBX4O.mjs.map +0 -7
- package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
- package/dist/lib/browser/chunk-C7KGJTAL.mjs +0 -18
- package/dist/lib/browser/chunk-C7KGJTAL.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-GVTXQCIW.mjs.map +0 -7
- package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
- package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
- package/dist/lib/browser/chunk-XXIPJLJF.mjs +0 -19
- package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
- package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
- package/dist/lib/browser/react-root-7S6FIC5G.mjs +0 -29
- package/dist/lib/browser/react-root-7S6FIC5G.mjs.map +0 -7
- package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-K3B3OAH4.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-K7NSNBHM.mjs.map +0 -7
- package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs +0 -364
- package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-LA3IZDXJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-72QMMRKC.mjs +0 -19
- package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AT7LGFER.mjs +0 -20
- package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-HUK3ANLV.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-4MCDG4DV.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-UM2P3DCR.mjs.map +0 -7
- package/dist/lib/node-esm/state-C4IOXPZP.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/dist/types/src/components/CollectionMain.d.ts +0 -6
- package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
- package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
- package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
- package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
- package/src/capabilities/schema-tool.test.ts +0 -44
- package/src/capabilities/schema-tools.ts +0 -125
- package/src/components/MembersContainer.stories.tsx +0 -30
- package/src/components/PersistenceStatus.tsx +0 -84
package/src/util.tsx
CHANGED
|
@@ -2,42 +2,42 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
5
|
+
import { Atom } from '@effect-atom/atom-react';
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { Obj, Ref, Type } from '@dxos/echo';
|
|
10
|
-
import { EXPANDO_TYPENAME } from '@dxos/echo
|
|
8
|
+
import { LayoutAction, type PromiseIntentDispatcher, chain, createIntent } from '@dxos/app-framework';
|
|
9
|
+
import { Filter, Obj, Query, Ref, Type } from '@dxos/echo';
|
|
10
|
+
import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo/internal';
|
|
11
11
|
import { invariant } from '@dxos/invariant';
|
|
12
12
|
import { Migrations } from '@dxos/migrations';
|
|
13
13
|
import {
|
|
14
14
|
ACTION_GROUP_TYPE,
|
|
15
15
|
ACTION_TYPE,
|
|
16
|
-
type ReadableGraph,
|
|
17
16
|
type ActionData,
|
|
18
17
|
type InvokeParams,
|
|
19
18
|
type Node,
|
|
20
19
|
type NodeArg,
|
|
20
|
+
type ReadableGraph,
|
|
21
21
|
isGraphNode,
|
|
22
22
|
} from '@dxos/plugin-graph';
|
|
23
|
-
import {
|
|
23
|
+
import { type QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/react-client/echo';
|
|
24
24
|
import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
|
|
25
25
|
import { type TreeData } from '@dxos/react-ui-list';
|
|
26
|
-
import {
|
|
26
|
+
import { Collection, StoredSchema, View, getTypenameFromQuery } from '@dxos/schema';
|
|
27
27
|
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
28
|
+
import { meta } from './meta';
|
|
29
|
+
import { type ObjectForm, SPACE_TYPE, SpaceAction } from './types';
|
|
30
30
|
|
|
31
|
-
export const SPACES = `${
|
|
32
|
-
export const COMPOSER_SPACE_LOCK =
|
|
31
|
+
export const SPACES = `${meta.id}-spaces`;
|
|
32
|
+
export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
|
|
33
33
|
// TODO(wittjosiah): Remove.
|
|
34
34
|
export const SHARED = 'shared-spaces';
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* Convert a query result to an
|
|
37
|
+
* Convert a query result to an Atom value of the objects.
|
|
38
38
|
*/
|
|
39
|
-
export const
|
|
40
|
-
return
|
|
39
|
+
export const atomFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Atom.Atom<T[]> => {
|
|
40
|
+
return Atom.make((get) => {
|
|
41
41
|
const unsubscribe = query.subscribe((result) => {
|
|
42
42
|
get.setSelf(result.objects);
|
|
43
43
|
});
|
|
@@ -57,8 +57,8 @@ export const getSpaceDisplayName = (
|
|
|
57
57
|
: namesCache[space.id]
|
|
58
58
|
? namesCache[space.id]
|
|
59
59
|
: personal
|
|
60
|
-
? ['personal space label', { ns:
|
|
61
|
-
: ['unnamed space label', { ns:
|
|
60
|
+
? ['personal space label', { ns: meta.id }]
|
|
61
|
+
: ['unnamed space label', { ns: meta.id }];
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
const getCollectionGraphNodePartials = ({
|
|
@@ -66,7 +66,7 @@ const getCollectionGraphNodePartials = ({
|
|
|
66
66
|
space,
|
|
67
67
|
resolve,
|
|
68
68
|
}: {
|
|
69
|
-
collection:
|
|
69
|
+
collection: Collection.Collection;
|
|
70
70
|
space: Space;
|
|
71
71
|
resolve: (typename: string) => Record<string, any>;
|
|
72
72
|
}) => {
|
|
@@ -141,20 +141,21 @@ const getQueryCollectionNodePartials = ({
|
|
|
141
141
|
space,
|
|
142
142
|
resolve,
|
|
143
143
|
}: {
|
|
144
|
-
collection:
|
|
144
|
+
collection: Collection.QueryCollection;
|
|
145
145
|
space: Space;
|
|
146
146
|
resolve: (typename: string) => Record<string, any>;
|
|
147
147
|
}) => {
|
|
148
|
+
const typename = getTypenameFromQuery(collection.query);
|
|
149
|
+
const metadata = typename ? resolve(typename) : {};
|
|
148
150
|
return {
|
|
149
|
-
icon:
|
|
151
|
+
icon: metadata.icon,
|
|
152
|
+
iconHue: metadata.iconHue,
|
|
150
153
|
acceptPersistenceClass: new Set(['echo']),
|
|
151
154
|
acceptPersistenceKey: new Set([space.id]),
|
|
152
155
|
role: 'branch',
|
|
153
156
|
canDrop: (source: TreeData) => {
|
|
154
157
|
return (
|
|
155
|
-
isGraphNode(source.item) &&
|
|
156
|
-
Obj.isObject(source.item.data) &&
|
|
157
|
-
Obj.getTypename(source.item.data) === collection.query.typename
|
|
158
|
+
isGraphNode(source.item) && Obj.isObject(source.item.data) && Obj.getTypename(source.item.data) === typename
|
|
158
159
|
);
|
|
159
160
|
},
|
|
160
161
|
onTransferStart: (child: Node<Obj.Any>, index?: number) => {
|
|
@@ -166,6 +167,32 @@ const getQueryCollectionNodePartials = ({
|
|
|
166
167
|
};
|
|
167
168
|
};
|
|
168
169
|
|
|
170
|
+
const getSchemaGraphNodePartials = () => {
|
|
171
|
+
return {
|
|
172
|
+
role: 'branch',
|
|
173
|
+
canDrop: () => false,
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
const getViewGraphNodePartials = ({
|
|
178
|
+
view,
|
|
179
|
+
resolve,
|
|
180
|
+
}: {
|
|
181
|
+
view: View.View;
|
|
182
|
+
resolve: (typename: string) => Record<string, any>;
|
|
183
|
+
}) => {
|
|
184
|
+
const presentation = view.presentation.target;
|
|
185
|
+
const typename = presentation ? Obj.getTypename(presentation) : undefined;
|
|
186
|
+
const metadata = typename ? resolve(typename) : {};
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
label: view.name || ['object name placeholder', { ns: typename, default: 'New view' }],
|
|
190
|
+
icon: metadata.icon,
|
|
191
|
+
iconHue: metadata.iconHue,
|
|
192
|
+
canDrop: () => false,
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
|
|
169
196
|
const checkPendingMigration = (space: Space) => {
|
|
170
197
|
return (
|
|
171
198
|
space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
|
|
@@ -190,9 +217,9 @@ export const constructSpaceNode = ({
|
|
|
190
217
|
}) => {
|
|
191
218
|
const hasPendingMigration = checkPendingMigration(space);
|
|
192
219
|
const collection =
|
|
193
|
-
space.state.get() === SpaceState.SPACE_READY && space.properties[
|
|
220
|
+
space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
|
|
194
221
|
const partials =
|
|
195
|
-
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(
|
|
222
|
+
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
|
|
196
223
|
? getCollectionGraphNodePartials({ collection, space, resolve })
|
|
197
224
|
: {};
|
|
198
225
|
|
|
@@ -210,6 +237,7 @@ export const constructSpaceNode = ({
|
|
|
210
237
|
space.state.get() === SpaceState.SPACE_READY && space.properties.icon
|
|
211
238
|
? `ph--${space.properties.icon}--regular`
|
|
212
239
|
: undefined,
|
|
240
|
+
iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
|
|
213
241
|
disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
|
|
214
242
|
testId: 'spacePlugin.space',
|
|
215
243
|
canDrop: (source: TreeData) => {
|
|
@@ -220,40 +248,40 @@ export const constructSpaceNode = ({
|
|
|
220
248
|
nodes: [
|
|
221
249
|
{
|
|
222
250
|
id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
223
|
-
type: `${
|
|
251
|
+
type: `${meta.id}/settings`,
|
|
224
252
|
data: null,
|
|
225
253
|
properties: {
|
|
226
|
-
label: ['settings panel label', { ns:
|
|
254
|
+
label: ['settings panel label', { ns: meta.id }],
|
|
227
255
|
icon: 'ph--faders--regular',
|
|
228
256
|
disposition: 'alternate-tree',
|
|
229
257
|
},
|
|
230
258
|
nodes: [
|
|
231
259
|
{
|
|
232
260
|
id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
233
|
-
type: `${
|
|
234
|
-
data: `${
|
|
261
|
+
type: `${meta.id}/properties`,
|
|
262
|
+
data: `${meta.id}/properties`,
|
|
235
263
|
properties: {
|
|
236
|
-
label: ['space settings properties label', { ns:
|
|
264
|
+
label: ['space settings properties label', { ns: meta.id }],
|
|
237
265
|
icon: 'ph--sliders--regular',
|
|
238
266
|
position: 'hoist',
|
|
239
267
|
},
|
|
240
268
|
},
|
|
241
269
|
{
|
|
242
270
|
id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
243
|
-
type: `${
|
|
244
|
-
data: `${
|
|
271
|
+
type: `${meta.id}/members`,
|
|
272
|
+
data: `${meta.id}/members`,
|
|
245
273
|
properties: {
|
|
246
|
-
label: ['members panel label', { ns:
|
|
274
|
+
label: ['members panel label', { ns: meta.id }],
|
|
247
275
|
icon: 'ph--users--regular',
|
|
248
276
|
position: 'hoist',
|
|
249
277
|
},
|
|
250
278
|
},
|
|
251
279
|
{
|
|
252
280
|
id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
253
|
-
type: `${
|
|
254
|
-
data: `${
|
|
281
|
+
type: `${meta.id}/schema`,
|
|
282
|
+
data: `${meta.id}/schema`,
|
|
255
283
|
properties: {
|
|
256
|
-
label: ['space settings schema label', { ns:
|
|
284
|
+
label: ['space settings schema label', { ns: meta.id }],
|
|
257
285
|
icon: 'ph--shapes--regular',
|
|
258
286
|
},
|
|
259
287
|
},
|
|
@@ -287,7 +315,7 @@ export const constructSpaceActions = ({
|
|
|
287
315
|
await dispatch(createIntent(SpaceAction.Migrate, { space }));
|
|
288
316
|
},
|
|
289
317
|
properties: {
|
|
290
|
-
label: ['migrate space label', { ns:
|
|
318
|
+
label: ['migrate space label', { ns: meta.id }],
|
|
291
319
|
icon: 'ph--database--regular',
|
|
292
320
|
disposition: 'list-item-primary',
|
|
293
321
|
disabled: migrating || Migrations.running(space),
|
|
@@ -304,7 +332,7 @@ export const constructSpaceActions = ({
|
|
|
304
332
|
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
|
|
305
333
|
},
|
|
306
334
|
properties: {
|
|
307
|
-
label: ['create object in space label', { ns:
|
|
335
|
+
label: ['create object in space label', { ns: meta.id }],
|
|
308
336
|
icon: 'ph--plus--regular',
|
|
309
337
|
disposition: 'item',
|
|
310
338
|
testId: 'spacePlugin.createObject',
|
|
@@ -317,7 +345,7 @@ export const constructSpaceActions = ({
|
|
|
317
345
|
await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
|
|
318
346
|
},
|
|
319
347
|
properties: {
|
|
320
|
-
label: ['rename space label', { ns:
|
|
348
|
+
label: ['rename space label', { ns: meta.id }],
|
|
321
349
|
icon: 'ph--pencil-simple-line--regular',
|
|
322
350
|
keyBinding: {
|
|
323
351
|
macos: 'shift+F6',
|
|
@@ -331,48 +359,176 @@ export const constructSpaceActions = ({
|
|
|
331
359
|
return actions;
|
|
332
360
|
};
|
|
333
361
|
|
|
362
|
+
export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
|
|
363
|
+
return {
|
|
364
|
+
id: `${space.id}/${Type.getTypename(schema)}`,
|
|
365
|
+
type: `${meta.id}/static-schema`,
|
|
366
|
+
data: schema,
|
|
367
|
+
properties: {
|
|
368
|
+
label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
|
|
369
|
+
icon: 'ph--database--regular',
|
|
370
|
+
iconHue: 'green',
|
|
371
|
+
role: 'branch',
|
|
372
|
+
selectable: false,
|
|
373
|
+
canDrop: () => false,
|
|
374
|
+
space,
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
export const createStaticSchemaActions = ({
|
|
380
|
+
schema,
|
|
381
|
+
space,
|
|
382
|
+
dispatch,
|
|
383
|
+
deletable,
|
|
384
|
+
}: {
|
|
385
|
+
schema: Type.Obj.Any;
|
|
386
|
+
space: Space;
|
|
387
|
+
dispatch: PromiseIntentDispatcher;
|
|
388
|
+
deletable: boolean;
|
|
389
|
+
}) => {
|
|
390
|
+
const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
|
|
391
|
+
|
|
392
|
+
const actions: NodeArg<ActionData>[] = [
|
|
393
|
+
{
|
|
394
|
+
id: getId(SpaceAction.AddObject._tag),
|
|
395
|
+
type: ACTION_TYPE,
|
|
396
|
+
data: async () => {
|
|
397
|
+
await dispatch(
|
|
398
|
+
createIntent(SpaceAction.OpenCreateObject, {
|
|
399
|
+
target: space,
|
|
400
|
+
views: true,
|
|
401
|
+
initialFormValues: { typename: Type.getTypename(schema) },
|
|
402
|
+
}),
|
|
403
|
+
);
|
|
404
|
+
},
|
|
405
|
+
properties: {
|
|
406
|
+
label: ['add view to schema label', { ns: Type.getTypename(StoredSchema) }],
|
|
407
|
+
icon: 'ph--plus--regular',
|
|
408
|
+
disposition: 'list-item-primary',
|
|
409
|
+
testId: 'spacePlugin.addViewToSchema',
|
|
410
|
+
},
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
id: getId(SpaceAction.RenameObject._tag),
|
|
414
|
+
type: ACTION_TYPE,
|
|
415
|
+
data: async (params?: InvokeParams) => {
|
|
416
|
+
throw new Error('Not implemented');
|
|
417
|
+
},
|
|
418
|
+
properties: {
|
|
419
|
+
label: ['rename object label', { ns: Type.getTypename(StoredSchema) }],
|
|
420
|
+
icon: 'ph--pencil-simple-line--regular',
|
|
421
|
+
disabled: true,
|
|
422
|
+
disposition: 'list-item',
|
|
423
|
+
testId: 'spacePlugin.renameObject',
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
id: getId(SpaceAction.RemoveObjects._tag),
|
|
428
|
+
type: ACTION_TYPE,
|
|
429
|
+
data: async () => {
|
|
430
|
+
const index = space.properties.staticRecords.findIndex(
|
|
431
|
+
(typename: string) => typename === Type.getTypename(schema),
|
|
432
|
+
);
|
|
433
|
+
if (index > -1) {
|
|
434
|
+
space.properties.staticRecords.splice(index, 1);
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
properties: {
|
|
438
|
+
label: ['delete object label', { ns: Type.getTypename(StoredSchema) }],
|
|
439
|
+
icon: 'ph--trash--regular',
|
|
440
|
+
disposition: 'list-item',
|
|
441
|
+
disabled: !deletable,
|
|
442
|
+
testId: 'spacePlugin.deleteObject',
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
id: getId(SpaceAction.Snapshot._tag),
|
|
447
|
+
type: ACTION_TYPE,
|
|
448
|
+
data: async () => {
|
|
449
|
+
const result = await dispatch(
|
|
450
|
+
createIntent(SpaceAction.Snapshot, {
|
|
451
|
+
space,
|
|
452
|
+
query: Query.select(Filter.type(schema)).ast,
|
|
453
|
+
}),
|
|
454
|
+
);
|
|
455
|
+
if (result.data?.snapshot) {
|
|
456
|
+
await downloadBlob(
|
|
457
|
+
result.data.snapshot,
|
|
458
|
+
// TODO(wittjosiah): Factor out file name construction.
|
|
459
|
+
`${new Date().toISOString()}-${space.id}-${Type.getTypename(schema)}.json`,
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
properties: {
|
|
464
|
+
label: ['snapshot by schema label', { ns: meta.id }],
|
|
465
|
+
icon: 'ph--camera--regular',
|
|
466
|
+
disposition: 'list-item',
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
];
|
|
470
|
+
|
|
471
|
+
return actions;
|
|
472
|
+
};
|
|
473
|
+
|
|
334
474
|
export const createObjectNode = ({
|
|
335
475
|
space,
|
|
336
476
|
object,
|
|
477
|
+
disposition,
|
|
337
478
|
droppable = true,
|
|
338
479
|
navigable = false,
|
|
339
480
|
resolve,
|
|
340
481
|
}: {
|
|
341
482
|
space: Space;
|
|
342
483
|
object: Obj.Any;
|
|
484
|
+
disposition?: string;
|
|
343
485
|
droppable?: boolean;
|
|
344
486
|
navigable?: boolean;
|
|
345
487
|
resolve: (typename: string) => Record<string, any>;
|
|
346
488
|
}) => {
|
|
347
489
|
const type = Obj.getTypename(object);
|
|
348
490
|
if (!type) {
|
|
349
|
-
return
|
|
491
|
+
return null;
|
|
350
492
|
}
|
|
351
493
|
|
|
352
494
|
const metadata = resolve(type);
|
|
353
|
-
|
|
354
|
-
return undefined;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
const partials = Obj.instanceOf(DataType.Collection, object)
|
|
495
|
+
const partials = Obj.instanceOf(Collection.Collection, object)
|
|
358
496
|
? getCollectionGraphNodePartials({ collection: object, space, resolve })
|
|
359
|
-
: Obj.instanceOf(
|
|
497
|
+
: Obj.instanceOf(Collection.QueryCollection, object)
|
|
360
498
|
? getQueryCollectionNodePartials({ collection: object, space, resolve })
|
|
361
|
-
:
|
|
499
|
+
: Obj.instanceOf(StoredSchema, object)
|
|
500
|
+
? getSchemaGraphNodePartials()
|
|
501
|
+
: Obj.instanceOf(View.View, object)
|
|
502
|
+
? getViewGraphNodePartials({ view: object, resolve })
|
|
503
|
+
: metadata.graphProps;
|
|
504
|
+
|
|
505
|
+
// TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
|
|
506
|
+
// e.g., create new collection with no name and rename it.
|
|
507
|
+
const label = (object as any).name ||
|
|
508
|
+
Obj.getLabel(object) ||
|
|
509
|
+
// TODO(wittjosiah): Remove metadata labels.
|
|
510
|
+
metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
|
|
511
|
+
|
|
512
|
+
const selectable =
|
|
513
|
+
(!Obj.instanceOf(StoredSchema, object) &&
|
|
514
|
+
!Obj.instanceOf(Collection.QueryCollection, object) &&
|
|
515
|
+
!Obj.instanceOf(Collection.Collection, object)) ||
|
|
516
|
+
(navigable && Obj.instanceOf(Collection.Collection, object));
|
|
362
517
|
|
|
363
518
|
return {
|
|
364
|
-
id:
|
|
519
|
+
id: Obj.getDXN(object).toString(),
|
|
365
520
|
type,
|
|
366
521
|
cacheable: ['label', 'icon', 'role'],
|
|
367
522
|
data: object,
|
|
368
523
|
properties: {
|
|
369
|
-
|
|
370
|
-
label: metadata.label?.(object) ||
|
|
371
|
-
(object as any).name || ['object name placeholder', { ns: type, default: 'New object' }],
|
|
524
|
+
label,
|
|
372
525
|
icon: metadata.icon ?? 'ph--placeholder--regular',
|
|
526
|
+
iconHue: metadata.iconHue,
|
|
527
|
+
disposition,
|
|
373
528
|
testId: 'spacePlugin.object',
|
|
374
529
|
persistenceClass: 'echo',
|
|
375
530
|
persistenceKey: space?.id,
|
|
531
|
+
selectable,
|
|
376
532
|
canDrop: (source: TreeData) => {
|
|
377
533
|
return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
|
|
378
534
|
},
|
|
@@ -386,25 +542,30 @@ export const constructObjectActions = ({
|
|
|
386
542
|
graph,
|
|
387
543
|
dispatch,
|
|
388
544
|
objectForms,
|
|
545
|
+
deletable = true,
|
|
389
546
|
navigable = false,
|
|
390
547
|
}: {
|
|
391
548
|
object: Obj.Any;
|
|
392
549
|
graph: ReadableGraph;
|
|
393
550
|
dispatch: PromiseIntentDispatcher;
|
|
394
551
|
objectForms: ObjectForm<any>[];
|
|
552
|
+
deletable?: boolean;
|
|
395
553
|
navigable?: boolean;
|
|
396
554
|
}) => {
|
|
397
555
|
const space = getSpace(object);
|
|
398
556
|
invariant(space, 'Space not found');
|
|
399
|
-
const
|
|
557
|
+
const typename = Obj.getTypename(object);
|
|
558
|
+
invariant(typename, 'Object has no typename');
|
|
559
|
+
|
|
560
|
+
const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
|
|
400
561
|
|
|
401
|
-
const queryCollection = Obj.instanceOf(
|
|
562
|
+
const queryCollection = Obj.instanceOf(Collection.QueryCollection, object) ? object : undefined;
|
|
402
563
|
const matchingObjectForm = queryCollection
|
|
403
|
-
? objectForms.find((form) => Type.getTypename(form.objectSchema) === queryCollection.query
|
|
564
|
+
? objectForms.find((form) => Type.getTypename(form.objectSchema) === getTypenameFromQuery(queryCollection.query))
|
|
404
565
|
: undefined;
|
|
405
566
|
|
|
406
567
|
const actions: NodeArg<ActionData>[] = [
|
|
407
|
-
...(Obj.instanceOf(
|
|
568
|
+
...(Obj.instanceOf(Collection.Collection, object)
|
|
408
569
|
? [
|
|
409
570
|
{
|
|
410
571
|
id: getId(SpaceAction.OpenCreateObject._tag),
|
|
@@ -413,7 +574,7 @@ export const constructObjectActions = ({
|
|
|
413
574
|
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
|
|
414
575
|
},
|
|
415
576
|
properties: {
|
|
416
|
-
label: ['create object in collection label', { ns:
|
|
577
|
+
label: ['create object in collection label', { ns: meta.id }],
|
|
417
578
|
icon: 'ph--plus--regular',
|
|
418
579
|
disposition: 'list-item-primary',
|
|
419
580
|
testId: 'spacePlugin.createObject',
|
|
@@ -421,6 +582,53 @@ export const constructObjectActions = ({
|
|
|
421
582
|
},
|
|
422
583
|
]
|
|
423
584
|
: []),
|
|
585
|
+
...(Obj.instanceOf(StoredSchema, object)
|
|
586
|
+
? [
|
|
587
|
+
{
|
|
588
|
+
id: getId(SpaceAction.AddObject._tag),
|
|
589
|
+
type: ACTION_TYPE,
|
|
590
|
+
data: async () => {
|
|
591
|
+
await dispatch(
|
|
592
|
+
createIntent(SpaceAction.OpenCreateObject, {
|
|
593
|
+
target: space,
|
|
594
|
+
views: true,
|
|
595
|
+
initialFormValues: { typename: object.typename },
|
|
596
|
+
}),
|
|
597
|
+
);
|
|
598
|
+
},
|
|
599
|
+
properties: {
|
|
600
|
+
label: ['add view to schema label', { ns: Type.getTypename(StoredSchema) }],
|
|
601
|
+
icon: 'ph--plus--regular',
|
|
602
|
+
disposition: 'list-item-primary',
|
|
603
|
+
testId: 'spacePlugin.addViewToSchema',
|
|
604
|
+
},
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
id: getId(SpaceAction.Snapshot._tag),
|
|
608
|
+
type: ACTION_TYPE,
|
|
609
|
+
data: async () => {
|
|
610
|
+
const result = await dispatch(
|
|
611
|
+
createIntent(SpaceAction.Snapshot, {
|
|
612
|
+
space,
|
|
613
|
+
query: Query.select(Filter.type(Type.toEffectSchema(object.jsonSchema))).ast,
|
|
614
|
+
}),
|
|
615
|
+
);
|
|
616
|
+
if (result.data?.snapshot) {
|
|
617
|
+
await downloadBlob(
|
|
618
|
+
result.data.snapshot,
|
|
619
|
+
// TODO(wittjosiah): Factor out file name construction.
|
|
620
|
+
`${new Date().toISOString()}-${space.id}-${object.typename}.json`,
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
properties: {
|
|
625
|
+
label: ['snapshot by schema label', { ns: meta.id }],
|
|
626
|
+
icon: 'ph--camera--regular',
|
|
627
|
+
disposition: 'list-item',
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
]
|
|
631
|
+
: []),
|
|
424
632
|
...(matchingObjectForm
|
|
425
633
|
? [
|
|
426
634
|
{
|
|
@@ -431,12 +639,12 @@ export const constructObjectActions = ({
|
|
|
431
639
|
await dispatch(
|
|
432
640
|
createIntent(SpaceAction.OpenCreateObject, {
|
|
433
641
|
target: space,
|
|
434
|
-
typename: queryCollection
|
|
642
|
+
typename: queryCollection ? getTypenameFromQuery(queryCollection.query) : undefined,
|
|
435
643
|
}),
|
|
436
644
|
);
|
|
437
645
|
} else {
|
|
438
646
|
await dispatch(
|
|
439
|
-
pipe(
|
|
647
|
+
Function.pipe(
|
|
440
648
|
matchingObjectForm.getIntent({}, { space }),
|
|
441
649
|
chain(SpaceAction.AddObject, { target: space, hidden: true }),
|
|
442
650
|
chain(LayoutAction.Open, { part: 'main' }),
|
|
@@ -445,7 +653,7 @@ export const constructObjectActions = ({
|
|
|
445
653
|
}
|
|
446
654
|
},
|
|
447
655
|
properties: {
|
|
448
|
-
label: ['create object in smart collection label', { ns:
|
|
656
|
+
label: ['create object in smart collection label', { ns: meta.id }],
|
|
449
657
|
icon: 'ph--plus--regular',
|
|
450
658
|
disposition: 'list-item-primary',
|
|
451
659
|
testId: 'spacePlugin.createObject',
|
|
@@ -460,10 +668,7 @@ export const constructObjectActions = ({
|
|
|
460
668
|
await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
|
|
461
669
|
},
|
|
462
670
|
properties: {
|
|
463
|
-
label: [
|
|
464
|
-
Obj.instanceOf(DataType.Collection, object) ? 'rename collection label' : 'rename object label',
|
|
465
|
-
{ ns: SPACE_PLUGIN },
|
|
466
|
-
],
|
|
671
|
+
label: ['rename object label', { ns: typename }],
|
|
467
672
|
icon: 'ph--pencil-simple-line--regular',
|
|
468
673
|
disposition: 'list-item',
|
|
469
674
|
// TODO(wittjosiah): Not working.
|
|
@@ -478,33 +683,34 @@ export const constructObjectActions = ({
|
|
|
478
683
|
type: ACTION_TYPE,
|
|
479
684
|
data: async () => {
|
|
480
685
|
const collection = graph
|
|
481
|
-
.getConnections(
|
|
482
|
-
.find(({ data }) => Obj.instanceOf(
|
|
686
|
+
.getConnections(Obj.getDXN(object).toString(), 'inbound')
|
|
687
|
+
.find(({ data }) => Obj.instanceOf(Collection.Collection, data))?.data;
|
|
483
688
|
await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
|
|
484
689
|
},
|
|
485
690
|
properties: {
|
|
486
|
-
label: [
|
|
487
|
-
Obj.instanceOf(DataType.Collection, object) ? 'delete collection label' : 'delete object label',
|
|
488
|
-
{ ns: SPACE_PLUGIN },
|
|
489
|
-
],
|
|
691
|
+
label: ['delete object label', { ns: typename }],
|
|
490
692
|
icon: 'ph--trash--regular',
|
|
491
693
|
disposition: 'list-item',
|
|
694
|
+
disabled: !deletable,
|
|
492
695
|
// TODO(wittjosiah): This is a browser shortcut.
|
|
493
696
|
// keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
|
|
494
697
|
testId: 'spacePlugin.deleteObject',
|
|
495
698
|
},
|
|
496
699
|
},
|
|
497
|
-
...(navigable ||
|
|
700
|
+
...(navigable ||
|
|
701
|
+
(!Obj.instanceOf(Collection.Collection, object) &&
|
|
702
|
+
!Obj.instanceOf(Collection.QueryCollection, object) &&
|
|
703
|
+
!Obj.instanceOf(StoredSchema, object))
|
|
498
704
|
? [
|
|
499
705
|
{
|
|
500
706
|
id: getId('copy-link'),
|
|
501
707
|
type: ACTION_TYPE,
|
|
502
708
|
data: async () => {
|
|
503
|
-
const url = `${window.location.origin}/${space.id}/${
|
|
709
|
+
const url = `${window.location.origin}/${space.id}/${Obj.getDXN(object).toString()}`;
|
|
504
710
|
await navigator.clipboard.writeText(url);
|
|
505
711
|
},
|
|
506
712
|
properties: {
|
|
507
|
-
label: ['copy link label', { ns:
|
|
713
|
+
label: ['copy link label', { ns: meta.id }],
|
|
508
714
|
icon: 'ph--link--regular',
|
|
509
715
|
disposition: 'list-item',
|
|
510
716
|
testId: 'spacePlugin.copyLink',
|
|
@@ -517,10 +723,12 @@ export const constructObjectActions = ({
|
|
|
517
723
|
id: getId(LayoutAction.Expose._tag),
|
|
518
724
|
type: ACTION_TYPE,
|
|
519
725
|
data: async () => {
|
|
520
|
-
await dispatch(
|
|
726
|
+
await dispatch(
|
|
727
|
+
createIntent(LayoutAction.Expose, { part: 'navigation', subject: Obj.getDXN(object).toString() }),
|
|
728
|
+
);
|
|
521
729
|
},
|
|
522
730
|
properties: {
|
|
523
|
-
label: ['expose object label', { ns:
|
|
731
|
+
label: ['expose object label', { ns: meta.id }],
|
|
524
732
|
icon: 'ph--eye--regular',
|
|
525
733
|
disposition: 'heading-list-item',
|
|
526
734
|
testId: 'spacePlugin.exposeObject',
|
|
@@ -531,6 +739,20 @@ export const constructObjectActions = ({
|
|
|
531
739
|
return actions;
|
|
532
740
|
};
|
|
533
741
|
|
|
742
|
+
// TODO(wittjosiah): Factor out.
|
|
743
|
+
const downloadBlob = async (blob: Blob, filename: string) => {
|
|
744
|
+
const url = URL.createObjectURL(blob);
|
|
745
|
+
const a = document.createElement('a');
|
|
746
|
+
a.href = url;
|
|
747
|
+
a.download = filename;
|
|
748
|
+
|
|
749
|
+
document.body.appendChild(a);
|
|
750
|
+
a.click();
|
|
751
|
+
|
|
752
|
+
document.body.removeChild(a);
|
|
753
|
+
URL.revokeObjectURL(url);
|
|
754
|
+
};
|
|
755
|
+
|
|
534
756
|
/**
|
|
535
757
|
* @deprecated This is a temporary solution.
|
|
536
758
|
*/
|
|
@@ -564,7 +786,7 @@ export const cloneObject = async (
|
|
|
564
786
|
newSpace: Space,
|
|
565
787
|
): Promise<Type.Expando> => {
|
|
566
788
|
const schema = Obj.getSchema(object);
|
|
567
|
-
const typename = schema ? Type.getTypename(schema) ?? EXPANDO_TYPENAME : EXPANDO_TYPENAME;
|
|
789
|
+
const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
|
|
568
790
|
const metadata = resolve(typename);
|
|
569
791
|
const serializer = metadata.serializer;
|
|
570
792
|
invariant(serializer, `No serializer for type: ${typename}`);
|