Package not found. Please check the package name and try again.
@dxos/plugin-space 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae
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-WASDM637.mjs +142 -0
- package/dist/lib/browser/CollectionArticle-WASDM637.mjs.map +7 -0
- package/dist/lib/browser/CollectionSection-LK4O6QDD.mjs +23 -0
- package/dist/lib/browser/CollectionSection-LK4O6QDD.mjs.map +7 -0
- package/dist/lib/browser/CreateObjectDialog-MA6DPYMD.mjs +146 -0
- package/dist/lib/browser/CreateObjectDialog-MA6DPYMD.mjs.map +7 -0
- package/dist/lib/browser/CreateSpaceDialog-WCEICWIE.mjs +64 -0
- package/dist/lib/browser/CreateSpaceDialog-WCEICWIE.mjs.map +7 -0
- package/dist/lib/browser/InlineSyncStatus-BT7BRBCO.mjs +62 -0
- package/dist/lib/browser/InlineSyncStatus-BT7BRBCO.mjs.map +7 -0
- package/dist/lib/browser/JoinDialog-PMCAIRCU.mjs +117 -0
- package/dist/lib/browser/JoinDialog-PMCAIRCU.mjs.map +7 -0
- package/dist/lib/browser/MembersContainer-MMFCXLVZ.mjs +257 -0
- package/dist/lib/browser/MembersContainer-MMFCXLVZ.mjs.map +7 -0
- package/dist/lib/browser/MenuFooter-HYBTNOBT.mjs +38 -0
- package/dist/lib/browser/MenuFooter-HYBTNOBT.mjs.map +7 -0
- package/dist/lib/browser/ObjectCardStack-CHWNLUYQ.mjs +64 -0
- package/dist/lib/browser/ObjectCardStack-CHWNLUYQ.mjs.map +7 -0
- package/dist/lib/browser/ObjectDetails-YUGVDNSA.mjs +43 -0
- package/dist/lib/browser/ObjectDetails-YUGVDNSA.mjs.map +7 -0
- package/dist/lib/browser/ObjectRenamePopover-RQUOVPFH.mjs +70 -0
- package/dist/lib/browser/ObjectRenamePopover-RQUOVPFH.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-ONWKYM3Z.mjs +112 -0
- package/dist/lib/browser/RecordArticle-ONWKYM3Z.mjs.map +7 -0
- package/dist/lib/browser/SchemaContainer-62AJXKAF.mjs +49 -0
- package/dist/lib/browser/SchemaContainer-62AJXKAF.mjs.map +7 -0
- package/dist/lib/browser/SmallPresenceLive-LZD2NGKK.mjs +10 -0
- package/dist/lib/browser/SmallPresenceLive-LZD2NGKK.mjs.map +7 -0
- package/dist/lib/browser/SpacePluginSettings-BRJTADV5.mjs +59 -0
- package/dist/lib/browser/SpacePluginSettings-BRJTADV5.mjs.map +7 -0
- package/dist/lib/browser/SpacePresence-MLU576L6.mjs +13 -0
- package/dist/lib/browser/SpacePresence-MLU576L6.mjs.map +7 -0
- package/dist/lib/browser/SpaceRenamePopover-SAKMPDLX.mjs +62 -0
- package/dist/lib/browser/SpaceRenamePopover-SAKMPDLX.mjs.map +7 -0
- package/dist/lib/browser/SpaceSettingsContainer-UBMVKUPR.mjs +242 -0
- package/dist/lib/browser/SpaceSettingsContainer-UBMVKUPR.mjs.map +7 -0
- package/dist/lib/browser/SyncStatus-5UQ7CIII.mjs +141 -0
- package/dist/lib/browser/SyncStatus-5UQ7CIII.mjs.map +7 -0
- package/dist/lib/browser/ViewEditor-F74RR542.mjs +116 -0
- package/dist/lib/browser/ViewEditor-F74RR542.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs +593 -0
- package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs.map +7 -0
- package/dist/lib/browser/app-graph-serializer-KTQOBYUF.mjs +85 -0
- package/dist/lib/browser/app-graph-serializer-KTQOBYUF.mjs.map +7 -0
- package/dist/lib/browser/chunk-ABCDB5YC.mjs +177 -0
- package/dist/lib/browser/chunk-ABCDB5YC.mjs.map +7 -0
- package/dist/lib/browser/chunk-ASV6DYFH.mjs +19 -0
- package/dist/lib/browser/chunk-ASV6DYFH.mjs.map +7 -0
- package/dist/lib/browser/chunk-HSMQFM57.mjs +16 -0
- package/dist/lib/browser/chunk-HSMQFM57.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5F4LUJD.mjs +13 -0
- package/dist/lib/browser/chunk-J5F4LUJD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YZJWWMNB.mjs → chunk-PXVKN4LU.mjs} +69 -62
- package/dist/lib/browser/chunk-PXVKN4LU.mjs.map +7 -0
- package/dist/lib/browser/chunk-RWOK4F4G.mjs +576 -0
- package/dist/lib/browser/chunk-RWOK4F4G.mjs.map +7 -0
- package/dist/lib/browser/chunk-SJCNERZI.mjs +115 -0
- package/dist/lib/browser/chunk-SJCNERZI.mjs.map +7 -0
- package/dist/lib/browser/chunk-TPZUQ5DC.mjs +749 -0
- package/dist/lib/browser/chunk-TPZUQ5DC.mjs.map +7 -0
- package/dist/lib/browser/chunk-USN5QKRV.mjs +715 -0
- package/dist/lib/browser/chunk-USN5QKRV.mjs.map +7 -0
- package/dist/lib/browser/chunk-XIIYC7P5.mjs +118 -0
- package/dist/lib/browser/chunk-XIIYC7P5.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +852 -0
- package/dist/lib/browser/cli/index.mjs.map +7 -0
- package/dist/lib/browser/identity-created-VKLIZOXJ.mjs +23 -0
- package/dist/lib/browser/identity-created-VKLIZOXJ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +241 -283
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-Y3HYRXX7.mjs +831 -0
- package/dist/lib/browser/operation-resolver-Y3HYRXX7.mjs.map +7 -0
- package/dist/lib/browser/react-root-UYBW5RE7.mjs +30 -0
- package/dist/lib/browser/react-root-UYBW5RE7.mjs.map +7 -0
- package/dist/lib/browser/react-surface-NJ23NZFF.mjs +386 -0
- package/dist/lib/browser/react-surface-NJ23NZFF.mjs.map +7 -0
- package/dist/lib/browser/repair-N2I4DR2Z.mjs +50 -0
- package/dist/lib/browser/repair-N2I4DR2Z.mjs.map +7 -0
- package/dist/lib/browser/settings-2ELVUFDR.mjs +34 -0
- package/dist/lib/browser/settings-2ELVUFDR.mjs.map +7 -0
- package/dist/lib/browser/spaces-ready-Q6JASPT4.mjs +243 -0
- package/dist/lib/browser/spaces-ready-Q6JASPT4.mjs.map +7 -0
- package/dist/lib/browser/state-CTX4WQOM.mjs +58 -0
- package/dist/lib/browser/state-CTX4WQOM.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +18 -10
- package/dist/lib/node-esm/CollectionArticle-A6GGG73Z.mjs +143 -0
- package/dist/lib/node-esm/CollectionArticle-A6GGG73Z.mjs.map +7 -0
- package/dist/lib/node-esm/CollectionSection-WWKDOAAT.mjs +24 -0
- package/dist/lib/node-esm/CollectionSection-WWKDOAAT.mjs.map +7 -0
- package/dist/lib/node-esm/CreateObjectDialog-4WEFNDDF.mjs +147 -0
- package/dist/lib/node-esm/CreateObjectDialog-4WEFNDDF.mjs.map +7 -0
- package/dist/lib/node-esm/CreateSpaceDialog-P7QCPB5J.mjs +65 -0
- package/dist/lib/node-esm/CreateSpaceDialog-P7QCPB5J.mjs.map +7 -0
- package/dist/lib/node-esm/InlineSyncStatus-3PCXU7NX.mjs +63 -0
- package/dist/lib/node-esm/InlineSyncStatus-3PCXU7NX.mjs.map +7 -0
- package/dist/lib/node-esm/JoinDialog-XEOLJZVN.mjs +118 -0
- package/dist/lib/node-esm/JoinDialog-XEOLJZVN.mjs.map +7 -0
- package/dist/lib/node-esm/MembersContainer-UQZLW3YA.mjs +258 -0
- package/dist/lib/node-esm/MembersContainer-UQZLW3YA.mjs.map +7 -0
- package/dist/lib/node-esm/MenuFooter-2QB3453Y.mjs +39 -0
- package/dist/lib/node-esm/MenuFooter-2QB3453Y.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectCardStack-UXEWG6RV.mjs +65 -0
- package/dist/lib/node-esm/ObjectCardStack-UXEWG6RV.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectDetails-26PVHUQL.mjs +44 -0
- package/dist/lib/node-esm/ObjectDetails-26PVHUQL.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectRenamePopover-EHTP76G7.mjs +71 -0
- package/dist/lib/node-esm/ObjectRenamePopover-EHTP76G7.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-APY2WKUW.mjs +113 -0
- package/dist/lib/node-esm/RecordArticle-APY2WKUW.mjs.map +7 -0
- package/dist/lib/node-esm/SchemaContainer-XR2D6MYX.mjs +50 -0
- package/dist/lib/node-esm/SchemaContainer-XR2D6MYX.mjs.map +7 -0
- package/dist/lib/node-esm/SmallPresenceLive-K4243KXR.mjs +11 -0
- package/dist/lib/node-esm/SmallPresenceLive-K4243KXR.mjs.map +7 -0
- package/dist/lib/node-esm/SpacePluginSettings-VEB5IGG7.mjs +60 -0
- package/dist/lib/node-esm/SpacePluginSettings-VEB5IGG7.mjs.map +7 -0
- package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs +14 -0
- package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs.map +7 -0
- package/dist/lib/node-esm/SpaceRenamePopover-WHM632OT.mjs +63 -0
- package/dist/lib/node-esm/SpaceRenamePopover-WHM632OT.mjs.map +7 -0
- package/dist/lib/node-esm/SpaceSettingsContainer-Y62J2L65.mjs +243 -0
- package/dist/lib/node-esm/SpaceSettingsContainer-Y62J2L65.mjs.map +7 -0
- package/dist/lib/node-esm/SyncStatus-XTJAVHPN.mjs +142 -0
- package/dist/lib/node-esm/SyncStatus-XTJAVHPN.mjs.map +7 -0
- package/dist/lib/node-esm/ViewEditor-B2BLYF5U.mjs +117 -0
- package/dist/lib/node-esm/ViewEditor-B2BLYF5U.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs +594 -0
- package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-serializer-GXQYSQAZ.mjs +86 -0
- package/dist/lib/node-esm/app-graph-serializer-GXQYSQAZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3DWZCVVQ.mjs +716 -0
- package/dist/lib/node-esm/chunk-3DWZCVVQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CVXULIYC.mjs +20 -0
- package/dist/lib/node-esm/chunk-CVXULIYC.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GWUPFA7J.mjs +577 -0
- package/dist/lib/node-esm/chunk-GWUPFA7J.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-IV7VKVGC.mjs +117 -0
- package/dist/lib/node-esm/chunk-IV7VKVGC.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-OSFH2XKO.mjs +119 -0
- package/dist/lib/node-esm/chunk-OSFH2XKO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7UIEPBQJ.mjs → chunk-P2AVANDG.mjs} +69 -62
- package/dist/lib/node-esm/chunk-P2AVANDG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-S2IELCDF.mjs +15 -0
- package/dist/lib/node-esm/chunk-S2IELCDF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SL4BJSUG.mjs +18 -0
- package/dist/lib/node-esm/chunk-SL4BJSUG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-UJQUBDQS.mjs +178 -0
- package/dist/lib/node-esm/chunk-UJQUBDQS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WW6YYBRG.mjs +750 -0
- package/dist/lib/node-esm/chunk-WW6YYBRG.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +853 -0
- package/dist/lib/node-esm/cli/index.mjs.map +7 -0
- package/dist/lib/node-esm/identity-created-EGSTETJ5.mjs +25 -0
- package/dist/lib/node-esm/identity-created-EGSTETJ5.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +241 -283
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-IRQ2NVUQ.mjs +832 -0
- package/dist/lib/node-esm/operation-resolver-IRQ2NVUQ.mjs.map +7 -0
- package/dist/lib/node-esm/react-root-UEN3LLJD.mjs +31 -0
- package/dist/lib/node-esm/react-root-UEN3LLJD.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-UDO3PGH6.mjs +387 -0
- package/dist/lib/node-esm/react-surface-UDO3PGH6.mjs.map +7 -0
- package/dist/lib/node-esm/repair-P6ND7ZRU.mjs +51 -0
- package/dist/lib/node-esm/repair-P6ND7ZRU.mjs.map +7 -0
- package/dist/lib/node-esm/settings-DCTVM2BV.mjs +35 -0
- package/dist/lib/node-esm/settings-DCTVM2BV.mjs.map +7 -0
- package/dist/lib/node-esm/spaces-ready-XLGRTJV2.mjs +244 -0
- package/dist/lib/node-esm/spaces-ready-XLGRTJV2.mjs.map +7 -0
- package/dist/lib/node-esm/state-G74V3WZG.mjs +59 -0
- package/dist/lib/node-esm/state-G74V3WZG.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +18 -10
- package/dist/types/src/SpacePlugin.d.ts +3 -15
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +7 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
- package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/identity-created/identity-created.d.ts +5 -0
- package/dist/types/src/capabilities/identity-created/identity-created.d.ts.map +1 -0
- package/dist/types/src/capabilities/identity-created/index.d.ts +3 -0
- package/dist/types/src/capabilities/identity-created/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +10 -20
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +6 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +9 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
- package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +8 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/repair/index.d.ts +3 -0
- package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
- package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +7 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +10 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready/index.d.ts +3 -0
- package/dist/types/src/capabilities/spaces-ready/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts +5 -0
- package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/index.d.ts +13 -0
- package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/state.d.ts +17 -0
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/add.d.ts +17 -0
- package/dist/types/src/cli/commands/database/add.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/index.d.ts +3 -0
- package/dist/types/src/cli/commands/database/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/query/index.d.ts +2 -0
- package/dist/types/src/cli/commands/database/query/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/query/query.d.ts +13 -0
- package/dist/types/src/cli/commands/database/query/query.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/query/query.test.d.ts +2 -0
- package/dist/types/src/cli/commands/database/query/query.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/remove.d.ts +9 -0
- package/dist/types/src/cli/commands/database/remove.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/stats.d.ts +6 -0
- package/dist/types/src/cli/commands/database/stats.d.ts.map +1 -0
- package/dist/types/src/cli/commands/database/util.d.ts +14 -0
- package/dist/types/src/cli/commands/database/util.d.ts.map +1 -0
- package/dist/types/src/cli/commands/index.d.ts +4 -0
- package/dist/types/src/cli/commands/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/queue/index.d.ts +7 -0
- package/dist/types/src/cli/commands/queue/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/queue/query.d.ts +8 -0
- package/dist/types/src/cli/commands/queue/query.d.ts.map +1 -0
- package/dist/types/src/cli/commands/queue/util.d.ts +6 -0
- package/dist/types/src/cli/commands/queue/util.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/close/close.d.ts +12 -0
- package/dist/types/src/cli/commands/space/close/close.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/close/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/close/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/create/create.d.ts +12 -0
- package/dist/types/src/cli/commands/space/create/create.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/create/create.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/create/create.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/create/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/create/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/index.d.ts +31 -0
- package/dist/types/src/cli/commands/space/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/info/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/info/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/info/info.d.ts +13 -0
- package/dist/types/src/cli/commands/space/info/info.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/info/info.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/info/info.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/join/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/join/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/join/join.d.ts +14 -0
- package/dist/types/src/cli/commands/space/join/join.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/join/util.d.ts +17 -0
- package/dist/types/src/cli/commands/space/join/util.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/list/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/list/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/list/list.d.ts +7 -0
- package/dist/types/src/cli/commands/space/list/list.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/list/list.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/list/list.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/members/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/members/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/members/members.d.ts +13 -0
- package/dist/types/src/cli/commands/space/members/members.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/members/members.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/members/members.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/members/util.d.ts +9 -0
- package/dist/types/src/cli/commands/space/members/util.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/open/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/open/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/open/open.d.ts +12 -0
- package/dist/types/src/cli/commands/space/open/open.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/schema/index.d.ts +8 -0
- package/dist/types/src/cli/commands/space/schema/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/schema/list/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/schema/list/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/schema/list/list.d.ts +15 -0
- package/dist/types/src/cli/commands/space/schema/list/list.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/schema/list/util.d.ts +15 -0
- package/dist/types/src/cli/commands/space/schema/list/util.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/share/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/share/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/share/share.d.ts +19 -0
- package/dist/types/src/cli/commands/space/share/share.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/sync/index.d.ts +2 -0
- package/dist/types/src/cli/commands/space/sync/index.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/sync/sync.d.ts +6 -0
- package/dist/types/src/cli/commands/space/sync/sync.d.ts.map +1 -0
- package/dist/types/src/cli/commands/space/sync/sync.test.d.ts +2 -0
- package/dist/types/src/cli/commands/space/sync/sync.test.d.ts.map +1 -0
- package/dist/types/src/cli/index.d.ts +2 -0
- package/dist/types/src/cli/index.d.ts.map +1 -0
- package/dist/types/src/cli/plugin.d.ts +4 -0
- package/dist/types/src/cli/plugin.d.ts.map +1 -0
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +27 -11
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/index.d.ts +1 -2
- package/dist/types/src/components/CreateDialog/index.d.ts.map +1 -1
- package/dist/types/src/components/{ObjectSettings → ObjectDetails}/BaseObjectSettings.d.ts +3 -3
- package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/{MembersContainer.stories.d.ts → ObjectDetails/BaseObjectSettings.stories.d.ts} +230 -384
- package/dist/types/src/components/{MembersContainer.stories.d.ts.map → ObjectDetails/BaseObjectSettings.stories.d.ts.map} +1 -1
- package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts +8 -0
- package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetails/index.d.ts +3 -0
- package/dist/types/src/components/ObjectDetails/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +9 -0
- package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
- package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
- package/dist/types/src/components/SyncStatus/index.d.ts +2 -2
- package/dist/types/src/components/SyncStatus/index.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -26
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +6 -0
- package/dist/types/src/constants.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts +9 -0
- package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionArticle/index.d.ts +3 -0
- package/dist/types/src/containers/CollectionArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts +5 -0
- package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionSection/index.d.ts +3 -0
- package/dist/types/src/containers/CollectionSection/index.d.ts.map +1 -0
- package/dist/types/src/{components/CreateDialog → containers/CreateObjectDialog}/CreateObjectDialog.d.ts +5 -4
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -0
- package/dist/types/src/containers/CreateObjectDialog/index.d.ts +3 -0
- package/dist/types/src/containers/CreateObjectDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -0
- package/dist/types/src/containers/CreateSpaceDialog/index.d.ts +3 -0
- package/dist/types/src/containers/CreateSpaceDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts.map +1 -0
- package/dist/types/src/containers/InlineSyncStatus/index.d.ts +3 -0
- package/dist/types/src/containers/InlineSyncStatus/index.d.ts.map +1 -0
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -0
- package/dist/types/src/containers/JoinDialog/index.d.ts +3 -0
- package/dist/types/src/containers/JoinDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/containers/MembersContainer/index.d.ts +3 -0
- package/dist/types/src/containers/MembersContainer/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/MenuFooter}/MenuFooter.d.ts +1 -1
- package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts.map +1 -0
- package/dist/types/src/containers/MenuFooter/index.d.ts +3 -0
- package/dist/types/src/containers/MenuFooter/index.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts +11 -0
- package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectCardStack/index.d.ts +3 -0
- package/dist/types/src/containers/ObjectCardStack/index.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts +9 -0
- package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectDetails/index.d.ts +3 -0
- package/dist/types/src/containers/ObjectDetails/index.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
- package/dist/types/src/containers/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectRenamePopover/index.d.ts +3 -0
- package/dist/types/src/containers/ObjectRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts +4 -0
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -0
- package/dist/types/src/containers/RecordArticle/index.d.ts +3 -0
- package/dist/types/src/containers/RecordArticle/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/SchemaContainer}/SchemaContainer.d.ts +2 -2
- package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -0
- package/dist/types/src/containers/SchemaContainer/index.d.ts +3 -0
- package/dist/types/src/containers/SchemaContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/SmallPresenceLive/index.d.ts +2 -0
- package/dist/types/src/containers/SmallPresenceLive/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpacePluginSettings/SpacePluginSettings.d.ts +8 -0
- package/dist/types/src/containers/SpacePluginSettings/SpacePluginSettings.d.ts.map +1 -0
- package/dist/types/src/containers/SpacePluginSettings/index.d.ts +3 -0
- package/dist/types/src/containers/SpacePluginSettings/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/SpacePresence}/SpacePresence.d.ts +7 -6
- package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -0
- package/dist/types/src/{components → containers/SpacePresence}/SpacePresence.stories.d.ts +227 -214
- package/dist/types/src/{components → containers/SpacePresence}/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpacePresence/index.d.ts +3 -0
- package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +3 -0
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.d.ts +10 -0
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.d.ts.map +1 -0
- package/dist/types/src/{components/SpaceSettings → containers/SpaceSettingsContainer}/SpaceSettingsContainer.stories.d.ts +231 -215
- package/dist/types/src/{components/SpaceSettings → containers/SpaceSettingsContainer}/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettingsContainer/index.d.ts +3 -0
- package/dist/types/src/containers/SpaceSettingsContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/SyncStatus/SyncStatus.stories.d.ts +228 -215
- package/dist/types/src/{components → containers}/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SyncStatus/index.d.ts +3 -0
- package/dist/types/src/containers/SyncStatus/index.d.ts.map +1 -0
- package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts +7 -0
- package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts.map +1 -0
- package/dist/types/src/containers/ViewEditor/index.d.ts +3 -0
- package/dist/types/src/containers/ViewEditor/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +23 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- 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 +7 -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 +2 -2
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +2 -8
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/usePath.d.ts +2 -2
- 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 +3 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +227 -214
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +71 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/events.d.ts +9 -0
- package/dist/types/src/types/events.d.ts.map +1 -0
- package/dist/types/src/types/form.d.ts +22 -0
- package/dist/types/src/types/form.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +594 -396
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +122 -90
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +84 -61
- package/src/SpacePlugin.ts +191 -235
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +675 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +83 -0
- package/src/capabilities/app-graph-serializer/index.ts +7 -0
- package/src/capabilities/identity-created/identity-created.ts +29 -0
- package/src/capabilities/identity-created/index.ts +7 -0
- package/src/capabilities/index.ts +10 -14
- package/src/capabilities/operation-resolver/index.ts +7 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +771 -0
- package/src/capabilities/react-root/index.ts +7 -0
- package/src/capabilities/react-root/react-root.tsx +25 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +380 -0
- package/src/capabilities/repair/index.ts +7 -0
- package/src/capabilities/repair/repair.ts +71 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +33 -0
- package/src/capabilities/spaces-ready/index.ts +7 -0
- package/src/capabilities/spaces-ready/spaces-ready.ts +290 -0
- package/src/capabilities/state/index.ts +7 -0
- package/src/capabilities/state/state.ts +64 -0
- package/src/cli/commands/database/add.ts +115 -0
- package/src/cli/commands/database/index.ts +16 -0
- package/src/cli/commands/database/query/index.ts +5 -0
- package/src/cli/commands/database/query/query.test.ts +55 -0
- package/src/cli/commands/database/query/query.ts +44 -0
- package/src/cli/commands/database/remove.ts +51 -0
- package/src/cli/commands/database/stats.ts +44 -0
- package/src/cli/commands/database/util.ts +32 -0
- package/src/cli/commands/index.ts +7 -0
- package/src/cli/commands/queue/index.ts +12 -0
- package/src/cli/commands/queue/query.ts +45 -0
- package/src/cli/commands/queue/util.ts +19 -0
- package/src/cli/commands/space/close/close.ts +40 -0
- package/src/cli/commands/space/close/index.ts +5 -0
- package/src/cli/commands/space/create/create.test.ts +67 -0
- package/src/cli/commands/space/create/create.ts +61 -0
- package/src/cli/commands/space/create/index.ts +5 -0
- package/src/cli/commands/space/index.ts +21 -0
- package/src/cli/commands/space/info/index.ts +5 -0
- package/src/cli/commands/space/info/info.test.ts +47 -0
- package/src/cli/commands/space/info/info.ts +37 -0
- package/src/cli/commands/space/join/index.ts +5 -0
- package/src/cli/commands/space/join/join.ts +122 -0
- package/src/cli/commands/space/join/util.ts +82 -0
- package/src/cli/commands/space/list/index.ts +5 -0
- package/src/cli/commands/space/list/list.test.ts +36 -0
- package/src/cli/commands/space/list/list.ts +30 -0
- package/src/cli/commands/space/members/index.ts +5 -0
- package/src/cli/commands/space/members/members.test.ts +46 -0
- package/src/cli/commands/space/members/members.ts +40 -0
- package/src/cli/commands/space/members/util.ts +29 -0
- package/src/cli/commands/space/open/index.ts +5 -0
- package/src/cli/commands/space/open/open.ts +39 -0
- package/src/cli/commands/space/schema/index.ts +12 -0
- package/src/cli/commands/space/schema/list/index.ts +5 -0
- package/src/cli/commands/space/schema/list/list.test.ts +42 -0
- package/src/cli/commands/space/schema/list/list.ts +64 -0
- package/src/cli/commands/space/schema/list/util.ts +39 -0
- package/src/cli/commands/space/share/index.ts +5 -0
- package/src/cli/commands/space/share/share.ts +112 -0
- package/src/cli/commands/space/sync/index.ts +5 -0
- package/src/cli/commands/space/sync/sync.test.ts +12 -0
- package/src/cli/commands/space/sync/sync.ts +33 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/plugin.ts +89 -0
- package/src/components/AwaitingObject.tsx +22 -20
- package/src/components/CreateDialog/CreateObjectPanel.tsx +152 -114
- package/src/components/CreateDialog/index.ts +1 -2
- package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectDetails/BaseObjectSettings.tsx +122 -0
- package/src/components/{ObjectSettings → ObjectDetails}/ForeignKeys.tsx +5 -5
- package/src/components/ObjectDetails/index.ts +6 -0
- package/src/components/ObjectForm/ObjectForm.tsx +97 -0
- package/src/components/ObjectForm/index.ts +5 -0
- package/src/components/SyncStatus/index.ts +2 -2
- package/src/components/SyncStatus/save-tracker.ts +2 -2
- package/src/components/index.ts +2 -19
- package/src/constants.ts +11 -0
- package/src/containers/CollectionArticle/CollectionArticle.tsx +180 -0
- package/src/containers/CollectionArticle/index.ts +7 -0
- package/src/containers/CollectionSection/CollectionSection.tsx +22 -0
- package/src/containers/CollectionSection/index.ts +7 -0
- package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +164 -0
- package/src/containers/CreateObjectDialog/index.ts +7 -0
- package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +70 -0
- package/src/containers/CreateSpaceDialog/index.ts +7 -0
- package/src/{components/SyncStatus → containers/InlineSyncStatus}/InlineSyncStatus.tsx +6 -6
- package/src/containers/InlineSyncStatus/index.ts +7 -0
- package/src/{components → containers/JoinDialog}/JoinDialog.tsx +27 -37
- package/src/containers/JoinDialog/index.ts +7 -0
- package/src/{components → containers/MembersContainer}/MembersContainer.tsx +86 -89
- package/src/containers/MembersContainer/index.ts +7 -0
- package/src/{components → containers/MenuFooter}/MenuFooter.tsx +6 -6
- package/src/containers/MenuFooter/index.ts +7 -0
- package/src/containers/ObjectCardStack/ObjectCardStack.tsx +82 -0
- package/src/containers/ObjectCardStack/index.ts +7 -0
- package/src/containers/ObjectDetails/ObjectDetails.tsx +36 -0
- package/src/containers/ObjectDetails/index.ts +7 -0
- package/src/{components/PopoverRenameObject.tsx → containers/ObjectRenamePopover/ObjectRenamePopover.tsx} +11 -15
- package/src/containers/ObjectRenamePopover/index.ts +7 -0
- package/src/containers/RecordArticle/RecordArticle.tsx +124 -0
- package/src/containers/RecordArticle/index.ts +7 -0
- package/src/containers/SchemaContainer/SchemaContainer.tsx +60 -0
- package/src/containers/SchemaContainer/index.ts +7 -0
- package/src/containers/SmallPresenceLive/index.ts +5 -0
- package/src/containers/SpacePluginSettings/SpacePluginSettings.tsx +65 -0
- package/src/containers/SpacePluginSettings/index.ts +7 -0
- package/src/{components → containers/SpacePresence}/SpacePresence.stories.tsx +3 -3
- package/src/{components → containers/SpacePresence}/SpacePresence.tsx +26 -22
- package/src/containers/SpacePresence/index.ts +7 -0
- package/src/{components/PopoverRenameSpace.tsx → containers/SpaceRenamePopover/SpaceRenamePopover.tsx} +15 -15
- package/src/containers/SpaceRenamePopover/index.ts +7 -0
- package/src/{components/SpaceSettings → containers/SpaceSettingsContainer}/SpaceSettingsContainer.stories.tsx +7 -7
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +202 -0
- package/src/containers/SpaceSettingsContainer/index.ts +7 -0
- package/src/{components → containers}/SyncStatus/SyncStatus.stories.tsx +4 -3
- package/src/containers/SyncStatus/SyncStatus.tsx +153 -0
- package/src/containers/SyncStatus/index.ts +7 -0
- package/src/containers/ViewEditor/ViewEditor.tsx +103 -0
- package/src/containers/ViewEditor/index.ts +7 -0
- package/src/containers/index.ts +28 -0
- package/src/helpers/index.ts +5 -0
- package/src/helpers/query.test.ts +24 -0
- package/src/helpers/query.ts +166 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useActiveSpace.ts +8 -4
- package/src/hooks/useInputSurfaceLookup.tsx +9 -13
- package/src/hooks/usePath.ts +4 -4
- package/src/hooks/useTypeOptions.ts +25 -0
- package/src/index.ts +4 -3
- package/src/meta.ts +7 -2
- package/src/translations.ts +69 -58
- package/src/types/capabilities.ts +73 -0
- package/src/types/events.ts +16 -0
- package/src/types/form.ts +69 -0
- package/src/types/index.ts +3 -0
- package/src/types/types.ts +539 -256
- package/src/util.tsx +707 -476
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs +0 -31
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs +0 -90
- package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs.map +0 -7
- package/dist/lib/browser/RecordMain-FHPCS6GM.mjs +0 -68
- package/dist/lib/browser/RecordMain-FHPCS6GM.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-Y2LBZX2G.mjs +0 -520
- package/dist/lib/browser/app-graph-builder-Y2LBZX2G.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-425OVRTW.mjs +0 -80
- package/dist/lib/browser/app-graph-serializer-425OVRTW.mjs.map +0 -7
- package/dist/lib/browser/chunk-6KVKMOGQ.mjs +0 -1975
- package/dist/lib/browser/chunk-6KVKMOGQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-CVZAZRW4.mjs +0 -94
- package/dist/lib/browser/chunk-CVZAZRW4.mjs.map +0 -7
- package/dist/lib/browser/chunk-EIXZABXD.mjs +0 -19
- package/dist/lib/browser/chunk-EIXZABXD.mjs.map +0 -7
- package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
- package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
- package/dist/lib/browser/chunk-OYHC63NL.mjs +0 -344
- package/dist/lib/browser/chunk-OYHC63NL.mjs.map +0 -7
- package/dist/lib/browser/chunk-PUF3B7XO.mjs +0 -20
- package/dist/lib/browser/chunk-PUF3B7XO.mjs.map +0 -7
- package/dist/lib/browser/chunk-X6COEDOD.mjs +0 -704
- package/dist/lib/browser/chunk-X6COEDOD.mjs.map +0 -7
- package/dist/lib/browser/chunk-YZJWWMNB.mjs.map +0 -7
- package/dist/lib/browser/identity-created-PW2BA46S.mjs +0 -23
- package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-2TBYHOBA.mjs +0 -765
- package/dist/lib/browser/intent-resolver-2TBYHOBA.mjs.map +0 -7
- package/dist/lib/browser/react-root-KMJXJ5VX.mjs +0 -29
- package/dist/lib/browser/react-root-KMJXJ5VX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YAJUAMER.mjs +0 -385
- package/dist/lib/browser/react-surface-YAJUAMER.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-2OCPV7JF.mjs +0 -26
- package/dist/lib/browser/schema-defs-2OCPV7JF.mjs.map +0 -7
- package/dist/lib/browser/settings-UYYJ225A.mjs +0 -24
- package/dist/lib/browser/settings-UYYJ225A.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-YNZPWXA3.mjs +0 -201
- package/dist/lib/browser/spaces-ready-YNZPWXA3.mjs.map +0 -7
- package/dist/lib/browser/state-BPU73TYO.mjs +0 -47
- package/dist/lib/browser/state-BPU73TYO.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs +0 -32
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs +0 -91
- package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs.map +0 -7
- package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs +0 -70
- package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-DMNLDT7E.mjs +0 -521
- package/dist/lib/node-esm/app-graph-builder-DMNLDT7E.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-ZEDSY77N.mjs +0 -81
- package/dist/lib/node-esm/app-graph-serializer-ZEDSY77N.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-36TAYXV7.mjs +0 -21
- package/dist/lib/node-esm/chunk-36TAYXV7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7UIEPBQJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ADEZJQE3.mjs +0 -345
- package/dist/lib/node-esm/chunk-ADEZJQE3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FLRC6XWU.mjs +0 -96
- package/dist/lib/node-esm/chunk-FLRC6XWU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-L26ZIGHA.mjs +0 -1976
- package/dist/lib/node-esm/chunk-L26ZIGHA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +0 -20
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZFCCFELA.mjs +0 -705
- package/dist/lib/node-esm/chunk-ZFCCFELA.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs +0 -25
- package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-YOG27WOG.mjs +0 -766
- package/dist/lib/node-esm/intent-resolver-YOG27WOG.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-27QMJZD2.mjs +0 -30
- package/dist/lib/node-esm/react-root-27QMJZD2.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-RC73GAN5.mjs +0 -386
- package/dist/lib/node-esm/react-surface-RC73GAN5.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs +0 -27
- package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs.map +0 -7
- package/dist/lib/node-esm/settings-Q736OQRP.mjs +0 -25
- package/dist/lib/node-esm/settings-Q736OQRP.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-XZQD7Q65.mjs +0 -202
- package/dist/lib/node-esm/spaces-ready-XZQD7Q65.mjs.map +0 -7
- package/dist/lib/node-esm/state-BY75TM32.mjs +0 -48
- package/dist/lib/node-esm/state-BY75TM32.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -28
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/identity-created.d.ts +0 -4
- package/dist/types/src/capabilities/identity-created.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -9
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -7
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -7
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
- package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts +0 -4
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -5
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/components/CollectionMain.d.ts +0 -7
- package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
- package/dist/types/src/components/CollectionSection.d.ts +0 -6
- package/dist/types/src/components/CollectionSection.d.ts.map +0 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +0 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +0 -1590
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.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/MenuFooter.d.ts.map +0 -1
- package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
- package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +0 -7
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +0 -8
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +0 -8
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts +0 -2
- package/dist/types/src/components/ObjectSettings/index.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/RecordMain.d.ts +0 -7
- package/dist/types/src/components/RecordMain.d.ts.map +0 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +0 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts +0 -6
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +0 -7
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/index.d.ts +0 -2
- package/dist/types/src/components/SpaceSettings/index.d.ts.map +0 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +0 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +0 -1
- package/dist/types/src/components/ViewEditor.d.ts +0 -8
- package/dist/types/src/components/ViewEditor.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -8
- package/dist/types/src/events.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -757
- package/src/capabilities/app-graph-serializer.ts +0 -76
- package/src/capabilities/capabilities.ts +0 -30
- package/src/capabilities/identity-created.ts +0 -25
- package/src/capabilities/intent-resolver.ts +0 -706
- package/src/capabilities/react-root.tsx +0 -21
- package/src/capabilities/react-surface.tsx +0 -400
- package/src/capabilities/schema-defs.ts +0 -31
- package/src/capabilities/settings.ts +0 -21
- package/src/capabilities/spaces-ready.ts +0 -234
- package/src/capabilities/state.ts +0 -46
- package/src/components/CollectionMain.tsx +0 -32
- package/src/components/CollectionSection.tsx +0 -20
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +0 -85
- package/src/components/CreateDialog/CreateObjectDialog.tsx +0 -135
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +0 -67
- package/src/components/MembersContainer.stories.tsx +0 -56
- package/src/components/ObjectDetailsPanel.tsx +0 -79
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +0 -81
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -37
- package/src/components/ObjectSettings/index.ts +0 -5
- package/src/components/PersistenceStatus.tsx +0 -83
- package/src/components/RecordMain.tsx +0 -43
- package/src/components/SchemaContainer.tsx +0 -59
- package/src/components/SpacePluginSettings.tsx +0 -52
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +0 -185
- package/src/components/SpaceSettings/index.ts +0 -5
- package/src/components/SyncStatus/SyncStatus.tsx +0 -59
- package/src/components/ViewEditor.tsx +0 -59
- package/src/events.ts +0 -15
- /package/dist/types/src/{components/CreateDialog → containers/CreateSpaceDialog}/CreateSpaceDialog.d.ts +0 -0
- /package/dist/types/src/{components/SyncStatus → containers/InlineSyncStatus}/InlineSyncStatus.d.ts +0 -0
- /package/dist/types/src/{components → containers/JoinDialog}/JoinDialog.d.ts +0 -0
- /package/dist/types/src/{components → containers/MembersContainer}/MembersContainer.d.ts +0 -0
- /package/dist/types/src/{components → containers}/SyncStatus/SyncStatus.d.ts +0 -0
package/src/util.tsx
CHANGED
|
@@ -2,228 +2,202 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import * as
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
import { type
|
|
5
|
+
import { type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Match from 'effect/Match';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
|
|
10
|
+
import { type CapabilityManager } from '@dxos/app-framework';
|
|
11
|
+
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
12
|
+
import { type Space, SpaceState, isSpace } from '@dxos/client/echo';
|
|
13
|
+
import { type Database, Feed, Filter, JsonSchema, Obj, Query, Ref, Type } from '@dxos/echo';
|
|
14
|
+
import { Collection } from '@dxos/echo';
|
|
11
15
|
import { invariant } from '@dxos/invariant';
|
|
12
16
|
import { Migrations } from '@dxos/migrations';
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
type ActionData,
|
|
17
|
-
type InvokeParams,
|
|
18
|
-
type Node,
|
|
19
|
-
type NodeArg,
|
|
20
|
-
type ReadableGraph,
|
|
21
|
-
isGraphNode,
|
|
22
|
-
} from '@dxos/plugin-graph';
|
|
23
|
-
import { type QueryResult, type Space, SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
|
|
24
|
-
import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
|
|
17
|
+
import { Operation } from '@dxos/operation';
|
|
18
|
+
import { Graph, Node } from '@dxos/plugin-graph';
|
|
19
|
+
import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention/types';
|
|
25
20
|
import { type TreeData } from '@dxos/react-ui-list';
|
|
26
|
-
import {
|
|
21
|
+
import { Expando, ManagedCollection } from '@dxos/schema';
|
|
22
|
+
import { type Label } from '@dxos/ui-types';
|
|
23
|
+
import { createFilename } from '@dxos/util';
|
|
27
24
|
|
|
28
25
|
import { meta } from './meta';
|
|
29
|
-
import {
|
|
26
|
+
import { SPACE_TYPE, SpaceOperation } from './types';
|
|
27
|
+
|
|
28
|
+
//
|
|
29
|
+
// Constants
|
|
30
|
+
//
|
|
31
|
+
|
|
32
|
+
const CACHEABLE_PROPS: string[] = ['label', 'icon', 'role'];
|
|
33
|
+
const ACCEPT_ECHO_CLASS: Set<string> = new Set(['echo']);
|
|
34
|
+
|
|
35
|
+
/** Shared translation namespace descriptor. */
|
|
36
|
+
const META_NS: { ns: string } = { ns: meta.id };
|
|
37
|
+
|
|
38
|
+
/** Static label tuples (translation key + namespace). */
|
|
39
|
+
const PERSONAL_SPACE_LABEL: Label = ['personal space label', META_NS];
|
|
40
|
+
const UNNAMED_SPACE_LABEL: Label = ['unnamed space label', META_NS];
|
|
41
|
+
const SETTINGS_PANEL_LABEL: Label = ['settings panel label', META_NS];
|
|
42
|
+
const MIGRATE_SPACE_LABEL: Label = ['migrate space label', META_NS];
|
|
43
|
+
const CREATE_OBJECT_IN_SPACE_LABEL: Label = ['create object in space label', META_NS];
|
|
44
|
+
const RENAME_SPACE_LABEL: Label = ['rename space label', META_NS];
|
|
45
|
+
const ADD_VIEW_TO_SCHEMA_LABEL: Label = ['add view to schema label', META_NS];
|
|
46
|
+
const SNAPSHOT_BY_SCHEMA_LABEL: Label = ['snapshot by schema label', META_NS];
|
|
47
|
+
const CREATE_OBJECT_IN_COLLECTION_LABEL: Label = ['create object in collection label', META_NS];
|
|
48
|
+
const CREATE_OBJECT_IN_SYSTEM_COLLECTION_LABEL: Label = ['create object in system collection label', META_NS];
|
|
49
|
+
const COPY_LINK_LABEL: Label = ['copy link label', META_NS];
|
|
50
|
+
const EXPOSE_OBJECT_LABEL: Label = ['expose object label', META_NS];
|
|
51
|
+
|
|
52
|
+
/** Stable callback constants (no closed-over state). */
|
|
53
|
+
const CAN_DROP_FALSE = () => false;
|
|
54
|
+
const CAN_DROP_SPACE = (source: TreeData) => Obj.isObject(source.item.data) || isSpace(source.item.data);
|
|
55
|
+
const CAN_DROP_OBJECT = (source: TreeData) => Node.isGraphNode(source.item) && Obj.isObject(source.item.data);
|
|
30
56
|
|
|
31
57
|
export const SPACES = `${meta.id}-spaces`;
|
|
32
58
|
export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
|
|
33
59
|
// TODO(wittjosiah): Remove.
|
|
34
60
|
export const SHARED = 'shared-spaces';
|
|
35
61
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return Rx.make((get) => {
|
|
41
|
-
const unsubscribe = query.subscribe((result) => {
|
|
42
|
-
get.setSelf(result.objects);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
get.addFinalizer(() => unsubscribe());
|
|
46
|
-
return query.objects;
|
|
47
|
-
});
|
|
48
|
-
};
|
|
62
|
+
const SCHEMA_GRAPH_NODE_PARTIALS = {
|
|
63
|
+
role: 'branch',
|
|
64
|
+
canDrop: CAN_DROP_FALSE,
|
|
65
|
+
} as const;
|
|
49
66
|
|
|
50
|
-
|
|
51
|
-
export const getSpaceDisplayName = (
|
|
52
|
-
space: Space,
|
|
53
|
-
{ personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
|
|
54
|
-
): string | [string, { ns: string }] => {
|
|
55
|
-
return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
|
|
56
|
-
? space.properties.name
|
|
57
|
-
: namesCache[space.id]
|
|
58
|
-
? namesCache[space.id]
|
|
59
|
-
: personal
|
|
60
|
-
? ['personal space label', { ns: meta.id }]
|
|
61
|
-
: ['unnamed space label', { ns: meta.id }];
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const getCollectionGraphNodePartials = ({
|
|
65
|
-
collection,
|
|
66
|
-
space,
|
|
67
|
-
resolve,
|
|
68
|
-
}: {
|
|
69
|
-
collection: DataType.Collection;
|
|
70
|
-
space: Space;
|
|
71
|
-
resolve: (typename: string) => Record<string, any>;
|
|
72
|
-
}) => {
|
|
73
|
-
return {
|
|
74
|
-
acceptPersistenceClass: new Set(['echo']),
|
|
75
|
-
acceptPersistenceKey: new Set([space.id]),
|
|
76
|
-
role: 'branch',
|
|
77
|
-
onRearrangeChildren: (nextOrder: unknown[]) => {
|
|
78
|
-
// Change on disk.
|
|
79
|
-
collection.objects = nextOrder.filter(Obj.isObject).map(Ref.make);
|
|
80
|
-
},
|
|
81
|
-
onTransferStart: (child: Node<Obj.Any>, index?: number) => {
|
|
82
|
-
// TODO(wittjosiah): Support transfer between spaces.
|
|
83
|
-
// const childSpace = getSpace(child.data);
|
|
84
|
-
// if (space && childSpace && !childSpace.key.equals(space.key)) {
|
|
85
|
-
// // Create clone of child and add to destination space.
|
|
86
|
-
// const newObject = clone(child.data, {
|
|
87
|
-
// // TODO(wittjosiah): This needs to be generalized and not hardcoded here.
|
|
88
|
-
// additional: [
|
|
89
|
-
// child.data.content,
|
|
90
|
-
// ...(child.data.objects ?? []),
|
|
91
|
-
// ...(child.data.objects ?? []).map((object: TypedObject) => object.content),
|
|
92
|
-
// ],
|
|
93
|
-
// });
|
|
94
|
-
// space.db.add(newObject);
|
|
95
|
-
// collection.objects.push(newObject);
|
|
96
|
-
// } else {
|
|
97
|
-
|
|
98
|
-
// Add child to destination collection.
|
|
99
|
-
// TODO(dmaretskyi): Compare by id.
|
|
100
|
-
if (!collection.objects.find((object) => object.target === child.data)) {
|
|
101
|
-
if (typeof index !== 'undefined') {
|
|
102
|
-
collection.objects.splice(index, 0, Ref.make(child.data));
|
|
103
|
-
} else {
|
|
104
|
-
collection.objects.push(Ref.make(child.data));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// }
|
|
109
|
-
},
|
|
110
|
-
onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
|
|
111
|
-
// Remove child from origin collection.
|
|
112
|
-
const index = collection.objects.findIndex((object) => object.target === child.data);
|
|
113
|
-
if (index > -1) {
|
|
114
|
-
collection.objects.splice(index, 1);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// TODO(wittjosiah): Support transfer between spaces.
|
|
118
|
-
// const childSpace = getSpace(child.data);
|
|
119
|
-
// const destinationSpace =
|
|
120
|
-
// destination.data instanceof SpaceProxy ? destination.data : getSpace(destination.data);
|
|
121
|
-
// if (destinationSpace && childSpace && !childSpace.key.equals(destinationSpace.key)) {
|
|
122
|
-
// // Mark child as deleted in origin space.
|
|
123
|
-
// childSpace.db.remove(child.data);
|
|
124
|
-
// }
|
|
125
|
-
},
|
|
126
|
-
onCopy: async (child: Node<Obj.Any>, index?: number) => {
|
|
127
|
-
// Create clone of child and add to destination space.
|
|
128
|
-
const newObject = await cloneObject(child.data, resolve, space);
|
|
129
|
-
space.db.add(newObject);
|
|
130
|
-
if (typeof index !== 'undefined') {
|
|
131
|
-
collection.objects.splice(index, 0, Ref.make(newObject));
|
|
132
|
-
} else {
|
|
133
|
-
collection.objects.push(Ref.make(newObject));
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
};
|
|
67
|
+
const getSchemaGraphNodePartials = () => SCHEMA_GRAPH_NODE_PARTIALS;
|
|
138
68
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
resolve,
|
|
143
|
-
}: {
|
|
144
|
-
collection: DataType.QueryCollection;
|
|
145
|
-
space: Space;
|
|
146
|
-
resolve: (typename: string) => Record<string, any>;
|
|
147
|
-
}) => {
|
|
148
|
-
const typename = getTypenameFromQuery(collection.query);
|
|
149
|
-
return {
|
|
150
|
-
icon: typename && resolve(typename)?.icon,
|
|
151
|
-
acceptPersistenceClass: new Set(['echo']),
|
|
152
|
-
acceptPersistenceKey: new Set([space.id]),
|
|
153
|
-
role: 'branch',
|
|
154
|
-
canDrop: (source: TreeData) => {
|
|
155
|
-
return (
|
|
156
|
-
isGraphNode(source.item) && Obj.isObject(source.item.data) && Obj.getTypename(source.item.data) === typename
|
|
157
|
-
);
|
|
158
|
-
},
|
|
159
|
-
onTransferStart: (child: Node<Obj.Any>, index?: number) => {
|
|
160
|
-
// No-op. Objects are moved into query collections by being removed from their original collection.
|
|
161
|
-
},
|
|
162
|
-
onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
|
|
163
|
-
// No-op. Objects are moved out of query collections by being added to another collection.
|
|
164
|
-
},
|
|
165
|
-
};
|
|
166
|
-
};
|
|
69
|
+
//
|
|
70
|
+
// Caching Infrastructure
|
|
71
|
+
//
|
|
167
72
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
73
|
+
/** Creates a string-keyed memoized factory. Returns the same instance for the same key. */
|
|
74
|
+
// TODO(wittjosiah): Factor out as app-graph utility.
|
|
75
|
+
function createFactory<T>(create: (key: string) => T): (key: string) => T;
|
|
76
|
+
function createFactory<TArgs extends any[], T>(
|
|
77
|
+
create: (...args: TArgs) => T,
|
|
78
|
+
keyFn: (...args: TArgs) => string,
|
|
79
|
+
): (...args: TArgs) => T;
|
|
80
|
+
function createFactory<TArgs extends any[], T>(
|
|
81
|
+
create: (...args: TArgs) => T,
|
|
82
|
+
keyFn?: (...args: TArgs) => string,
|
|
83
|
+
): (...args: TArgs) => T {
|
|
84
|
+
const cache = new Map<string, T>();
|
|
85
|
+
return (...args: TArgs) => {
|
|
86
|
+
const key = keyFn ? keyFn(...args) : (args[0] as string);
|
|
87
|
+
if (cache.has(key)) {
|
|
88
|
+
return cache.get(key)!;
|
|
89
|
+
}
|
|
90
|
+
const value = create(...args);
|
|
91
|
+
cache.set(key, value);
|
|
92
|
+
return value;
|
|
172
93
|
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Stable Set instances keyed by spaceId. */
|
|
97
|
+
const getAcceptPersistenceKey = createFactory((spaceId: string) => new Set([spaceId]));
|
|
98
|
+
|
|
99
|
+
/** Caches for closures that capture ECHO objects, keyed by DXN/ID string. */
|
|
100
|
+
const rearrangeCache = new Map<string, (nextOrder: unknown[]) => void>();
|
|
101
|
+
const blockInstructionCache = new Map<string, (source: TreeData, instruction: Instruction) => boolean>();
|
|
102
|
+
const spaceRearrangeCache = new Map<string, (nextOrder: Space[]) => void>();
|
|
103
|
+
const collectionPartialsCache = new Map<string, ReturnType<typeof buildCollectionPartials>>();
|
|
104
|
+
const systemCollectionPartialsCache = new Map<
|
|
105
|
+
string,
|
|
106
|
+
{
|
|
107
|
+
label: Label;
|
|
108
|
+
icon?: string;
|
|
109
|
+
iconHue?: string;
|
|
110
|
+
acceptPersistenceClass: Set<string>;
|
|
111
|
+
acceptPersistenceKey: Set<string>;
|
|
112
|
+
role: string;
|
|
113
|
+
}
|
|
114
|
+
>();
|
|
115
|
+
const spaceActionsCache = new Map<
|
|
116
|
+
string,
|
|
117
|
+
{
|
|
118
|
+
state: SpaceState;
|
|
119
|
+
hasPendingMigration: boolean;
|
|
120
|
+
migrating: boolean;
|
|
121
|
+
actions: Node.NodeArg<Node.ActionData<Operation.Service>>[];
|
|
122
|
+
}
|
|
123
|
+
>();
|
|
185
124
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
};
|
|
125
|
+
/** Dynamic label tuples keyed by composite key string. */
|
|
126
|
+
const getDynamicLabel = createFactory(
|
|
127
|
+
(key: string, ns: string, extra?: Record<string, any>): Label => [key, { ns, ...extra }],
|
|
128
|
+
(key: string, ns: string, extra?: Record<string, any>) => `${key}\0${ns}${extra ? `\0${JSON.stringify(extra)}` : ''}`,
|
|
129
|
+
);
|
|
192
130
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
(space.state.get() === SpaceState.SPACE_READY &&
|
|
197
|
-
!!Migrations.versionProperty &&
|
|
198
|
-
space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
|
|
199
|
-
);
|
|
200
|
-
};
|
|
131
|
+
//
|
|
132
|
+
// Node Constructors
|
|
133
|
+
//
|
|
201
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Builds an app-graph node for a space (workspace), including settings children and optional rearrange handler.
|
|
137
|
+
*
|
|
138
|
+
* @param space - Space to wrap as a graph node.
|
|
139
|
+
* @param navigable - Whether the space node is navigable; affects disabled state.
|
|
140
|
+
* @param personal - Passed to display name resolution (e.g. "Personal space" fallback).
|
|
141
|
+
* @param namesCache - Optional cache of space id to display name.
|
|
142
|
+
* @param resolve - Metadata resolver for typename.
|
|
143
|
+
* @param graph - Optional expandable graph for sorting edges on rearrange.
|
|
144
|
+
* @param spacesOrder - Optional ECHO object holding workspace order; used with graph for persist on rearrange.
|
|
145
|
+
* @returns A graph node for the space.
|
|
146
|
+
*/
|
|
202
147
|
export const constructSpaceNode = ({
|
|
203
148
|
space,
|
|
204
149
|
navigable = false,
|
|
205
150
|
personal,
|
|
206
151
|
namesCache,
|
|
207
152
|
resolve,
|
|
153
|
+
graph,
|
|
154
|
+
spacesOrder,
|
|
208
155
|
}: {
|
|
209
156
|
space: Space;
|
|
210
157
|
navigable?: boolean;
|
|
211
158
|
personal?: boolean;
|
|
212
159
|
namesCache?: Record<string, string>;
|
|
213
160
|
resolve: (typename: string) => Record<string, any>;
|
|
161
|
+
/** Graph for sorting edges on rearrange. */
|
|
162
|
+
graph?: Graph.ExpandableGraph;
|
|
163
|
+
// TODO(wittjosiah): Should be Type.Expando but it doesn't work with the AtomQuery result type.
|
|
164
|
+
/** Spaces order object for persisting workspace order. */
|
|
165
|
+
spacesOrder?: Obj.Any;
|
|
214
166
|
}) => {
|
|
215
167
|
const hasPendingMigration = checkPendingMigration(space);
|
|
216
168
|
const collection =
|
|
217
|
-
space.state.get() === SpaceState.SPACE_READY && space.properties[
|
|
169
|
+
space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
|
|
218
170
|
const partials =
|
|
219
|
-
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(
|
|
220
|
-
? getCollectionGraphNodePartials({ collection, space, resolve })
|
|
171
|
+
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
|
|
172
|
+
? getCollectionGraphNodePartials({ collection, db: space.db, resolve })
|
|
221
173
|
: {};
|
|
222
174
|
|
|
175
|
+
let onRearrange: ((nextOrder: Space[]) => void) | undefined;
|
|
176
|
+
if (graph && spacesOrder) {
|
|
177
|
+
onRearrange = spaceRearrangeCache.get(space.id);
|
|
178
|
+
if (!onRearrange) {
|
|
179
|
+
onRearrange = (nextOrder: Space[]) => {
|
|
180
|
+
// NOTE: This is needed to ensure order is updated by next animation frame.
|
|
181
|
+
Graph.sortEdges(
|
|
182
|
+
graph,
|
|
183
|
+
Node.RootId,
|
|
184
|
+
'outbound',
|
|
185
|
+
nextOrder.map(({ id }) => id),
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Persist order to database.
|
|
189
|
+
Obj.change(spacesOrder, (mutableOrder: any) => {
|
|
190
|
+
mutableOrder.order = nextOrder.map(({ id }) => id);
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
spaceRearrangeCache.set(space.id, onRearrange);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
223
197
|
return {
|
|
224
198
|
id: space.id,
|
|
225
199
|
type: SPACE_TYPE,
|
|
226
|
-
cacheable:
|
|
200
|
+
cacheable: CACHEABLE_PROPS,
|
|
227
201
|
data: space,
|
|
228
202
|
properties: {
|
|
229
203
|
...partials,
|
|
@@ -234,12 +208,13 @@ export const constructSpaceNode = ({
|
|
|
234
208
|
space.state.get() === SpaceState.SPACE_READY && space.properties.icon
|
|
235
209
|
? `ph--${space.properties.icon}--regular`
|
|
236
210
|
: undefined,
|
|
211
|
+
iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
|
|
237
212
|
disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
|
|
213
|
+
disposition: 'workspace',
|
|
238
214
|
testId: 'spacePlugin.space',
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
},
|
|
215
|
+
onRearrange,
|
|
216
|
+
// TODO(wittjosiah): Find a way to only allow space as source for rearranging.
|
|
217
|
+
canDrop: CAN_DROP_SPACE,
|
|
243
218
|
},
|
|
244
219
|
nodes: [
|
|
245
220
|
{
|
|
@@ -247,74 +222,201 @@ export const constructSpaceNode = ({
|
|
|
247
222
|
type: `${meta.id}/settings`,
|
|
248
223
|
data: null,
|
|
249
224
|
properties: {
|
|
250
|
-
label:
|
|
225
|
+
label: SETTINGS_PANEL_LABEL,
|
|
251
226
|
icon: 'ph--faders--regular',
|
|
252
227
|
disposition: 'alternate-tree',
|
|
253
228
|
},
|
|
254
|
-
nodes: [
|
|
255
|
-
{
|
|
256
|
-
id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
257
|
-
type: `${meta.id}/properties`,
|
|
258
|
-
data: `${meta.id}/properties`,
|
|
259
|
-
properties: {
|
|
260
|
-
label: ['space settings properties label', { ns: meta.id }],
|
|
261
|
-
icon: 'ph--sliders--regular',
|
|
262
|
-
position: 'hoist',
|
|
263
|
-
},
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
267
|
-
type: `${meta.id}/members`,
|
|
268
|
-
data: `${meta.id}/members`,
|
|
269
|
-
properties: {
|
|
270
|
-
label: ['members panel label', { ns: meta.id }],
|
|
271
|
-
icon: 'ph--users--regular',
|
|
272
|
-
position: 'hoist',
|
|
273
|
-
},
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
277
|
-
type: `${meta.id}/schema`,
|
|
278
|
-
data: `${meta.id}/schema`,
|
|
279
|
-
properties: {
|
|
280
|
-
label: ['space settings schema label', { ns: meta.id }],
|
|
281
|
-
icon: 'ph--shapes--regular',
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
],
|
|
285
229
|
},
|
|
286
230
|
],
|
|
287
231
|
};
|
|
288
232
|
};
|
|
289
233
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
234
|
+
/**
|
|
235
|
+
* Builds an app-graph node for an ECHO object (collection, managed feed, schema, or generic object).
|
|
236
|
+
*
|
|
237
|
+
* @param db - Database for the object's space.
|
|
238
|
+
* @param object - ECHO object to wrap.
|
|
239
|
+
* @param disposition - Optional UI disposition.
|
|
240
|
+
* @param droppable - Whether the node accepts drops.
|
|
241
|
+
* @param navigable - Whether the node is navigable.
|
|
242
|
+
* @param managedCollectionChild - Whether the object is a managed collection child (affects blockInstruction).
|
|
243
|
+
* @param resolve - Metadata resolver for typename.
|
|
244
|
+
* @param parentCollection - Parent collection for rearranging objects.
|
|
245
|
+
* @returns A graph node or null if the object has no typename.
|
|
246
|
+
*/
|
|
247
|
+
export const createObjectNode = ({
|
|
248
|
+
db,
|
|
249
|
+
object,
|
|
250
|
+
disposition,
|
|
251
|
+
droppable = true,
|
|
252
|
+
navigable = false,
|
|
253
|
+
managedCollectionChild = false,
|
|
254
|
+
resolve,
|
|
255
|
+
parentCollection,
|
|
295
256
|
}: {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
257
|
+
db: Database.Database;
|
|
258
|
+
object: Obj.Unknown;
|
|
259
|
+
disposition?: string;
|
|
260
|
+
droppable?: boolean;
|
|
261
|
+
navigable?: boolean;
|
|
262
|
+
managedCollectionChild?: boolean;
|
|
263
|
+
resolve: (typename: string) => Record<string, any>;
|
|
264
|
+
/** Parent collection for rearranging objects. */
|
|
265
|
+
parentCollection?: Collection.Collection;
|
|
300
266
|
}) => {
|
|
267
|
+
const type = Obj.getTypename(object);
|
|
268
|
+
if (!type) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// For feeds, use the kind property for metadata lookup instead of the generic Feed typename.
|
|
273
|
+
const metadataKey = Obj.instanceOf(Feed.Feed, object) ? (object.kind ?? type) : type;
|
|
274
|
+
const metadata = resolve(metadataKey);
|
|
275
|
+
const partials = Obj.instanceOf(Collection.Collection, object)
|
|
276
|
+
? getCollectionGraphNodePartials({ collection: object, db, resolve })
|
|
277
|
+
: Obj.instanceOf(ManagedCollection.ManagedCollection, object)
|
|
278
|
+
? getSystemCollectionNodePartials({ collection: object, db, resolve })
|
|
279
|
+
: Obj.instanceOf(Type.PersistentType, object)
|
|
280
|
+
? getSchemaGraphNodePartials()
|
|
281
|
+
: metadata.graphProps;
|
|
282
|
+
|
|
283
|
+
// TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
|
|
284
|
+
// e.g., create new collection with no name and rename it.
|
|
285
|
+
const label =
|
|
286
|
+
(object as any).name ||
|
|
287
|
+
Obj.getLabel(object) ||
|
|
288
|
+
// TODO(wittjosiah): Remove metadata labels.
|
|
289
|
+
metadata.label?.(object) ||
|
|
290
|
+
getDynamicLabel('object name placeholder', metadataKey, { default: 'New item' });
|
|
291
|
+
|
|
292
|
+
const selectable =
|
|
293
|
+
(!Obj.instanceOf(Type.PersistentType, object) &&
|
|
294
|
+
!Obj.instanceOf(ManagedCollection.ManagedCollection, object) &&
|
|
295
|
+
!Obj.instanceOf(Collection.Collection, object)) ||
|
|
296
|
+
(navigable && Obj.instanceOf(Collection.Collection, object));
|
|
297
|
+
|
|
298
|
+
let onRearrange: ((nextOrder: unknown[]) => void) | undefined;
|
|
299
|
+
if (parentCollection) {
|
|
300
|
+
const collectionId = Obj.getDXN(parentCollection).toString();
|
|
301
|
+
onRearrange = rearrangeCache.get(collectionId);
|
|
302
|
+
if (!onRearrange) {
|
|
303
|
+
onRearrange = (nextOrder: unknown[]) => {
|
|
304
|
+
Obj.change(parentCollection, (c) => {
|
|
305
|
+
c.objects = nextOrder.filter(Obj.isObject).map(Ref.make);
|
|
306
|
+
});
|
|
307
|
+
};
|
|
308
|
+
rearrangeCache.set(collectionId, onRearrange);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const objectId = Obj.getDXN(object).toString();
|
|
313
|
+
const blockInstructionKey = `${objectId}:${managedCollectionChild}`;
|
|
314
|
+
let blockInstruction = blockInstructionCache.get(blockInstructionKey);
|
|
315
|
+
if (!blockInstruction) {
|
|
316
|
+
blockInstruction = (source: TreeData, instruction: Instruction) => {
|
|
317
|
+
if (source.item.properties.managedCollectionChild) {
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
if (Obj.instanceOf(ManagedCollection.ManagedCollection, object)) {
|
|
321
|
+
return !instruction.type.startsWith('reorder');
|
|
322
|
+
}
|
|
323
|
+
return managedCollectionChild;
|
|
324
|
+
};
|
|
325
|
+
blockInstructionCache.set(blockInstructionKey, blockInstruction);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const canDrop = droppable ? CAN_DROP_OBJECT : CAN_DROP_FALSE;
|
|
329
|
+
|
|
330
|
+
return {
|
|
331
|
+
id: Obj.getDXN(object).toString(),
|
|
332
|
+
type,
|
|
333
|
+
cacheable: CACHEABLE_PROPS,
|
|
334
|
+
data: object,
|
|
335
|
+
properties: {
|
|
336
|
+
label,
|
|
337
|
+
icon: metadata.icon ?? 'ph--placeholder--regular',
|
|
338
|
+
iconHue: metadata.iconHue,
|
|
339
|
+
disposition,
|
|
340
|
+
testId: 'spacePlugin.object',
|
|
341
|
+
persistenceClass: 'echo',
|
|
342
|
+
persistenceKey: db.spaceId,
|
|
343
|
+
selectable,
|
|
344
|
+
managedCollectionChild,
|
|
345
|
+
onRearrange,
|
|
346
|
+
blockInstruction,
|
|
347
|
+
canDrop,
|
|
348
|
+
...partials,
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Builds a static schema node for the app graph.
|
|
355
|
+
*
|
|
356
|
+
* @param schema - ECHO schema entity.
|
|
357
|
+
* @param space - Space that owns the schema.
|
|
358
|
+
* @returns A graph node for the schema.
|
|
359
|
+
*/
|
|
360
|
+
export const createStaticSchemaNode = ({ schema, space }: { schema: Type.AnyEntity; space: Space }): Node.Node => {
|
|
361
|
+
return {
|
|
362
|
+
id: `${space.id}/${Type.getTypename(schema)}`,
|
|
363
|
+
type: `${meta.id}/static-schema`,
|
|
364
|
+
data: schema,
|
|
365
|
+
properties: {
|
|
366
|
+
label: getDynamicLabel('typename label', Type.getTypename(schema), {
|
|
367
|
+
count: 2,
|
|
368
|
+
default: Type.getTypename(schema),
|
|
369
|
+
}),
|
|
370
|
+
icon: 'ph--database--regular',
|
|
371
|
+
iconHue: 'green',
|
|
372
|
+
role: 'branch',
|
|
373
|
+
selectable: false,
|
|
374
|
+
canDrop: CAN_DROP_FALSE,
|
|
375
|
+
space,
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
//
|
|
381
|
+
// Action Constructors
|
|
382
|
+
//
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Builds the action list for a space node (migrate, create object, rename).
|
|
386
|
+
* Results are cached by space id and state flags.
|
|
387
|
+
*
|
|
388
|
+
* @param space - Space to build actions for.
|
|
389
|
+
* @param migrating - When true, treats the space as currently migrating (disables migrate action).
|
|
390
|
+
* @returns Array of graph action descriptors for the space.
|
|
391
|
+
*/
|
|
392
|
+
export const constructSpaceActions = ({ space, migrating }: { space: Space; migrating?: boolean }) => {
|
|
301
393
|
const state = space.state.get();
|
|
302
394
|
const hasPendingMigration = checkPendingMigration(space);
|
|
395
|
+
const isMigrating = migrating || Migrations.running(space);
|
|
396
|
+
|
|
397
|
+
const cached = spaceActionsCache.get(space.id);
|
|
398
|
+
if (
|
|
399
|
+
cached &&
|
|
400
|
+
cached.state === state &&
|
|
401
|
+
cached.hasPendingMigration === hasPendingMigration &&
|
|
402
|
+
cached.migrating === isMigrating
|
|
403
|
+
) {
|
|
404
|
+
return cached.actions;
|
|
405
|
+
}
|
|
406
|
+
|
|
303
407
|
const getId = (id: string) => `${id}/${space.id}`;
|
|
304
|
-
const actions: NodeArg<ActionData
|
|
408
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [];
|
|
305
409
|
|
|
306
410
|
if (hasPendingMigration) {
|
|
307
411
|
actions.push({
|
|
308
|
-
id: getId(
|
|
309
|
-
type:
|
|
310
|
-
data:
|
|
311
|
-
await dispatch(createIntent(SpaceAction.Migrate, { space }));
|
|
312
|
-
},
|
|
412
|
+
id: getId(SpaceOperation.Migrate.meta.key),
|
|
413
|
+
type: Node.ActionGroupType,
|
|
414
|
+
data: () => Operation.invoke(SpaceOperation.Migrate, { space }),
|
|
313
415
|
properties: {
|
|
314
|
-
label:
|
|
416
|
+
label: MIGRATE_SPACE_LABEL,
|
|
315
417
|
icon: 'ph--database--regular',
|
|
316
418
|
disposition: 'list-item-primary',
|
|
317
|
-
disabled:
|
|
419
|
+
disabled: isMigrating,
|
|
318
420
|
},
|
|
319
421
|
});
|
|
320
422
|
}
|
|
@@ -322,26 +424,22 @@ export const constructSpaceActions = ({
|
|
|
322
424
|
if (state === SpaceState.SPACE_READY && !hasPendingMigration) {
|
|
323
425
|
actions.push(
|
|
324
426
|
{
|
|
325
|
-
id: getId(
|
|
326
|
-
type:
|
|
327
|
-
data:
|
|
328
|
-
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
|
|
329
|
-
},
|
|
427
|
+
id: getId(SpaceOperation.OpenCreateObject.meta.key),
|
|
428
|
+
type: Node.ActionType,
|
|
429
|
+
data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: space.db }),
|
|
330
430
|
properties: {
|
|
331
|
-
label:
|
|
431
|
+
label: CREATE_OBJECT_IN_SPACE_LABEL,
|
|
332
432
|
icon: 'ph--plus--regular',
|
|
333
|
-
disposition: 'item',
|
|
433
|
+
disposition: 'list-item-primary',
|
|
334
434
|
testId: 'spacePlugin.createObject',
|
|
335
435
|
},
|
|
336
436
|
},
|
|
337
437
|
{
|
|
338
|
-
id: getId(
|
|
339
|
-
type:
|
|
340
|
-
data:
|
|
341
|
-
await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
|
|
342
|
-
},
|
|
438
|
+
id: getId(SpaceOperation.Rename.meta.key),
|
|
439
|
+
type: Node.ActionType,
|
|
440
|
+
data: (params?: Node.InvokeProps) => Operation.invoke(SpaceOperation.Rename, { space, caller: params?.caller }),
|
|
343
441
|
properties: {
|
|
344
|
-
label:
|
|
442
|
+
label: RENAME_SPACE_LABEL,
|
|
345
443
|
icon: 'ph--pencil-simple-line--regular',
|
|
346
444
|
keyBinding: {
|
|
347
445
|
macos: 'shift+F6',
|
|
@@ -352,66 +450,52 @@ export const constructSpaceActions = ({
|
|
|
352
450
|
);
|
|
353
451
|
}
|
|
354
452
|
|
|
453
|
+
spaceActionsCache.set(space.id, { state, hasPendingMigration, migrating: isMigrating, actions });
|
|
355
454
|
return actions;
|
|
356
455
|
};
|
|
357
456
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
role: 'branch',
|
|
367
|
-
selectable: false,
|
|
368
|
-
canDrop: () => false,
|
|
369
|
-
space,
|
|
370
|
-
},
|
|
371
|
-
};
|
|
372
|
-
};
|
|
373
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Builds the action list for a static schema node (add view, rename, delete, snapshot).
|
|
459
|
+
*
|
|
460
|
+
* @param schema - ECHO schema entity (e.g. static record type).
|
|
461
|
+
* @param space - Space that owns the schema.
|
|
462
|
+
* @param deletable - Whether the delete/snapshot actions are enabled.
|
|
463
|
+
* @returns Array of graph action descriptors for the schema.
|
|
464
|
+
*/
|
|
374
465
|
export const createStaticSchemaActions = ({
|
|
375
466
|
schema,
|
|
376
467
|
space,
|
|
377
|
-
dispatch,
|
|
378
468
|
deletable,
|
|
379
469
|
}: {
|
|
380
|
-
schema: Type.
|
|
470
|
+
schema: Type.AnyObj;
|
|
381
471
|
space: Space;
|
|
382
|
-
dispatch: PromiseIntentDispatcher;
|
|
383
472
|
deletable: boolean;
|
|
384
473
|
}) => {
|
|
385
474
|
const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
|
|
386
475
|
|
|
387
|
-
const actions: NodeArg<ActionData
|
|
476
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
|
|
388
477
|
{
|
|
389
|
-
id: getId(
|
|
390
|
-
type:
|
|
391
|
-
data:
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
}),
|
|
398
|
-
);
|
|
399
|
-
},
|
|
478
|
+
id: getId(SpaceOperation.AddObject.meta.key),
|
|
479
|
+
type: Node.ActionType,
|
|
480
|
+
data: () =>
|
|
481
|
+
Operation.invoke(SpaceOperation.OpenCreateObject, {
|
|
482
|
+
target: space.db,
|
|
483
|
+
views: true,
|
|
484
|
+
initialFormValues: { typename: Type.getTypename(schema) },
|
|
485
|
+
}),
|
|
400
486
|
properties: {
|
|
401
|
-
label:
|
|
487
|
+
label: ADD_VIEW_TO_SCHEMA_LABEL,
|
|
402
488
|
icon: 'ph--plus--regular',
|
|
403
489
|
disposition: 'list-item-primary',
|
|
404
490
|
testId: 'spacePlugin.addViewToSchema',
|
|
405
491
|
},
|
|
406
492
|
},
|
|
407
493
|
{
|
|
408
|
-
id: getId(
|
|
409
|
-
type:
|
|
410
|
-
data:
|
|
411
|
-
throw new Error('Not implemented');
|
|
412
|
-
},
|
|
494
|
+
id: getId(SpaceOperation.RenameObject.meta.key),
|
|
495
|
+
type: Node.ActionType,
|
|
496
|
+
data: () => Effect.fail(new Error('Not implemented')),
|
|
413
497
|
properties: {
|
|
414
|
-
label:
|
|
498
|
+
label: getDynamicLabel('rename object label', Type.getTypename(Type.PersistentType)),
|
|
415
499
|
icon: 'ph--pencil-simple-line--regular',
|
|
416
500
|
disabled: true,
|
|
417
501
|
disposition: 'list-item',
|
|
@@ -419,132 +503,113 @@ export const createStaticSchemaActions = ({
|
|
|
419
503
|
},
|
|
420
504
|
},
|
|
421
505
|
{
|
|
422
|
-
id: getId(
|
|
423
|
-
type:
|
|
424
|
-
data:
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
506
|
+
id: getId(SpaceOperation.RemoveObjects.meta.key),
|
|
507
|
+
type: Node.ActionType,
|
|
508
|
+
data: () =>
|
|
509
|
+
Effect.sync(() => {
|
|
510
|
+
const index = space.properties.staticRecords.findIndex(
|
|
511
|
+
(typename: string) => typename === Type.getTypename(schema),
|
|
512
|
+
);
|
|
513
|
+
if (index > -1) {
|
|
514
|
+
Obj.change(space.properties, (p) => {
|
|
515
|
+
p.staticRecords.splice(index, 1);
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
}),
|
|
432
519
|
properties: {
|
|
433
|
-
label:
|
|
520
|
+
label: getDynamicLabel('delete object label', Type.getTypename(Type.PersistentType)),
|
|
434
521
|
icon: 'ph--trash--regular',
|
|
435
522
|
disposition: 'list-item',
|
|
436
523
|
disabled: !deletable,
|
|
437
524
|
testId: 'spacePlugin.deleteObject',
|
|
438
525
|
},
|
|
439
526
|
},
|
|
527
|
+
{
|
|
528
|
+
id: getId(SpaceOperation.Snapshot.meta.key),
|
|
529
|
+
type: Node.ActionType,
|
|
530
|
+
data: Effect.fnUntraced(function* () {
|
|
531
|
+
const result = yield* Operation.invoke(SpaceOperation.Snapshot, {
|
|
532
|
+
db: space.db,
|
|
533
|
+
query: Query.select(Filter.type(schema)).ast,
|
|
534
|
+
});
|
|
535
|
+
if (result.snapshot) {
|
|
536
|
+
yield* Effect.tryPromise(() =>
|
|
537
|
+
downloadBlob(result.snapshot, createFilename({ parts: [space.id, Type.getTypename(schema)], ext: 'json' })),
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
}),
|
|
541
|
+
properties: {
|
|
542
|
+
label: SNAPSHOT_BY_SCHEMA_LABEL,
|
|
543
|
+
icon: 'ph--camera--regular',
|
|
544
|
+
disposition: 'list-item',
|
|
545
|
+
},
|
|
546
|
+
},
|
|
440
547
|
];
|
|
441
548
|
|
|
442
549
|
return actions;
|
|
443
550
|
};
|
|
444
551
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
navigable?: boolean;
|
|
458
|
-
resolve: (typename: string) => Record<string, any>;
|
|
459
|
-
}) => {
|
|
460
|
-
const type = Obj.getTypename(object);
|
|
461
|
-
if (!type) {
|
|
462
|
-
return null;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
const metadata = resolve(type);
|
|
466
|
-
const partials = Obj.instanceOf(DataType.Collection, object)
|
|
467
|
-
? getCollectionGraphNodePartials({ collection: object, space, resolve })
|
|
468
|
-
: Obj.instanceOf(DataType.QueryCollection, object)
|
|
469
|
-
? getQueryCollectionNodePartials({ collection: object, space, resolve })
|
|
470
|
-
: Obj.instanceOf(DataType.StoredSchema, object)
|
|
471
|
-
? getSchemaGraphNodePartials()
|
|
472
|
-
: Obj.instanceOf(DataType.View, object)
|
|
473
|
-
? getViewGraphNodePartials({ view: object, resolve })
|
|
474
|
-
: metadata.graphProps;
|
|
475
|
-
|
|
476
|
-
// TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
|
|
477
|
-
// e.g., create new collection with no name and rename it.
|
|
478
|
-
const label = (object as any).name ||
|
|
479
|
-
Obj.getLabel(object) ||
|
|
480
|
-
// TODO(wittjosiah): Remove metadata labels.
|
|
481
|
-
metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
|
|
482
|
-
|
|
483
|
-
const selectable =
|
|
484
|
-
(!Obj.instanceOf(DataType.StoredSchema, object) &&
|
|
485
|
-
!Obj.instanceOf(DataType.QueryCollection, object) &&
|
|
486
|
-
!Obj.instanceOf(DataType.Collection, object)) ||
|
|
487
|
-
(navigable && Obj.instanceOf(DataType.Collection, object));
|
|
488
|
-
|
|
489
|
-
return {
|
|
490
|
-
id: fullyQualifiedId(object),
|
|
491
|
-
type,
|
|
492
|
-
cacheable: ['label', 'icon', 'role'],
|
|
493
|
-
data: object,
|
|
494
|
-
properties: {
|
|
495
|
-
label,
|
|
496
|
-
icon: metadata.icon ?? 'ph--placeholder--regular',
|
|
497
|
-
disposition,
|
|
498
|
-
testId: 'spacePlugin.object',
|
|
499
|
-
persistenceClass: 'echo',
|
|
500
|
-
persistenceKey: space?.id,
|
|
501
|
-
selectable,
|
|
502
|
-
canDrop: (source: TreeData) => {
|
|
503
|
-
return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
|
|
504
|
-
},
|
|
505
|
-
...partials,
|
|
506
|
-
},
|
|
507
|
-
};
|
|
508
|
-
};
|
|
509
|
-
|
|
552
|
+
/**
|
|
553
|
+
* Builds the action list for an ECHO object node (create, rename, delete, copy link, etc.).
|
|
554
|
+
*
|
|
555
|
+
* @param object - ECHO object to build actions for.
|
|
556
|
+
* @param graph - Readable app graph (used for action wiring).
|
|
557
|
+
* @param resolve - Metadata resolver for typename.
|
|
558
|
+
* @param capabilities - Capability manager for feature checks.
|
|
559
|
+
* @param shareableLinkOrigin - Origin URL for shareable links.
|
|
560
|
+
* @param deletable - Whether delete action is included. Defaults to true.
|
|
561
|
+
* @param navigable - Whether the object is navigable (affects available actions). Defaults to false.
|
|
562
|
+
* @returns Array of graph action descriptors for the object.
|
|
563
|
+
*/
|
|
510
564
|
export const constructObjectActions = ({
|
|
511
565
|
object,
|
|
512
566
|
graph,
|
|
513
|
-
|
|
514
|
-
|
|
567
|
+
resolve,
|
|
568
|
+
capabilities,
|
|
515
569
|
deletable = true,
|
|
516
570
|
navigable = false,
|
|
571
|
+
shareableLinkOrigin,
|
|
517
572
|
}: {
|
|
518
|
-
object: Obj.
|
|
519
|
-
graph: ReadableGraph;
|
|
520
|
-
|
|
521
|
-
|
|
573
|
+
object: Obj.Unknown;
|
|
574
|
+
graph: Graph.ReadableGraph;
|
|
575
|
+
resolve: (typename: string) => Record<string, any>;
|
|
576
|
+
capabilities: CapabilityManager.CapabilityManager;
|
|
577
|
+
shareableLinkOrigin: string;
|
|
522
578
|
deletable?: boolean;
|
|
523
579
|
navigable?: boolean;
|
|
524
580
|
}) => {
|
|
525
|
-
const
|
|
526
|
-
invariant(
|
|
581
|
+
const db = Obj.getDatabase(object);
|
|
582
|
+
invariant(db, 'Database not found');
|
|
527
583
|
const typename = Obj.getTypename(object);
|
|
528
584
|
invariant(typename, 'Object has no typename');
|
|
529
585
|
|
|
530
|
-
const getId = (id: string) => `${id}/${
|
|
586
|
+
const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
|
|
531
587
|
|
|
532
|
-
const
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
588
|
+
const metadataKey = Match.value(object).pipe(
|
|
589
|
+
Match.when(Obj.instanceOf(Feed.Feed), (feed: Feed.Feed) => feed.kind ?? Obj.getTypename(feed)!),
|
|
590
|
+
Match.when(Obj.instanceOf(ManagedCollection.ManagedCollection), (managed) => {
|
|
591
|
+
const [, feedKind] = managed.key.split('~') ?? [];
|
|
592
|
+
return feedKind ?? managed.key;
|
|
593
|
+
}),
|
|
594
|
+
Match.orElse((obj) => Obj.getTypename(obj)!),
|
|
595
|
+
);
|
|
596
|
+
const managedCollection = Option.some(object).pipe(
|
|
597
|
+
Option.filter(Obj.instanceOf(ManagedCollection.ManagedCollection)),
|
|
598
|
+
Option.getOrUndefined,
|
|
599
|
+
);
|
|
600
|
+
const metadata = metadataKey ? resolve(metadataKey) : {};
|
|
601
|
+
const createObject = metadata.createObject;
|
|
602
|
+
const inputSchema = metadata.inputSchema;
|
|
536
603
|
|
|
537
|
-
const actions: NodeArg<ActionData
|
|
538
|
-
...(Obj.instanceOf(
|
|
604
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
|
|
605
|
+
...(Obj.instanceOf(Collection.Collection, object)
|
|
539
606
|
? [
|
|
540
607
|
{
|
|
541
|
-
id: getId(
|
|
542
|
-
type:
|
|
543
|
-
data:
|
|
544
|
-
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
|
|
545
|
-
},
|
|
608
|
+
id: getId(SpaceOperation.OpenCreateObject.meta.key),
|
|
609
|
+
type: Node.ActionType,
|
|
610
|
+
data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: object }),
|
|
546
611
|
properties: {
|
|
547
|
-
label:
|
|
612
|
+
label: CREATE_OBJECT_IN_COLLECTION_LABEL,
|
|
548
613
|
icon: 'ph--plus--regular',
|
|
549
614
|
disposition: 'list-item-primary',
|
|
550
615
|
testId: 'spacePlugin.createObject',
|
|
@@ -552,54 +617,75 @@ export const constructObjectActions = ({
|
|
|
552
617
|
},
|
|
553
618
|
]
|
|
554
619
|
: []),
|
|
555
|
-
...(Obj.instanceOf(
|
|
620
|
+
...(Obj.instanceOf(Type.PersistentType, object)
|
|
556
621
|
? [
|
|
557
622
|
{
|
|
558
|
-
id: getId(
|
|
559
|
-
type:
|
|
560
|
-
data:
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
}),
|
|
567
|
-
);
|
|
568
|
-
},
|
|
623
|
+
id: getId(SpaceOperation.AddObject.meta.key),
|
|
624
|
+
type: Node.ActionType,
|
|
625
|
+
data: () =>
|
|
626
|
+
Operation.invoke(SpaceOperation.OpenCreateObject, {
|
|
627
|
+
target: db,
|
|
628
|
+
views: true,
|
|
629
|
+
initialFormValues: { typename: object.typename },
|
|
630
|
+
}),
|
|
569
631
|
properties: {
|
|
570
|
-
label:
|
|
632
|
+
label: ADD_VIEW_TO_SCHEMA_LABEL,
|
|
571
633
|
icon: 'ph--plus--regular',
|
|
572
634
|
disposition: 'list-item-primary',
|
|
573
635
|
testId: 'spacePlugin.addViewToSchema',
|
|
574
636
|
},
|
|
575
637
|
},
|
|
638
|
+
{
|
|
639
|
+
id: getId(SpaceOperation.Snapshot.meta.key),
|
|
640
|
+
type: Node.ActionType,
|
|
641
|
+
data: Effect.fnUntraced(function* () {
|
|
642
|
+
const result = yield* Operation.invoke(SpaceOperation.Snapshot, {
|
|
643
|
+
db,
|
|
644
|
+
query: Query.select(Filter.type(JsonSchema.toEffectSchema(object.jsonSchema))).ast,
|
|
645
|
+
});
|
|
646
|
+
if (result.snapshot) {
|
|
647
|
+
yield* Effect.promise(() =>
|
|
648
|
+
downloadBlob(result.snapshot, createFilename({ parts: [db.spaceId, object.typename], ext: 'json' })),
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
}),
|
|
652
|
+
properties: {
|
|
653
|
+
label: SNAPSHOT_BY_SCHEMA_LABEL,
|
|
654
|
+
icon: 'ph--camera--regular',
|
|
655
|
+
disposition: 'list-item',
|
|
656
|
+
},
|
|
657
|
+
},
|
|
576
658
|
]
|
|
577
659
|
: []),
|
|
578
|
-
...(
|
|
660
|
+
...(createObject && managedCollection
|
|
579
661
|
? [
|
|
580
662
|
{
|
|
581
|
-
id: getId(
|
|
582
|
-
type:
|
|
583
|
-
data:
|
|
584
|
-
if (
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
}),
|
|
590
|
-
);
|
|
663
|
+
id: getId(SpaceOperation.OpenCreateObject.meta.key),
|
|
664
|
+
type: Node.ActionType,
|
|
665
|
+
data: Effect.fnUntraced(function* () {
|
|
666
|
+
if (inputSchema) {
|
|
667
|
+
yield* Operation.invoke(SpaceOperation.OpenCreateObject, {
|
|
668
|
+
target: db,
|
|
669
|
+
typename: managedCollection ? metadataKey : undefined,
|
|
670
|
+
});
|
|
591
671
|
} else {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
672
|
+
const createdObject = yield* createObject({}, { db, capabilities }) as Effect.Effect<
|
|
673
|
+
Obj.Unknown,
|
|
674
|
+
Error,
|
|
675
|
+
never
|
|
676
|
+
>;
|
|
677
|
+
const addResult = yield* Operation.invoke(SpaceOperation.AddObject, {
|
|
678
|
+
target: db,
|
|
679
|
+
hidden: true,
|
|
680
|
+
object: createdObject,
|
|
681
|
+
});
|
|
682
|
+
if (addResult.id) {
|
|
683
|
+
yield* Operation.invoke(LayoutOperation.Open, { subject: [addResult.id] });
|
|
684
|
+
}
|
|
599
685
|
}
|
|
600
|
-
},
|
|
686
|
+
}),
|
|
601
687
|
properties: {
|
|
602
|
-
label:
|
|
688
|
+
label: CREATE_OBJECT_IN_SYSTEM_COLLECTION_LABEL,
|
|
603
689
|
icon: 'ph--plus--regular',
|
|
604
690
|
disposition: 'list-item-primary',
|
|
605
691
|
testId: 'spacePlugin.createObject',
|
|
@@ -607,56 +693,64 @@ export const constructObjectActions = ({
|
|
|
607
693
|
},
|
|
608
694
|
]
|
|
609
695
|
: []),
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
696
|
+
...(managedCollection
|
|
697
|
+
? []
|
|
698
|
+
: [
|
|
699
|
+
{
|
|
700
|
+
id: getId(SpaceOperation.RenameObject.meta.key),
|
|
701
|
+
type: Node.ActionType,
|
|
702
|
+
data: (params?: Node.InvokeProps) =>
|
|
703
|
+
Operation.invoke(SpaceOperation.RenameObject, { object, caller: params?.caller }),
|
|
704
|
+
properties: {
|
|
705
|
+
label: getDynamicLabel('rename object label', metadataKey),
|
|
706
|
+
icon: 'ph--pencil-simple-line--regular',
|
|
707
|
+
disposition: 'list-item',
|
|
708
|
+
// TODO(wittjosiah): Not working.
|
|
709
|
+
// keyBinding: {
|
|
710
|
+
// macos: 'shift+F6',
|
|
711
|
+
// },
|
|
712
|
+
testId: 'spacePlugin.renameObject',
|
|
713
|
+
},
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
id: getId(SpaceOperation.RemoveObjects.meta.key),
|
|
717
|
+
type: Node.ActionType,
|
|
718
|
+
data: Effect.fnUntraced(function* () {
|
|
719
|
+
const collection = Graph.getConnections(
|
|
720
|
+
graph,
|
|
721
|
+
Obj.getDXN(object).toString(),
|
|
722
|
+
Node.childRelation('inbound'),
|
|
723
|
+
).find((node: Node.Node): node is Node.Node<Collection.Collection> =>
|
|
724
|
+
Obj.instanceOf(Collection.Collection, node.data),
|
|
725
|
+
)?.data;
|
|
726
|
+
yield* Operation.invoke(SpaceOperation.RemoveObjects, { objects: [object], target: collection });
|
|
727
|
+
}),
|
|
728
|
+
properties: {
|
|
729
|
+
label: getDynamicLabel('delete object label', metadataKey),
|
|
730
|
+
icon: 'ph--trash--regular',
|
|
731
|
+
disposition: 'list-item',
|
|
732
|
+
disabled: !deletable,
|
|
733
|
+
// TODO(wittjosiah): This is a browser shortcut.
|
|
734
|
+
// keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
|
|
735
|
+
testId: 'spacePlugin.deleteObject',
|
|
736
|
+
},
|
|
737
|
+
},
|
|
738
|
+
]),
|
|
646
739
|
...(navigable ||
|
|
647
|
-
(!Obj.instanceOf(
|
|
648
|
-
!Obj.instanceOf(
|
|
649
|
-
!Obj.instanceOf(
|
|
740
|
+
(!Obj.instanceOf(Collection.Collection, object) &&
|
|
741
|
+
!Obj.instanceOf(ManagedCollection.ManagedCollection, object) &&
|
|
742
|
+
!Obj.instanceOf(Type.PersistentType, object))
|
|
650
743
|
? [
|
|
651
744
|
{
|
|
652
745
|
id: getId('copy-link'),
|
|
653
|
-
type:
|
|
654
|
-
data:
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
746
|
+
type: Node.ActionType,
|
|
747
|
+
data: () =>
|
|
748
|
+
Effect.promise(async () => {
|
|
749
|
+
const url = `${shareableLinkOrigin}/${db.spaceId}/${Obj.getDXN(object).toString()}`;
|
|
750
|
+
await navigator.clipboard.writeText(url);
|
|
751
|
+
}),
|
|
658
752
|
properties: {
|
|
659
|
-
label:
|
|
753
|
+
label: COPY_LINK_LABEL,
|
|
660
754
|
icon: 'ph--link--regular',
|
|
661
755
|
disposition: 'list-item',
|
|
662
756
|
testId: 'spacePlugin.copyLink',
|
|
@@ -666,13 +760,11 @@ export const constructObjectActions = ({
|
|
|
666
760
|
: []),
|
|
667
761
|
// TODO(wittjosiah): Factor out and apply to all nodes.
|
|
668
762
|
{
|
|
669
|
-
id: getId(
|
|
670
|
-
type:
|
|
671
|
-
data:
|
|
672
|
-
await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
|
|
673
|
-
},
|
|
763
|
+
id: getId(LayoutOperation.Expose.meta.key),
|
|
764
|
+
type: Node.ActionType,
|
|
765
|
+
data: () => Operation.invoke(LayoutOperation.Expose, { subject: Obj.getDXN(object).toString() }),
|
|
674
766
|
properties: {
|
|
675
|
-
label:
|
|
767
|
+
label: EXPOSE_OBJECT_LABEL,
|
|
676
768
|
icon: 'ph--eye--regular',
|
|
677
769
|
disposition: 'heading-list-item',
|
|
678
770
|
testId: 'spacePlugin.exposeObject',
|
|
@@ -683,13 +775,152 @@ export const constructObjectActions = ({
|
|
|
683
775
|
return actions;
|
|
684
776
|
};
|
|
685
777
|
|
|
778
|
+
//
|
|
779
|
+
// Helpers
|
|
780
|
+
//
|
|
781
|
+
|
|
782
|
+
const checkPendingMigration = (space: Space) => {
|
|
783
|
+
return (
|
|
784
|
+
space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
|
|
785
|
+
(space.state.get() === SpaceState.SPACE_READY &&
|
|
786
|
+
!!Migrations.versionProperty &&
|
|
787
|
+
space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
|
|
788
|
+
);
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* Returns the display label for a space (name, namesCache entry, or fallback).
|
|
793
|
+
*
|
|
794
|
+
* @param space - Space to label.
|
|
795
|
+
* @param options.personal - If true, use personal-space fallback when unnamed.
|
|
796
|
+
* @param options.namesCache - Optional cache of space id to display name.
|
|
797
|
+
* @returns Label tuple (translation key or string, and namespace).
|
|
798
|
+
*/
|
|
799
|
+
// TODO(wittjosiah): Factor out? Exposer via capability?
|
|
800
|
+
export const getSpaceDisplayName = (
|
|
801
|
+
space: Space,
|
|
802
|
+
{ personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
|
|
803
|
+
): Label => {
|
|
804
|
+
return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
|
|
805
|
+
? space.properties.name!
|
|
806
|
+
: namesCache[space.id]
|
|
807
|
+
? namesCache[space.id]
|
|
808
|
+
: personal
|
|
809
|
+
? PERSONAL_SPACE_LABEL
|
|
810
|
+
: UNNAMED_SPACE_LABEL;
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
// TODO(wittjosiah): Factor out.
|
|
814
|
+
const downloadBlob = async (blob: Blob, filename: string) => {
|
|
815
|
+
const url = URL.createObjectURL(blob);
|
|
816
|
+
const a = document.createElement('a');
|
|
817
|
+
a.href = url;
|
|
818
|
+
a.download = filename;
|
|
819
|
+
|
|
820
|
+
document.body.appendChild(a);
|
|
821
|
+
a.click();
|
|
822
|
+
|
|
823
|
+
document.body.removeChild(a);
|
|
824
|
+
URL.revokeObjectURL(url);
|
|
825
|
+
};
|
|
826
|
+
|
|
827
|
+
const buildCollectionPartials = (
|
|
828
|
+
collection: Collection.Collection,
|
|
829
|
+
db: Database.Database,
|
|
830
|
+
resolve: (typename: string) => Record<string, any>,
|
|
831
|
+
) => ({
|
|
832
|
+
acceptPersistenceClass: ACCEPT_ECHO_CLASS,
|
|
833
|
+
acceptPersistenceKey: getAcceptPersistenceKey(db.spaceId),
|
|
834
|
+
role: 'branch' as const,
|
|
835
|
+
onTransferStart: (child: Node.Node<Obj.Unknown>, index?: number) => {
|
|
836
|
+
Obj.change(collection, (c) => {
|
|
837
|
+
if (!c.objects.find((object) => object.target === child.data)) {
|
|
838
|
+
if (typeof index !== 'undefined') {
|
|
839
|
+
c.objects.splice(index, 0, Ref.make(child.data));
|
|
840
|
+
} else {
|
|
841
|
+
c.objects.push(Ref.make(child.data));
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
});
|
|
845
|
+
},
|
|
846
|
+
onTransferEnd: (child: Node.Node<Obj.Unknown>, _destination: Node.Node) => {
|
|
847
|
+
Obj.change(collection, (c) => {
|
|
848
|
+
const index = c.objects.findIndex((object) => object.target === child.data);
|
|
849
|
+
if (index > -1) {
|
|
850
|
+
c.objects.splice(index, 1);
|
|
851
|
+
}
|
|
852
|
+
});
|
|
853
|
+
},
|
|
854
|
+
onCopy: async (child: Node.Node<Obj.Unknown>, index?: number) => {
|
|
855
|
+
const newObject = await cloneObject(child.data, resolve, db);
|
|
856
|
+
db.add(newObject);
|
|
857
|
+
Obj.change(collection, (c) => {
|
|
858
|
+
if (typeof index !== 'undefined') {
|
|
859
|
+
c.objects.splice(index, 0, Ref.make(newObject));
|
|
860
|
+
} else {
|
|
861
|
+
c.objects.push(Ref.make(newObject));
|
|
862
|
+
}
|
|
863
|
+
});
|
|
864
|
+
},
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
const getCollectionGraphNodePartials = ({
|
|
868
|
+
collection,
|
|
869
|
+
db,
|
|
870
|
+
resolve,
|
|
871
|
+
}: {
|
|
872
|
+
collection: Collection.Collection;
|
|
873
|
+
db: Database.Database;
|
|
874
|
+
resolve: (typename: string) => Record<string, any>;
|
|
875
|
+
}) => {
|
|
876
|
+
const id = Obj.getDXN(collection).toString();
|
|
877
|
+
let cached = collectionPartialsCache.get(id);
|
|
878
|
+
if (!cached) {
|
|
879
|
+
cached = buildCollectionPartials(collection, db, resolve);
|
|
880
|
+
collectionPartialsCache.set(id, cached);
|
|
881
|
+
}
|
|
882
|
+
return cached;
|
|
883
|
+
};
|
|
884
|
+
|
|
885
|
+
const getSystemCollectionNodePartials = ({
|
|
886
|
+
collection,
|
|
887
|
+
db,
|
|
888
|
+
resolve,
|
|
889
|
+
}: {
|
|
890
|
+
collection: ManagedCollection.ManagedCollection;
|
|
891
|
+
db: Database.Database;
|
|
892
|
+
resolve: (typename: string) => Record<string, any>;
|
|
893
|
+
}) => {
|
|
894
|
+
const cacheKey = `${db.spaceId}:${collection.key}`;
|
|
895
|
+
let cached = systemCollectionPartialsCache.get(cacheKey);
|
|
896
|
+
if (!cached) {
|
|
897
|
+
const [, feedKind] = collection.key.split('~');
|
|
898
|
+
const metadataKey = feedKind ?? collection.key;
|
|
899
|
+
const metadata = resolve(metadataKey);
|
|
900
|
+
cached = {
|
|
901
|
+
label: getDynamicLabel('typename label', metadataKey, { count: 2 }),
|
|
902
|
+
icon: metadata.icon,
|
|
903
|
+
iconHue: metadata.iconHue,
|
|
904
|
+
acceptPersistenceClass: ACCEPT_ECHO_CLASS,
|
|
905
|
+
acceptPersistenceKey: getAcceptPersistenceKey(db.spaceId),
|
|
906
|
+
role: 'branch',
|
|
907
|
+
};
|
|
908
|
+
systemCollectionPartialsCache.set(cacheKey, cached);
|
|
909
|
+
}
|
|
910
|
+
return cached;
|
|
911
|
+
};
|
|
912
|
+
|
|
913
|
+
//
|
|
914
|
+
// Deprecated
|
|
915
|
+
//
|
|
916
|
+
|
|
686
917
|
/**
|
|
687
918
|
* @deprecated This is a temporary solution.
|
|
688
919
|
*/
|
|
689
920
|
export const getNestedObjects = async (
|
|
690
|
-
object: Obj.
|
|
921
|
+
object: Obj.Unknown,
|
|
691
922
|
resolve: (typename: string) => Record<string, any>,
|
|
692
|
-
): Promise<Obj.
|
|
923
|
+
): Promise<Obj.Unknown[]> => {
|
|
693
924
|
const type = Obj.getTypename(object);
|
|
694
925
|
if (!type) {
|
|
695
926
|
return [];
|
|
@@ -701,7 +932,7 @@ export const getNestedObjects = async (
|
|
|
701
932
|
return [];
|
|
702
933
|
}
|
|
703
934
|
|
|
704
|
-
const objects: Obj.
|
|
935
|
+
const objects: Obj.Unknown[] = await loadReferences(object);
|
|
705
936
|
const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));
|
|
706
937
|
return [...objects, ...nested.flat()];
|
|
707
938
|
};
|
|
@@ -711,15 +942,15 @@ export const getNestedObjects = async (
|
|
|
711
942
|
*/
|
|
712
943
|
// TODO(burdon): Remove.
|
|
713
944
|
export const cloneObject = async (
|
|
714
|
-
object:
|
|
945
|
+
object: Obj.Unknown,
|
|
715
946
|
resolve: (typename: string) => Record<string, any>,
|
|
716
|
-
|
|
717
|
-
): Promise<
|
|
947
|
+
newDb: Database.Database,
|
|
948
|
+
): Promise<Obj.Unknown> => {
|
|
718
949
|
const schema = Obj.getSchema(object);
|
|
719
|
-
const typename = schema ? (Type.getTypename(schema) ??
|
|
950
|
+
const typename = schema ? (Type.getTypename(schema) ?? Expando.Expando.typename) : Expando.Expando.typename;
|
|
720
951
|
const metadata = resolve(typename);
|
|
721
952
|
const serializer = metadata.serializer;
|
|
722
953
|
invariant(serializer, `No serializer for type: ${typename}`);
|
|
723
954
|
const content = await serializer.serialize({ object });
|
|
724
|
-
return serializer.deserialize({ content,
|
|
955
|
+
return serializer.deserialize({ content, db: newDb, newId: true });
|
|
725
956
|
};
|