@dxos/plugin-space 0.9.0 → 0.9.1-main.c7dcc2e112
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/neutral/{CollectionArticle-S3OF5KJ7.mjs → CollectionArticle-BMH7SZ7Q.mjs} +9 -12
- package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +7 -0
- package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs → CollectionSection-BLYTGOKH.mjs} +2 -2
- package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs.map → CollectionSection-BLYTGOKH.mjs.map} +3 -3
- package/dist/lib/neutral/{CreateObjectDialog-66R3K6I3.mjs → CreateObjectDialog-4VMOUKM7.mjs} +10 -10
- package/dist/lib/neutral/CreateObjectDialog-4VMOUKM7.mjs.map +7 -0
- package/dist/lib/neutral/{CreateSpaceDialog-CDGSEIJB.mjs → CreateSpaceDialog-WWNUTLVK.mjs} +6 -6
- package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +7 -0
- package/dist/lib/neutral/{ImportSpaceDialog-7GKV4OTF.mjs → ImportSpaceDialog-CSSRTFAO.mjs} +4 -4
- package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +7 -0
- package/dist/lib/neutral/{InlineSyncStatus-TBJKZCH7.mjs → InlineSyncStatus-UOUTAPCU.mjs} +4 -4
- package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +7 -0
- package/dist/lib/neutral/{JoinDialog-SSFKRFTJ.mjs → JoinDialog-QZGNRJ4P.mjs} +16 -9
- package/dist/lib/neutral/JoinDialog-QZGNRJ4P.mjs.map +7 -0
- package/dist/lib/neutral/{MembersContainer-KMCQDWCS.mjs → MembersContainer-OWCAMBKS.mjs} +5 -5
- package/dist/lib/neutral/MembersContainer-OWCAMBKS.mjs.map +7 -0
- package/dist/lib/neutral/{MenuFooter-5JT7V5FZ.mjs → MenuFooter-QCNFUIAO.mjs} +6 -6
- package/dist/lib/neutral/MenuFooter-QCNFUIAO.mjs.map +7 -0
- package/dist/lib/neutral/{ObjectCardStack-IXNU3HEN.mjs → ObjectCardStack-DHVDRNRK.mjs} +4 -4
- package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +7 -0
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +102 -0
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +7 -0
- package/dist/lib/neutral/{RelatedArticle-YDNGUDAJ.mjs → RelatedArticle-YRCRBIYU.mjs} +11 -9
- package/dist/lib/neutral/RelatedArticle-YRCRBIYU.mjs.map +7 -0
- package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs +96 -0
- package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs.map +7 -0
- package/dist/lib/neutral/{SchemaContainer-Q4BP6X2M.mjs → SchemaContainer-2NK5YB5O.mjs} +2 -2
- package/dist/lib/neutral/SchemaContainer-2NK5YB5O.mjs.map +7 -0
- package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs → SmallPresenceLive-L4H7WJOA.mjs} +2 -2
- package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs +78 -0
- package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs.map +7 -0
- package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs +83 -0
- package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs.map +7 -0
- package/dist/lib/neutral/SpacePlugin.mjs +1 -1
- package/dist/lib/neutral/SpacePlugin.node.mjs +4 -4
- package/dist/lib/neutral/SpacePlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs → SpacePresence-PDTEDHDE.mjs} +2 -2
- package/dist/lib/neutral/{SpaceSettings-YAHBOY5T.mjs → SpaceSettings-IVTCSLNT.mjs} +6 -6
- package/dist/lib/neutral/SpaceSettings-IVTCSLNT.mjs.map +7 -0
- package/dist/lib/neutral/{SpaceSettingsContainer-IB34TEOB.mjs → SpaceSettingsContainer-QAFQ4LWC.mjs} +8 -8
- package/dist/lib/neutral/SpaceSettingsContainer-QAFQ4LWC.mjs.map +7 -0
- package/dist/lib/neutral/{SyncStatus-CWOXWDDZ.mjs → SyncStatus-J7CHLO5O.mjs} +3 -3
- package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +7 -0
- package/dist/lib/neutral/{add-object-QYOMCBJA.mjs → add-object-S64XELC3.mjs} +10 -10
- package/dist/lib/neutral/add-object-S64XELC3.mjs.map +7 -0
- package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs → add-relation-GWSE42BU.mjs} +3 -3
- package/dist/lib/neutral/{add-type-CZVKSEIW.mjs → add-type-C3KYE6PI.mjs} +3 -3
- package/dist/lib/neutral/{app-graph-builder-SQGCUCDO.mjs → app-graph-builder-TMAD2ZTH.mjs} +128 -71
- package/dist/lib/neutral/app-graph-builder-TMAD2ZTH.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +13 -15
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/capabilities/node.mjs +2 -2
- package/dist/lib/neutral/{chunk-EEXRKYOD.mjs → chunk-2LTGSUGQ.mjs} +2 -2
- package/dist/lib/neutral/{chunk-EEXRKYOD.mjs.map → chunk-2LTGSUGQ.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-2RPQHHD7.mjs +17 -0
- package/dist/lib/neutral/chunk-2RPQHHD7.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5ZZS3KMK.mjs +46 -0
- package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-K34BPPQE.mjs → chunk-DSYEB2UN.mjs} +29 -17
- package/dist/lib/neutral/chunk-DSYEB2UN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YY62663T.mjs → chunk-F2VJ6VBV.mjs} +3 -3
- package/dist/lib/neutral/chunk-F2VJ6VBV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JHZGRYGS.mjs → chunk-G2KHP7FX.mjs} +2 -2
- package/dist/lib/neutral/{chunk-JHZGRYGS.mjs.map → chunk-G2KHP7FX.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-I5JXVBXX.mjs +8 -0
- package/dist/lib/neutral/{chunk-BBQR23DW.mjs → chunk-LY6XK5MV.mjs} +105 -128
- package/dist/lib/neutral/chunk-LY6XK5MV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7WUJENBF.mjs → chunk-PSCIOT7Q.mjs} +4 -4
- package/dist/lib/neutral/chunk-PSCIOT7Q.mjs.map +7 -0
- package/dist/lib/neutral/{close-FGQN37PK.mjs → close-YZHFYPUN.mjs} +3 -3
- package/dist/lib/neutral/components/index.mjs +7 -7
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +23 -21
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-EPIFSRJA.mjs → create-XKU2W6QC.mjs} +6 -6
- package/dist/lib/neutral/create-XKU2W6QC.mjs.map +7 -0
- package/dist/lib/neutral/{delete-LIA5M3WI.mjs → delete-EFM7CAVO.mjs} +3 -3
- package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs → delete-field-ONAPFFO5.mjs} +3 -3
- package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs → duplicate-object-OJRPFV5I.mjs} +3 -3
- package/dist/lib/neutral/{export-space-VWJHVXWF.mjs → export-space-M5RNVUQX.mjs} +3 -3
- package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs → get-share-link-FUQBJPSQ.mjs} +4 -4
- package/dist/lib/neutral/hooks/index.mjs +16 -4
- package/dist/lib/neutral/hooks/index.mjs.map +3 -3
- package/dist/lib/neutral/{identity-created-57RML5XT.mjs → identity-created-QMV4DANW.mjs} +4 -4
- package/dist/lib/neutral/identity-created-QMV4DANW.mjs.map +7 -0
- package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs → import-space-L3AUIARM.mjs} +3 -3
- package/dist/lib/neutral/index.mjs +12 -6
- package/dist/lib/neutral/{join-Z5K4OAIG.mjs → join-VY3QYBU7.mjs} +4 -4
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{migrate-G7I52UKD.mjs → migrate-WPUISBC4.mjs} +3 -3
- package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs → navigation-handler-IKXZGMII.mjs} +4 -4
- package/dist/lib/neutral/{navigation-resolver-IFVQRCGU.mjs → navigation-resolver-VBPGMFCE.mjs} +7 -7
- package/dist/lib/neutral/navigation-resolver-VBPGMFCE.mjs.map +7 -0
- package/dist/lib/neutral/{open-CPWVZSI4.mjs → open-RRYULTSY.mjs} +3 -3
- package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs → open-create-object-BRUVFZSY.mjs} +4 -4
- package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs → open-create-space-ARLQWW65.mjs} +4 -4
- package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs → open-import-space-65H57JXX.mjs} +4 -4
- package/dist/lib/neutral/{open-members-BEXOSSBS.mjs → open-members-677P6KD3.mjs} +6 -6
- package/dist/lib/neutral/open-members-677P6KD3.mjs.map +7 -0
- package/dist/lib/neutral/{open-settings-RHDBW2K5.mjs → open-settings-PRBSGO6D.mjs} +6 -6
- package/dist/lib/neutral/open-settings-PRBSGO6D.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +3 -3
- package/dist/lib/neutral/plugin.mjs +4 -4
- package/dist/lib/neutral/{react-root-2DJPZQT4.mjs → react-root-YLYRCSAZ.mjs} +2 -2
- package/dist/lib/neutral/{react-root-2DJPZQT4.mjs.map → react-root-YLYRCSAZ.mjs.map} +3 -3
- package/dist/lib/neutral/{react-surface-LYCTOQLY.mjs → react-surface-5EQ6X4CL.mjs} +48 -70
- package/dist/lib/neutral/react-surface-5EQ6X4CL.mjs.map +7 -0
- package/dist/lib/neutral/{remove-objects-OWDMA4IF.mjs → remove-objects-PWJJI36V.mjs} +5 -5
- package/dist/lib/neutral/remove-objects-PWJJI36V.mjs.map +7 -0
- package/dist/lib/neutral/{rename-SR6BBSPU.mjs → rename-4727PKI4.mjs} +8 -7
- package/dist/lib/neutral/rename-4727PKI4.mjs.map +7 -0
- package/dist/lib/neutral/{rename-object-5H6E5AOX.mjs → rename-object-FXUAB5FN.mjs} +8 -7
- package/dist/lib/neutral/rename-object-FXUAB5FN.mjs.map +7 -0
- package/dist/lib/neutral/{repair-PSYRVSJ6.mjs → repair-HMH476U3.mjs} +3 -3
- package/dist/lib/neutral/repair-HMH476U3.mjs.map +7 -0
- package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs → restore-field-3ICSIHGA.mjs} +3 -3
- package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs → restore-objects-V2BTEWN3.mjs} +3 -3
- package/dist/lib/neutral/{settings-Q32EQCHX.mjs → settings-5IBSYBVU.mjs} +3 -3
- package/dist/lib/neutral/{settings-Q32EQCHX.mjs.map → settings-5IBSYBVU.mjs.map} +3 -3
- package/dist/lib/neutral/{share-5Y4NZA75.mjs → share-ZOZPAUGI.mjs} +3 -3
- package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs → snapshot-ZC5PU55W.mjs} +3 -3
- package/dist/lib/neutral/{spaces-ready-GBF72QJH.mjs → spaces-ready-EXPCJD4N.mjs} +11 -11
- package/dist/lib/neutral/spaces-ready-EXPCJD4N.mjs.map +7 -0
- package/dist/lib/neutral/{state-DPBOZRAW.mjs → state-KMH2NUAL.mjs} +2 -2
- package/dist/lib/neutral/state-KMH2NUAL.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +1 -1
- package/dist/lib/neutral/translations.mjs +4 -2
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +9 -3
- package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs → undo-mappings-P43EAUGI.mjs} +5 -5
- package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs.map → undo-mappings-P43EAUGI.mjs.map} +3 -3
- package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs → wait-for-object-WURK2SLQ.mjs} +3 -3
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +12 -0
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +0 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +13 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +10 -54
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/node.d.ts +3 -33
- package/dist/types/src/capabilities/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/commands/database/add.d.ts.map +1 -1
- package/dist/types/src/commands/queue/query.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts +20 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +1 -2
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +1 -1
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +12 -0
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -0
- package/dist/types/src/containers/RenamePopover/index.d.ts +3 -0
- package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +15 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeArticle/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +22 -0
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeRecent/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeRecent/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +20 -0
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +20 -0
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +20 -0
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +3 -2
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/useRelatedObjects.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +28 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-object.d.ts.map +1 -1
- package/dist/types/src/operations/helpers.d.ts.map +1 -1
- package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
- package/dist/types/src/operations/rename-object.d.ts.map +1 -1
- package/dist/types/src/operations/rename.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +20 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/src/types/form.d.ts +7 -1
- package/dist/types/src/types/form.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/surface.d.ts +26 -0
- package/dist/types/src/types/surface.d.ts.map +1 -0
- package/dist/types/src/types/types.d.ts +7 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +35 -0
- package/package.json +51 -50
- package/src/SpacePlugin.test.ts +1 -1
- package/src/SpacePlugin.ts +1 -7
- package/src/capabilities/app-graph-builder/extensions/collections.ts +44 -24
- package/src/capabilities/app-graph-builder/extensions/companions.ts +3 -3
- package/src/capabilities/app-graph-builder/extensions/database.ts +17 -14
- package/src/capabilities/app-graph-builder/extensions/settings.ts +9 -9
- package/src/capabilities/app-graph-builder/extensions/shared.ts +5 -20
- package/src/capabilities/app-graph-builder/extensions/spaces.ts +49 -26
- package/src/capabilities/identity-created.ts +3 -3
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/navigation-resolver.ts +6 -13
- package/src/capabilities/react-root.tsx +1 -1
- package/src/capabilities/react-surface.tsx +58 -88
- package/src/capabilities/repair.ts +4 -2
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/spaces-ready.ts +8 -15
- package/src/capabilities/state.ts +1 -1
- package/src/capabilities/undo-mappings.ts +3 -3
- package/src/commands/database/add.ts +4 -2
- package/src/commands/queue/query.ts +4 -3
- package/src/components/AwaitingObject/AwaitingObject.tsx +1 -1
- package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +2 -2
- package/src/components/ForeignKeys/ForeignKeys.tsx +1 -1
- package/src/components/SpaceSettings/SpaceSettings.tsx +3 -3
- package/src/constants.ts +5 -6
- package/src/containers/CollectionArticle/CollectionArticle.tsx +10 -6
- package/src/containers/CollectionSection/CollectionSection.tsx +1 -1
- package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +10 -7
- package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -5
- package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +3 -3
- package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +3 -3
- package/src/containers/JoinDialog/JoinDialog.tsx +13 -11
- package/src/containers/MembersContainer/MembersContainer.tsx +5 -5
- package/src/containers/MenuFooter/MenuFooter.tsx +3 -3
- package/src/containers/ObjectCardStack/ObjectCardStack.tsx +3 -3
- package/src/containers/RecordArticle/RecordArticle.tsx +67 -8
- package/src/containers/RelatedArticle/RelatedArticle.tsx +17 -13
- package/src/containers/RenamePopover/RenamePopover.tsx +112 -0
- package/src/containers/RenamePopover/index.ts +6 -0
- package/src/containers/SchemaContainer/SchemaContainer.tsx +1 -1
- package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +100 -0
- package/src/containers/SpaceHomeArticle/index.ts +5 -0
- package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +101 -0
- package/src/containers/SpaceHomeRecent/index.ts +5 -0
- package/src/containers/SpacePresence/SpacePresence.tsx +1 -1
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +7 -7
- package/src/containers/SyncStatus/SyncStatus.tsx +2 -2
- package/src/containers/index.ts +3 -2
- package/src/hooks/useInputSurfaceLookup.tsx +3 -2
- package/src/hooks/useRelatedObjects.ts +13 -1
- package/src/meta.ts +2 -27
- package/src/operations/add-object.ts +7 -14
- package/src/operations/create.ts +2 -2
- package/src/operations/definitions.ts +1 -1
- package/src/operations/helpers.ts +1 -1
- package/src/operations/open-members.ts +3 -3
- package/src/operations/open-settings.ts +3 -3
- package/src/operations/remove-objects.ts +3 -2
- package/src/operations/rename-object.ts +3 -2
- package/src/operations/rename.ts +3 -2
- package/src/translations.ts +3 -1
- package/src/types/capabilities.ts +8 -8
- package/src/types/events.ts +5 -5
- package/src/types/form.ts +5 -1
- package/src/types/index.ts +1 -0
- package/src/types/surface.ts +31 -0
- package/src/types/types.ts +9 -1
- package/src/util.ts +3 -3
- package/dist/lib/neutral/CollectionArticle-S3OF5KJ7.mjs.map +0 -7
- package/dist/lib/neutral/CreateObjectDialog-66R3K6I3.mjs.map +0 -7
- package/dist/lib/neutral/CreateSpaceDialog-CDGSEIJB.mjs.map +0 -7
- package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs +0 -59
- package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs.map +0 -7
- package/dist/lib/neutral/ImportSpaceDialog-7GKV4OTF.mjs.map +0 -7
- package/dist/lib/neutral/InlineSyncStatus-TBJKZCH7.mjs.map +0 -7
- package/dist/lib/neutral/JoinDialog-SSFKRFTJ.mjs.map +0 -7
- package/dist/lib/neutral/MembersContainer-KMCQDWCS.mjs.map +0 -7
- package/dist/lib/neutral/MenuFooter-5JT7V5FZ.mjs.map +0 -7
- package/dist/lib/neutral/ObjectCardStack-IXNU3HEN.mjs.map +0 -7
- package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs +0 -51
- package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs.map +0 -7
- package/dist/lib/neutral/RelatedArticle-YDNGUDAJ.mjs.map +0 -7
- package/dist/lib/neutral/SchemaContainer-Q4BP6X2M.mjs.map +0 -7
- package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs +0 -56
- package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettingsContainer-IB34TEOB.mjs.map +0 -7
- package/dist/lib/neutral/SyncStatus-CWOXWDDZ.mjs.map +0 -7
- package/dist/lib/neutral/add-object-QYOMCBJA.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-SQGCUCDO.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs +0 -81
- package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4RTSNTDC.mjs +0 -37
- package/dist/lib/neutral/chunk-4RTSNTDC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7WUJENBF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B7DBIARR.mjs +0 -8
- package/dist/lib/neutral/chunk-BBQR23DW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F5MESIRH.mjs +0 -19
- package/dist/lib/neutral/chunk-F5MESIRH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-K34BPPQE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YY62663T.mjs.map +0 -7
- package/dist/lib/neutral/create-EPIFSRJA.mjs.map +0 -7
- package/dist/lib/neutral/identity-created-57RML5XT.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-IFVQRCGU.mjs.map +0 -7
- package/dist/lib/neutral/open-members-BEXOSSBS.mjs.map +0 -7
- package/dist/lib/neutral/open-settings-RHDBW2K5.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-LYCTOQLY.mjs.map +0 -7
- package/dist/lib/neutral/remove-objects-OWDMA4IF.mjs.map +0 -7
- package/dist/lib/neutral/rename-SR6BBSPU.mjs.map +0 -7
- package/dist/lib/neutral/rename-object-5H6E5AOX.mjs.map +0 -7
- package/dist/lib/neutral/repair-PSYRVSJ6.mjs.map +0 -7
- package/dist/lib/neutral/spaces-ready-GBF72QJH.mjs.map +0 -7
- package/dist/lib/neutral/state-DPBOZRAW.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts +0 -7
- package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts.map +0 -1
- package/dist/types/src/containers/EntityRenamePopover/index.d.ts +0 -2
- package/dist/types/src/containers/EntityRenamePopover/index.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +0 -7
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +0 -2
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +0 -1
- package/src/capabilities/app-graph-serializer.ts +0 -85
- package/src/containers/EntityRenamePopover/EntityRenamePopover.tsx +0 -52
- package/src/containers/EntityRenamePopover/index.ts +0 -5
- package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +0 -54
- package/src/containers/SpaceRenamePopover/index.ts +0 -5
- /package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs.map → SmallPresenceLive-L4H7WJOA.mjs.map} +0 -0
- /package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs.map → SpacePresence-PDTEDHDE.mjs.map} +0 -0
- /package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs.map → add-relation-GWSE42BU.mjs.map} +0 -0
- /package/dist/lib/neutral/{add-type-CZVKSEIW.mjs.map → add-type-C3KYE6PI.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-B7DBIARR.mjs.map → chunk-I5JXVBXX.mjs.map} +0 -0
- /package/dist/lib/neutral/{close-FGQN37PK.mjs.map → close-YZHFYPUN.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-LIA5M3WI.mjs.map → delete-EFM7CAVO.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs.map → delete-field-ONAPFFO5.mjs.map} +0 -0
- /package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs.map → duplicate-object-OJRPFV5I.mjs.map} +0 -0
- /package/dist/lib/neutral/{export-space-VWJHVXWF.mjs.map → export-space-M5RNVUQX.mjs.map} +0 -0
- /package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs.map → get-share-link-FUQBJPSQ.mjs.map} +0 -0
- /package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs.map → import-space-L3AUIARM.mjs.map} +0 -0
- /package/dist/lib/neutral/{join-Z5K4OAIG.mjs.map → join-VY3QYBU7.mjs.map} +0 -0
- /package/dist/lib/neutral/{migrate-G7I52UKD.mjs.map → migrate-WPUISBC4.mjs.map} +0 -0
- /package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs.map → navigation-handler-IKXZGMII.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-CPWVZSI4.mjs.map → open-RRYULTSY.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs.map → open-create-object-BRUVFZSY.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs.map → open-create-space-ARLQWW65.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs.map → open-import-space-65H57JXX.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs.map → restore-field-3ICSIHGA.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs.map → restore-objects-V2BTEWN3.mjs.map} +0 -0
- /package/dist/lib/neutral/{share-5Y4NZA75.mjs.map → share-ZOZPAUGI.mjs.map} +0 -0
- /package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs.map → snapshot-ZC5PU55W.mjs.map} +0 -0
- /package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs.map → wait-for-object-WURK2SLQ.mjs.map} +0 -0
|
@@ -2,17 +2,22 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React from 'react';
|
|
5
|
+
import React, { useMemo } from 'react';
|
|
6
6
|
|
|
7
7
|
import { Surface } from '@dxos/app-framework/ui';
|
|
8
|
-
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
9
|
-
import { Obj, Type } from '@dxos/echo';
|
|
10
|
-
import { Card, Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
|
|
8
|
+
import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
|
|
9
|
+
import { Entity, Obj, Type } from '@dxos/echo';
|
|
10
|
+
import { Card, Icon, IconButton, Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
|
|
11
|
+
import { Masonry } from '@dxos/react-ui-masonry';
|
|
12
|
+
import { Menu } from '@dxos/react-ui-menu';
|
|
13
|
+
import { mx } from '@dxos/ui-theme';
|
|
11
14
|
|
|
15
|
+
import { useRelatedObjects } from '#hooks';
|
|
12
16
|
import { meta } from '#meta';
|
|
17
|
+
import { Prompts } from '#types';
|
|
13
18
|
|
|
14
19
|
export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps) => {
|
|
15
|
-
const { t } = useTranslation(meta.
|
|
20
|
+
const { t } = useTranslation(meta.profile.key);
|
|
16
21
|
// Obj.getType fails for database-registered (dynamic) schemas due to DXN mismatch;
|
|
17
22
|
// fall back to typename query which matches TypeSchema.typename.
|
|
18
23
|
const db = Obj.getDatabase(subject);
|
|
@@ -30,6 +35,9 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
|
|
|
30
35
|
? 'ph--cube--regular'
|
|
31
36
|
: (Obj.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular');
|
|
32
37
|
|
|
38
|
+
const related = useRelatedObjects(db, subject, { references: true, relations: true });
|
|
39
|
+
const singleColumn = related.length === 1;
|
|
40
|
+
|
|
33
41
|
return (
|
|
34
42
|
<Panel.Root role={role}>
|
|
35
43
|
<Panel.Toolbar asChild>
|
|
@@ -40,11 +48,13 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
|
|
|
40
48
|
<ScrollArea.Viewport classNames='p-4 space-y-4'>
|
|
41
49
|
<Card.Root classNames='dx-card-max-width'>
|
|
42
50
|
<Card.Header>
|
|
43
|
-
<Card.
|
|
51
|
+
<Card.Block>
|
|
52
|
+
<Icon icon={icon} />
|
|
53
|
+
</Card.Block>
|
|
44
54
|
<Card.Title>{Obj.getLabel(subject, { fallback: 'typename' })}</Card.Title>
|
|
45
55
|
</Card.Header>
|
|
46
56
|
<Card.Body>
|
|
47
|
-
<Surface.Surface type={AppSurface.
|
|
57
|
+
<Surface.Surface type={AppSurface.CardContent} data={{ subject }} limit={1} />
|
|
48
58
|
</Card.Body>
|
|
49
59
|
</Card.Root>
|
|
50
60
|
|
|
@@ -53,11 +63,60 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
|
|
|
53
63
|
<Input.Root>
|
|
54
64
|
<Input.Label>{t('related-actions.label')}</Input.Label>
|
|
55
65
|
</Input.Root>
|
|
56
|
-
<Surface.Surface
|
|
66
|
+
<Surface.Surface type={Prompts} data={{ subject, attendableId: subject.id }} limit={1} />
|
|
57
67
|
</div>
|
|
68
|
+
|
|
69
|
+
{related.length > 0 && (
|
|
70
|
+
<div
|
|
71
|
+
className={mx('dx-expander flex flex-col gap-form-gap', singleColumn ? 'dx-card-max-width' : 'w-full')}
|
|
72
|
+
>
|
|
73
|
+
<Input.Root>
|
|
74
|
+
<Input.Label>{t('related-objects.label')}</Input.Label>
|
|
75
|
+
</Input.Root>
|
|
76
|
+
<Masonry.Root Tile={ObjectCard} columns={singleColumn ? 1 : undefined}>
|
|
77
|
+
<Masonry.Content>
|
|
78
|
+
<Masonry.Viewport items={related} />
|
|
79
|
+
</Masonry.Content>
|
|
80
|
+
</Masonry.Root>
|
|
81
|
+
</div>
|
|
82
|
+
)}
|
|
58
83
|
</ScrollArea.Viewport>
|
|
59
84
|
</ScrollArea.Root>
|
|
60
85
|
</Panel.Content>
|
|
61
86
|
</Panel.Root>
|
|
62
87
|
);
|
|
63
88
|
};
|
|
89
|
+
|
|
90
|
+
const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {
|
|
91
|
+
const { t } = useTranslation(meta.profile.key);
|
|
92
|
+
const data = useMemo(() => ({ subject }), [subject]);
|
|
93
|
+
const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';
|
|
94
|
+
const menuItems = useObjectMenuItems(subject);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<Menu.Root>
|
|
98
|
+
<Card.Root classNames={classNames}>
|
|
99
|
+
<Card.Header>
|
|
100
|
+
<Card.Block>
|
|
101
|
+
<Icon icon={icon} />
|
|
102
|
+
</Card.Block>
|
|
103
|
+
<Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>
|
|
104
|
+
<Card.Block end>
|
|
105
|
+
<Menu.Trigger asChild disabled={!menuItems?.length}>
|
|
106
|
+
<IconButton
|
|
107
|
+
iconOnly
|
|
108
|
+
variant='ghost'
|
|
109
|
+
icon='ph--dots-three-vertical--regular'
|
|
110
|
+
label={t('more-actions.label')}
|
|
111
|
+
/>
|
|
112
|
+
</Menu.Trigger>
|
|
113
|
+
<Menu.Content items={menuItems} />
|
|
114
|
+
</Card.Block>
|
|
115
|
+
</Card.Header>
|
|
116
|
+
<Card.Body>
|
|
117
|
+
<Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />
|
|
118
|
+
</Card.Body>
|
|
119
|
+
</Card.Root>
|
|
120
|
+
</Menu.Root>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
@@ -7,7 +7,7 @@ import React, { useMemo } from 'react';
|
|
|
7
7
|
import { Surface } from '@dxos/app-framework/ui';
|
|
8
8
|
import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
|
|
9
9
|
import { Entity, Obj } from '@dxos/echo';
|
|
10
|
-
import { Card, Panel, Toolbar, useTranslation } from '@dxos/react-ui';
|
|
10
|
+
import { Card, Icon, IconButton, Panel, Toolbar, useTranslation } from '@dxos/react-ui';
|
|
11
11
|
import { Masonry } from '@dxos/react-ui-masonry';
|
|
12
12
|
import { Menu } from '@dxos/react-ui-menu';
|
|
13
13
|
|
|
@@ -42,7 +42,7 @@ export const RelatedArticle = ({ role, companionTo }: RelatedArticleProps) => {
|
|
|
42
42
|
|
|
43
43
|
/** Masonry tile renderer for a related entity. */
|
|
44
44
|
const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {
|
|
45
|
-
const { t } = useTranslation(meta.
|
|
45
|
+
const { t } = useTranslation(meta.profile.key);
|
|
46
46
|
const data = useMemo(() => ({ subject }), [subject]);
|
|
47
47
|
const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';
|
|
48
48
|
|
|
@@ -53,20 +53,24 @@ const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; class
|
|
|
53
53
|
<Menu.Root>
|
|
54
54
|
<Card.Root classNames={classNames}>
|
|
55
55
|
<Card.Header>
|
|
56
|
-
<Card.
|
|
56
|
+
<Card.Block>
|
|
57
|
+
<Icon icon={icon} />
|
|
58
|
+
</Card.Block>
|
|
57
59
|
<Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
<Card.Block end>
|
|
61
|
+
<Menu.Trigger asChild disabled={!menuItems?.length}>
|
|
62
|
+
<IconButton
|
|
63
|
+
iconOnly
|
|
64
|
+
variant='ghost'
|
|
65
|
+
icon='ph--dots-three-vertical--regular'
|
|
66
|
+
label={t('more-actions.label')}
|
|
67
|
+
/>
|
|
68
|
+
</Menu.Trigger>
|
|
69
|
+
<Menu.Content items={menuItems} />
|
|
70
|
+
</Card.Block>
|
|
67
71
|
</Card.Header>
|
|
68
72
|
<Card.Body>
|
|
69
|
-
<Surface.Surface type={AppSurface.
|
|
73
|
+
<Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />
|
|
70
74
|
</Card.Body>
|
|
71
75
|
</Card.Root>
|
|
72
76
|
</Menu.Root>
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
|
+
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
9
|
+
import { Entity, Obj } from '@dxos/echo';
|
|
10
|
+
import { log } from '@dxos/log';
|
|
11
|
+
import { type Space, isSpace } from '@dxos/react-client/echo';
|
|
12
|
+
import { Input, useTranslation } from '@dxos/react-ui';
|
|
13
|
+
|
|
14
|
+
import { meta } from '#meta';
|
|
15
|
+
|
|
16
|
+
export type RenameSubject = Space | Entity.Unknown;
|
|
17
|
+
|
|
18
|
+
const getName = (subject: RenameSubject): string =>
|
|
19
|
+
(isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? '';
|
|
20
|
+
|
|
21
|
+
const setName = (subject: RenameSubject, name: string): void => {
|
|
22
|
+
if (isSpace(subject)) {
|
|
23
|
+
Obj.update(subject.properties, (properties) => {
|
|
24
|
+
properties.name = name;
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
Entity.update(subject, () => Entity.setLabel(subject, name));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type RenamePopoverProps = { subject: RenameSubject };
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Inline rename popover anchored to a navtree row. Commits on Enter or when dismissed; Escape cancels.
|
|
35
|
+
*/
|
|
36
|
+
export const RenamePopover = ({ subject }: RenamePopoverProps) => {
|
|
37
|
+
const { t } = useTranslation(meta.profile.key);
|
|
38
|
+
const space = isSpace(subject);
|
|
39
|
+
const { invokePromise } = useOperationInvoker();
|
|
40
|
+
const [name, setNameState] = useState(() => getName(subject));
|
|
41
|
+
|
|
42
|
+
// Commit the latest value when the popover is dismissed (Enter, click-outside, or blur), unless cancelled.
|
|
43
|
+
const nameRef = useRef(name);
|
|
44
|
+
nameRef.current = name;
|
|
45
|
+
const initialNameRef = useRef(name);
|
|
46
|
+
const cancelledRef = useRef(false);
|
|
47
|
+
// Enter commits then closes, which unmounts and runs the dismissal cleanup; guard against a duplicate write.
|
|
48
|
+
const committedRef = useRef(false);
|
|
49
|
+
|
|
50
|
+
const write = useCallback(() => {
|
|
51
|
+
try {
|
|
52
|
+
if (!cancelledRef.current && nameRef.current !== initialNameRef.current) {
|
|
53
|
+
setName(subject, nameRef.current);
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
log.error('Failed to rename', { err });
|
|
57
|
+
}
|
|
58
|
+
}, [subject]);
|
|
59
|
+
|
|
60
|
+
const commit = useCallback(() => {
|
|
61
|
+
if (!committedRef.current) {
|
|
62
|
+
committedRef.current = true;
|
|
63
|
+
write();
|
|
64
|
+
}
|
|
65
|
+
}, [write]);
|
|
66
|
+
|
|
67
|
+
// Commit the latest value on dismissal (click-outside/blur) when the component unmounts, unless Enter
|
|
68
|
+
// already committed or Escape cancelled. This must not set committedRef: under StrictMode the mount-time
|
|
69
|
+
// setup/cleanup/setup cycle runs this cleanup before any interaction, and flipping the guard there would
|
|
70
|
+
// suppress the real Enter commit.
|
|
71
|
+
useEffect(
|
|
72
|
+
() => () => {
|
|
73
|
+
if (!committedRef.current) {
|
|
74
|
+
write();
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
[write],
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const close = useCallback(() => {
|
|
81
|
+
void invokePromise(LayoutOperation.UpdatePopover, { anchorId: '', state: false });
|
|
82
|
+
}, [invokePromise]);
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<div className='p-2'>
|
|
86
|
+
<Input.Root>
|
|
87
|
+
<Input.Label srOnly>{t(space ? 'space-name.label' : 'object-name.label')}</Input.Label>
|
|
88
|
+
<Input.TextInput
|
|
89
|
+
autoFocus
|
|
90
|
+
value={name}
|
|
91
|
+
placeholder={t(space ? 'unnamed-space.label' : 'object.placeholder')}
|
|
92
|
+
data-testid='spacePlugin.rename.input'
|
|
93
|
+
onChange={({ target: { value } }) => setNameState(value)}
|
|
94
|
+
onFocus={(event) => event.target.select()}
|
|
95
|
+
onKeyDown={(event) => {
|
|
96
|
+
if (event.key === 'Enter') {
|
|
97
|
+
commit();
|
|
98
|
+
close();
|
|
99
|
+
} else if (event.key === 'Escape') {
|
|
100
|
+
// Own the dismissal so it does not also bubble to the deck popover's escape handler,
|
|
101
|
+
// whose divergent teardown leaves stale state that makes the next open flicker.
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
cancelledRef.current = true;
|
|
105
|
+
close();
|
|
106
|
+
}
|
|
107
|
+
}}
|
|
108
|
+
/>
|
|
109
|
+
</Input.Root>
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
@@ -14,7 +14,7 @@ import { mx } from '@dxos/ui-theme';
|
|
|
14
14
|
import { meta } from '#meta';
|
|
15
15
|
|
|
16
16
|
export const SchemaContainer = ({ space }: AppSurface.SpaceArticleProps) => {
|
|
17
|
-
const { t } = useTranslation(meta.
|
|
17
|
+
const { t } = useTranslation(meta.profile.key);
|
|
18
18
|
const types = useQuerySpaceTypes(space);
|
|
19
19
|
|
|
20
20
|
return (
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
|
+
import { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';
|
|
9
|
+
import { useActionRunner } from '@dxos/plugin-graph';
|
|
10
|
+
import { Column, Panel, ScrollArea } from '@dxos/react-ui';
|
|
11
|
+
import {
|
|
12
|
+
type ActionExecutor,
|
|
13
|
+
type ActionGraphProps,
|
|
14
|
+
Menu,
|
|
15
|
+
MenuBuilder,
|
|
16
|
+
graphActions,
|
|
17
|
+
useMenuBuilder,
|
|
18
|
+
} from '@dxos/react-ui-menu';
|
|
19
|
+
|
|
20
|
+
import { meta } from '#meta';
|
|
21
|
+
import { SpaceHomeContent, SpaceHomePinBottom } from '#types';
|
|
22
|
+
|
|
23
|
+
export type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions
|
|
27
|
+
* contributed with `disposition: 'toolbar'` (e.g. Start tour / Hide Welcome from plugin-support),
|
|
28
|
+
* and a Column layout that delegates its body to surface contributors:
|
|
29
|
+
*
|
|
30
|
+
* - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).
|
|
31
|
+
* - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.
|
|
32
|
+
*
|
|
33
|
+
* The Space is read from `data.subject` (the Home node carries the Space as its data).
|
|
34
|
+
*/
|
|
35
|
+
export const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {
|
|
36
|
+
const { actions, onAction } = useMenuActions(attendableId);
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<Panel.Root role={role}>
|
|
40
|
+
<Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>
|
|
41
|
+
<Panel.Toolbar asChild>
|
|
42
|
+
<Menu.Toolbar />
|
|
43
|
+
</Panel.Toolbar>
|
|
44
|
+
</Menu.Root>
|
|
45
|
+
<Panel.Content asChild>
|
|
46
|
+
<Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>
|
|
47
|
+
<ScrollArea.Root orientation='vertical' centered padding>
|
|
48
|
+
<ScrollArea.Viewport>
|
|
49
|
+
<div className='dx-document flex flex-col gap-4 py-4'>
|
|
50
|
+
<Surface.Surface type={SpaceHomeContent} data={{ space }} />
|
|
51
|
+
</div>
|
|
52
|
+
</ScrollArea.Viewport>
|
|
53
|
+
</ScrollArea.Root>
|
|
54
|
+
<Column.Center classNames='dx-document pb-4'>
|
|
55
|
+
<Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />
|
|
56
|
+
</Column.Center>
|
|
57
|
+
</Column.Root>
|
|
58
|
+
</Panel.Content>
|
|
59
|
+
</Panel.Root>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//
|
|
64
|
+
// Hooks
|
|
65
|
+
//
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Builds the toolbar from contributed graph actions for the Home node. Actions opt into the
|
|
69
|
+
* toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar
|
|
70
|
+
* is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.
|
|
71
|
+
*/
|
|
72
|
+
const useMenuActions = (
|
|
73
|
+
attendableId?: string,
|
|
74
|
+
): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {
|
|
75
|
+
const { graph } = useAppGraph();
|
|
76
|
+
const runAction = useActionRunner();
|
|
77
|
+
|
|
78
|
+
const menuActions = useMenuBuilder(
|
|
79
|
+
(get): ActionGraphProps => {
|
|
80
|
+
if (!attendableId) {
|
|
81
|
+
return MenuBuilder.make().build();
|
|
82
|
+
}
|
|
83
|
+
return MenuBuilder.make()
|
|
84
|
+
.subgraph(
|
|
85
|
+
graphActions(graph, get, attendableId, { filter: (action) => action.properties.disposition === 'toolbar' }),
|
|
86
|
+
)
|
|
87
|
+
.build();
|
|
88
|
+
},
|
|
89
|
+
[graph, attendableId],
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const onAction: ActionExecutor = useCallback(
|
|
93
|
+
(action) => {
|
|
94
|
+
void runAction(action, { caller: meta.profile.key });
|
|
95
|
+
},
|
|
96
|
+
[runAction],
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
return { actions: menuActions, onAction };
|
|
100
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
|
+
import React, { useCallback, useMemo } from 'react';
|
|
7
|
+
|
|
8
|
+
import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
|
|
9
|
+
import { AppCapabilities, LayoutOperation, Paths } from '@dxos/app-toolkit';
|
|
10
|
+
import { Collection, Filter, Obj, Order, Query, Type } from '@dxos/echo';
|
|
11
|
+
import { HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/Annotation';
|
|
12
|
+
import { Kind as EntityKind } from '@dxos/echo/Entity';
|
|
13
|
+
import { type Space, useQuery } from '@dxos/react-client/echo';
|
|
14
|
+
import { Card, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
15
|
+
import { Masonry } from '@dxos/react-ui-masonry';
|
|
16
|
+
import { getStyles } from '@dxos/ui-theme';
|
|
17
|
+
|
|
18
|
+
import { meta } from '#meta';
|
|
19
|
+
|
|
20
|
+
/** Number of recently-modified objects to surface as cards. */
|
|
21
|
+
const RECENT_LIMIT = 10;
|
|
22
|
+
|
|
23
|
+
type SpaceScopedProps = {
|
|
24
|
+
space?: Space;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Recent-objects region for the Home article. Queries the most-recently-modified objects of
|
|
29
|
+
* registered, non-hidden, non-relation, non-collection types and renders them as a Masonry of
|
|
30
|
+
* tiles. Renders nothing (no heading) when the space has no recent objects — the starter-prompt
|
|
31
|
+
* contributor (plugin-assistant) fills the empty state instead.
|
|
32
|
+
*/
|
|
33
|
+
export const SpaceHomeRecent = ({ space }: SpaceScopedProps) => {
|
|
34
|
+
const { t } = useTranslation(meta.profile.key);
|
|
35
|
+
|
|
36
|
+
const schemas = useCapabilities(AppCapabilities.Schema);
|
|
37
|
+
const filter = useMemo(() => {
|
|
38
|
+
const collectionTypename = Type.getTypename(Collection.Collection);
|
|
39
|
+
const types = schemas
|
|
40
|
+
.flat()
|
|
41
|
+
.filter(Type.isType)
|
|
42
|
+
.filter((type) => getTypeAnnotation(Type.getSchema(type))?.kind !== EntityKind.Relation)
|
|
43
|
+
.filter((type) => !HiddenAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false)))
|
|
44
|
+
.filter((type) => Type.getTypename(type) !== collectionTypename);
|
|
45
|
+
return types.length > 0 ? Filter.or(...types.map((type) => Filter.type(type))) : undefined;
|
|
46
|
+
}, [schemas]);
|
|
47
|
+
|
|
48
|
+
const query = useMemo(
|
|
49
|
+
() =>
|
|
50
|
+
Query.select(filter ?? Filter.everything())
|
|
51
|
+
.orderBy(Order.updated('desc'))
|
|
52
|
+
.limit(RECENT_LIMIT),
|
|
53
|
+
[filter],
|
|
54
|
+
);
|
|
55
|
+
const recent = useQuery(filter && space ? space.db : undefined, query);
|
|
56
|
+
|
|
57
|
+
if (recent.length === 0) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<>
|
|
63
|
+
<h2 className='text-sm font-medium text-description'>{t('space-home.recent.heading')}</h2>
|
|
64
|
+
<Masonry.Root Tile={RecentObjectTile}>
|
|
65
|
+
<Masonry.Content padding={false}>
|
|
66
|
+
<Masonry.Viewport classNames='py-2' items={recent} getId={(object) => object.id} />
|
|
67
|
+
</Masonry.Content>
|
|
68
|
+
</Masonry.Root>
|
|
69
|
+
</>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const RecentObjectTile = ({ data }: { data: Obj.Unknown; index: number }) => {
|
|
74
|
+
const { invokePromise } = useOperationInvoker();
|
|
75
|
+
const { t } = useTranslation(meta.profile.key);
|
|
76
|
+
const typename = Obj.getTypename(data);
|
|
77
|
+
const label = toLocalizedString(
|
|
78
|
+
Obj.getLabel(data) ?? (typename ? ['object-name.placeholder', { ns: typename, defaultValue: 'New item' }] : ''),
|
|
79
|
+
t,
|
|
80
|
+
);
|
|
81
|
+
const iconAnnotation = Obj.getIcon(data);
|
|
82
|
+
const icon = iconAnnotation?.icon ?? 'ph--circle-dashed--regular';
|
|
83
|
+
const iconStyles = iconAnnotation?.hue ? getStyles(iconAnnotation.hue) : undefined;
|
|
84
|
+
|
|
85
|
+
const handleClick = useCallback(() => {
|
|
86
|
+
void invokePromise(LayoutOperation.Open, { subject: [Paths.getObjectPathFromObject(data)] });
|
|
87
|
+
}, [invokePromise, data]);
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<Card.Root role='button' classNames='cursor-pointer' onClick={handleClick}>
|
|
91
|
+
<Card.Header>
|
|
92
|
+
<Card.Block>
|
|
93
|
+
<Icon icon={icon} classNames={iconStyles?.text} />
|
|
94
|
+
</Card.Block>
|
|
95
|
+
<Card.Title>{label}</Card.Title>
|
|
96
|
+
</Card.Header>
|
|
97
|
+
</Card.Root>
|
|
98
|
+
);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
RecentObjectTile.displayName = 'RecentObjectTile';
|
|
@@ -246,7 +246,7 @@ export type SmallPresenceProps = {
|
|
|
246
246
|
} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
|
|
247
247
|
|
|
248
248
|
export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
|
|
249
|
-
const { t } = useTranslation(meta.
|
|
249
|
+
const { t } = useTranslation(meta.profile.key);
|
|
250
250
|
|
|
251
251
|
return (
|
|
252
252
|
<Tooltip.Trigger asChild content={t('presence.label', { count })} side='bottom'>
|
|
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
|
|
9
|
-
import {
|
|
9
|
+
import { AppSpace, Paths, LayoutOperation } from '@dxos/app-toolkit';
|
|
10
10
|
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
11
11
|
import { Obj } from '@dxos/echo';
|
|
12
12
|
import { log } from '@dxos/log';
|
|
@@ -25,7 +25,7 @@ const SpaceFormSchema = SpaceForm;
|
|
|
25
25
|
|
|
26
26
|
// TODO(wittjosiah): Handle space migrations here?
|
|
27
27
|
export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps) => {
|
|
28
|
-
const { t } = useTranslation(meta.
|
|
28
|
+
const { t } = useTranslation(meta.profile.key);
|
|
29
29
|
const { invokePromise } = useOperationInvoker();
|
|
30
30
|
const client = useClient();
|
|
31
31
|
const [edgeReplication, setEdgeReplication] = useState(
|
|
@@ -78,7 +78,7 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
|
|
|
78
78
|
[space.properties.name, space.properties.icon, space.properties.hue, edgeReplication],
|
|
79
79
|
);
|
|
80
80
|
|
|
81
|
-
const personal = isPersonalSpace(space);
|
|
81
|
+
const personal = AppSpace.isPersonalSpace(space);
|
|
82
82
|
|
|
83
83
|
const fieldMap = useMemo<FormFieldMap>(
|
|
84
84
|
() => ({
|
|
@@ -146,7 +146,7 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
|
|
|
146
146
|
|
|
147
147
|
const repairs = useCapabilities(SpaceCapabilities.Repair);
|
|
148
148
|
const handleRepair = useCallback(async () => {
|
|
149
|
-
await Promise.all(repairs.map((repair) => repair({ space, isDefault: isPersonalSpace(space) })));
|
|
149
|
+
await Promise.all(repairs.map((repair) => repair({ space, isDefault: AppSpace.isPersonalSpace(space) })));
|
|
150
150
|
}, [space, repairs]);
|
|
151
151
|
|
|
152
152
|
const [deleteConfirmOpen, setDeleteConfirmOpen] = useState(false);
|
|
@@ -155,9 +155,9 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
|
|
|
155
155
|
try {
|
|
156
156
|
await invokePromise(SpaceOperation.Delete, { space });
|
|
157
157
|
setDeleteConfirmOpen(false);
|
|
158
|
-
const personalSpace = getPersonalSpace(client);
|
|
158
|
+
const personalSpace = AppSpace.getPersonalSpace(client);
|
|
159
159
|
if (personalSpace) {
|
|
160
|
-
void invokePromise(LayoutOperation.SwitchWorkspace, { subject: getSpacePath(personalSpace.id) });
|
|
160
|
+
void invokePromise(LayoutOperation.SwitchWorkspace, { subject: Paths.getSpacePath(personalSpace.id) });
|
|
161
161
|
}
|
|
162
162
|
} catch (err) {
|
|
163
163
|
log.catch(err, { stage: 'delete: invocation rejected', spaceId: space.id });
|
|
@@ -174,7 +174,7 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
|
|
|
174
174
|
<Settings.Viewport>
|
|
175
175
|
<Settings.Section
|
|
176
176
|
title={t('space-properties-settings-verbose.label')}
|
|
177
|
-
description={t('space-properties-settings.description', { ns: meta.
|
|
177
|
+
description={t('space-properties-settings.description', { ns: meta.profile.key })}
|
|
178
178
|
>
|
|
179
179
|
<Form.Root
|
|
180
180
|
key={space.id}
|
|
@@ -30,7 +30,7 @@ export const SyncStatus = () => {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: boolean }) => {
|
|
33
|
-
const { t } = useTranslation(meta.
|
|
33
|
+
const { t } = useTranslation(meta.profile.key);
|
|
34
34
|
const summary = getSyncSummary(state);
|
|
35
35
|
const offline = Object.values(state).length === 0;
|
|
36
36
|
const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
|
|
@@ -79,7 +79,7 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
|
|
|
79
79
|
};
|
|
80
80
|
|
|
81
81
|
const EdgeConnectionPopover = () => {
|
|
82
|
-
const { t } = useTranslation(meta.
|
|
82
|
+
const { t } = useTranslation(meta.profile.key);
|
|
83
83
|
const client = useClient();
|
|
84
84
|
const { status } = useStream(
|
|
85
85
|
() => client.services.services.EdgeAgentService!.queryEdgeStatus(),
|
package/src/containers/index.ts
CHANGED
|
@@ -17,13 +17,14 @@ export const MembersContainer: ComponentType<any> = lazy(() => import('./Members
|
|
|
17
17
|
export const MenuFooter: ComponentType<any> = lazy(() => import('./MenuFooter'));
|
|
18
18
|
export const ObjectCardStack: ComponentType<any> = lazy(() => import('./ObjectCardStack'));
|
|
19
19
|
export const ObjectProperties: ComponentType<any> = lazy(() => import('./ObjectProperties'));
|
|
20
|
-
export const EntityRenamePopover: ComponentType<any> = lazy(() => import('./EntityRenamePopover'));
|
|
21
20
|
export const RecordArticle: ComponentType<any> = lazy(() => import('./RecordArticle'));
|
|
22
21
|
export const RelatedArticle: ComponentType<any> = lazy(() => import('./RelatedArticle'));
|
|
22
|
+
export const RenamePopover: ComponentType<any> = lazy(() => import('./RenamePopover'));
|
|
23
23
|
export const SchemaContainer: ComponentType<any> = lazy(() => import('./SchemaContainer'));
|
|
24
24
|
export const SmallPresenceLive: ComponentType<any> = lazy(() => import('./SmallPresenceLive'));
|
|
25
25
|
export const SpacePresence: ComponentType<any> = lazy(() => import('./SpacePresence'));
|
|
26
|
-
export const
|
|
26
|
+
export const SpaceHomeArticle: ComponentType<any> = lazy(() => import('./SpaceHomeArticle'));
|
|
27
|
+
export const SpaceHomeRecent: ComponentType<any> = lazy(() => import('./SpaceHomeRecent'));
|
|
27
28
|
export const SpaceSettingsContainer: ComponentType<any> = lazy(() => import('./SpaceSettingsContainer'));
|
|
28
29
|
export const SyncStatus: ComponentType<any> = lazy(() => import('./SyncStatus'));
|
|
29
30
|
export const ViewEditor: ComponentType<any> = lazy(() => import('./ViewEditor'));
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
7
|
import { Surface, usePluginManager } from '@dxos/app-framework/ui';
|
|
8
|
+
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
8
9
|
import { type FormFieldProvider } from '@dxos/react-ui-form';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -25,8 +26,8 @@ export const useInputSurfaceLookup = (baseData?: Record<string, any>): FormField
|
|
|
25
26
|
...baseData,
|
|
26
27
|
};
|
|
27
28
|
const { type: _fieldPropertyAstExcluded, ...surfaceFieldProps } = fieldProps as Record<string, any>;
|
|
28
|
-
if (Surface.isAvailable(pluginManager.capabilities, {
|
|
29
|
-
return <Surface.Surface
|
|
29
|
+
if (Surface.isAvailable(pluginManager.capabilities, { type: AppSurface.FormInput, data })) {
|
|
30
|
+
return <Surface.Surface type={AppSurface.FormInput} data={data} {...surfaceFieldProps} />;
|
|
30
31
|
}
|
|
31
32
|
},
|
|
32
33
|
[pluginManager, baseData],
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
5
6
|
import { useMemo } from 'react';
|
|
6
7
|
|
|
7
|
-
import { type Database, Entity, Filter, Obj, Ref, Relation } from '@dxos/echo';
|
|
8
|
+
import { type Database, Entity, Filter, Obj, Ref, Relation, Type } from '@dxos/echo';
|
|
9
|
+
import { HiddenAnnotation } from '@dxos/echo/Annotation';
|
|
8
10
|
import { useQuery } from '@dxos/react-client/echo';
|
|
9
11
|
import { isNonNullable } from '@dxos/util';
|
|
10
12
|
|
|
@@ -74,6 +76,16 @@ export const useRelatedObjects = (
|
|
|
74
76
|
// TODO(burdon): Configure.
|
|
75
77
|
.filter((obj) => Entity.getTypename(obj) !== 'org.dxos.type.text')
|
|
76
78
|
.filter((obj) => Entity.getTypename(obj) !== 'org.dxos.type.assistant.chat')
|
|
79
|
+
.filter((obj) => {
|
|
80
|
+
if (!Obj.isObject(obj)) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
const typeEntity = Obj.getType(obj);
|
|
84
|
+
if (!typeEntity) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return !HiddenAnnotation.get(Type.getSchema(typeEntity)).pipe(Option.getOrElse(() => false));
|
|
88
|
+
})
|
|
77
89
|
);
|
|
78
90
|
}, [subject, objects, options.references, options.relations]);
|
|
79
91
|
};
|