@dxos/plugin-space 0.8.4-main.c1de068 → 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-QACNNDOT.mjs → chunk-PXVKN4LU.mjs} +70 -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 -303
- 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-P442DOQ3.mjs → chunk-P2AVANDG.mjs} +70 -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 -303
- 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 -21
- 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 +28 -10
- 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/ObjectDetails/BaseObjectSettings.stories.d.ts +1433 -0
- package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -0
- 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 -20
- 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/containers/CreateObjectDialog/CreateObjectDialog.d.ts +11 -0
- 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 +4 -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/{components → containers/JoinDialog}/JoinDialog.d.ts +1 -1
- 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/{components → containers/MembersContainer}/MembersContainer.d.ts +3 -2
- 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/containers/SpacePresence/SpacePresence.stories.d.ts +1430 -0
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
- 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/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +1436 -0
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -0
- 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/containers/SyncStatus/SyncStatus.stories.d.ts +1435 -0
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -0
- 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 +3 -3
- 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 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1270 -67
- 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 +597 -419
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +126 -91
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +87 -62
- package/src/SpacePlugin.ts +196 -255
- 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 -15
- 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 +23 -21
- package/src/components/CreateDialog/CreateObjectPanel.tsx +157 -108
- 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 +7 -7
- 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 -18
- 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 +9 -9
- package/src/containers/InlineSyncStatus/index.ts +7 -0
- package/src/{components → containers/JoinDialog}/JoinDialog.tsx +29 -39
- package/src/containers/JoinDialog/index.ts +7 -0
- package/src/{components → containers/MembersContainer}/MembersContainer.tsx +94 -98
- package/src/containers/MembersContainer/index.ts +7 -0
- package/src/{components → containers/MenuFooter}/MenuFooter.tsx +7 -7
- 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/containers/ObjectRenamePopover/ObjectRenamePopover.tsx +52 -0
- 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 +24 -23
- package/src/{components → containers/SpacePresence}/SpacePresence.tsx +34 -30
- package/src/containers/SpacePresence/index.ts +7 -0
- package/src/{components/PopoverRenameSpace.tsx → containers/SpaceRenamePopover/SpaceRenamePopover.tsx} +16 -16
- package/src/containers/SpaceRenamePopover/index.ts +7 -0
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.tsx +46 -0
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +202 -0
- package/src/containers/SpaceSettingsContainer/index.ts +7 -0
- package/src/{components → containers}/SyncStatus/SyncStatus.stories.tsx +10 -10
- 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 +5 -5
- package/src/hooks/useTypeOptions.ts +25 -0
- package/src/index.ts +4 -3
- package/src/meta.ts +8 -5
- package/src/translations.ts +70 -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 +541 -254
- package/src/util.tsx +726 -438
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs +0 -31
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
- package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs +0 -479
- package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs +0 -80
- package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
- package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
- package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
- package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
- package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
- package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
- package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
- package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
- package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
- package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
- package/dist/lib/browser/chunk-V7MJSSBQ.mjs +0 -1984
- package/dist/lib/browser/chunk-V7MJSSBQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
- package/dist/lib/browser/chunk-XUYKJUU7.mjs +0 -649
- package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
- package/dist/lib/browser/identity-created-23XJJV2N.mjs +0 -23
- package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs +0 -760
- package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs.map +0 -7
- package/dist/lib/browser/react-root-N2J7TDRX.mjs +0 -29
- package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-TPNLWJJH.mjs +0 -374
- package/dist/lib/browser/react-surface-TPNLWJJH.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
- package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
- package/dist/lib/browser/settings-4IMP5RYT.mjs +0 -24
- package/dist/lib/browser/settings-4IMP5RYT.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs +0 -199
- package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
- package/dist/lib/browser/state-QYZAB45H.mjs +0 -47
- package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +0 -32
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
- package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs +0 -480
- package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs +0 -81
- package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4AOMYKDE.mjs +0 -650
- package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
- package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
- package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6X5DLJM5.mjs +0 -1985
- package/dist/lib/node-esm/chunk-6X5DLJM5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JH6F4C3I.mjs +0 -339
- package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs +0 -25
- package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs +0 -761
- package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-KW3TGJGY.mjs +0 -30
- package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs +0 -375
- package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
- package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
- package/dist/lib/node-esm/settings-SAOBPND3.mjs +0 -25
- package/dist/lib/node-esm/settings-SAOBPND3.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs +0 -200
- package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
- package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs +0 -48
- package/dist/lib/node-esm/state-ZVEHQ4BJ.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/schema-tool.test.d.ts +0 -2
- package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
- package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
- package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
- package/dist/types/src/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 +0 -10
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +0 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +0 -10
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +0 -4
- 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/MembersContainer.stories.d.ts +0 -8
- package/dist/types/src/components/MembersContainer.stories.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/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/SpacePresence.stories.d.ts +0 -9
- package/dist/types/src/components/SpacePresence.stories.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/SpaceSettingsContainer.stories.d.ts +0 -7
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.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/SyncStatus/SyncStatus.stories.d.ts +0 -9
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.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 -699
- package/src/capabilities/app-graph-serializer.ts +0 -76
- package/src/capabilities/capabilities.ts +0 -29
- package/src/capabilities/identity-created.ts +0 -25
- package/src/capabilities/intent-resolver.ts +0 -694
- package/src/capabilities/react-root.tsx +0 -20
- package/src/capabilities/react-surface.tsx +0 -386
- package/src/capabilities/schema-defs.ts +0 -30
- package/src/capabilities/schema-tool.test.ts +0 -44
- package/src/capabilities/schema-tools.ts +0 -125
- package/src/capabilities/settings.ts +0 -21
- package/src/capabilities/spaces-ready.ts +0 -231
- package/src/capabilities/state.ts +0 -45
- package/src/components/CollectionMain.tsx +0 -32
- package/src/components/CollectionSection.tsx +0 -20
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +0 -84
- package/src/components/CreateDialog/CreateObjectDialog.tsx +0 -124
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +0 -66
- package/src/components/MembersContainer.stories.tsx +0 -30
- package/src/components/ObjectDetailsPanel.tsx +0 -77
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +0 -80
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -36
- package/src/components/ObjectSettings/index.ts +0 -5
- package/src/components/PersistenceStatus.tsx +0 -83
- package/src/components/PopoverRenameObject.tsx +0 -62
- package/src/components/SchemaContainer.tsx +0 -59
- package/src/components/SpacePluginSettings.tsx +0 -53
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +0 -38
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +0 -184
- package/src/components/SpaceSettings/index.ts +0 -5
- package/src/components/SyncStatus/SyncStatus.tsx +0 -58
- package/src/components/ViewEditor.tsx +0 -64
- package/src/events.ts +0 -15
- /package/dist/types/src/{components/SyncStatus → containers/InlineSyncStatus}/InlineSyncStatus.d.ts +0 -0
- /package/dist/types/src/{components → containers}/SyncStatus/SyncStatus.d.ts +0 -0
package/src/util.tsx
CHANGED
|
@@ -2,229 +2,202 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
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 ReadableGraph,
|
|
17
|
-
type ActionData,
|
|
18
|
-
type InvokeParams,
|
|
19
|
-
type Node,
|
|
20
|
-
type NodeArg,
|
|
21
|
-
isGraphNode,
|
|
22
|
-
} from '@dxos/plugin-graph';
|
|
23
|
-
import { fullyQualifiedId, getSpace, type QueryResult, SpaceState, type Space, 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';
|
|
24
|
+
|
|
25
|
+
import { meta } from './meta';
|
|
26
|
+
import { SPACE_TYPE, SpaceOperation } from './types';
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
//
|
|
29
|
+
// Constants
|
|
30
|
+
//
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
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);
|
|
56
|
+
|
|
57
|
+
export const SPACES = `${meta.id}-spaces`;
|
|
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
|
-
};
|
|
49
|
-
|
|
50
|
-
// TODO(wittjosiah): Factor out? Expose via capability?
|
|
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: SPACE_PLUGIN }]
|
|
61
|
-
: ['unnamed space label', { ns: SPACE_PLUGIN }];
|
|
62
|
-
};
|
|
62
|
+
const SCHEMA_GRAPH_NODE_PARTIALS = {
|
|
63
|
+
role: 'branch',
|
|
64
|
+
canDrop: CAN_DROP_FALSE,
|
|
65
|
+
} as const;
|
|
63
66
|
|
|
64
|
-
const
|
|
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
|
-
return {
|
|
149
|
-
icon: collection.query.typename && resolve(collection.query.typename)?.icon,
|
|
150
|
-
acceptPersistenceClass: new Set(['echo']),
|
|
151
|
-
acceptPersistenceKey: new Set([space.id]),
|
|
152
|
-
role: 'branch',
|
|
153
|
-
canDrop: (source: TreeData) => {
|
|
154
|
-
return (
|
|
155
|
-
isGraphNode(source.item) &&
|
|
156
|
-
Obj.isObject(source.item.data) &&
|
|
157
|
-
Obj.getTypename(source.item.data) === collection.query.typename
|
|
158
|
-
);
|
|
159
|
-
},
|
|
160
|
-
onTransferStart: (child: Node<Obj.Any>, index?: number) => {
|
|
161
|
-
// No-op. Objects are moved into query collections by being removed from their original collection.
|
|
162
|
-
},
|
|
163
|
-
onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
|
|
164
|
-
// No-op. Objects are moved out of query collections by being added to another collection.
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
};
|
|
69
|
+
//
|
|
70
|
+
// Caching Infrastructure
|
|
71
|
+
//
|
|
168
72
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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;
|
|
173
93
|
};
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
+
>();
|
|
186
124
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
};
|
|
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
|
+
);
|
|
193
130
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
(space.state.get() === SpaceState.SPACE_READY &&
|
|
198
|
-
!!Migrations.versionProperty &&
|
|
199
|
-
space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
|
|
200
|
-
);
|
|
201
|
-
};
|
|
131
|
+
//
|
|
132
|
+
// Node Constructors
|
|
133
|
+
//
|
|
202
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
|
+
*/
|
|
203
147
|
export const constructSpaceNode = ({
|
|
204
148
|
space,
|
|
205
149
|
navigable = false,
|
|
206
150
|
personal,
|
|
207
151
|
namesCache,
|
|
208
152
|
resolve,
|
|
153
|
+
graph,
|
|
154
|
+
spacesOrder,
|
|
209
155
|
}: {
|
|
210
156
|
space: Space;
|
|
211
157
|
navigable?: boolean;
|
|
212
158
|
personal?: boolean;
|
|
213
159
|
namesCache?: Record<string, string>;
|
|
214
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;
|
|
215
166
|
}) => {
|
|
216
167
|
const hasPendingMigration = checkPendingMigration(space);
|
|
217
168
|
const collection =
|
|
218
|
-
space.state.get() === SpaceState.SPACE_READY && space.properties[
|
|
169
|
+
space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
|
|
219
170
|
const partials =
|
|
220
|
-
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(
|
|
221
|
-
? getCollectionGraphNodePartials({ collection, space, resolve })
|
|
171
|
+
space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
|
|
172
|
+
? getCollectionGraphNodePartials({ collection, db: space.db, resolve })
|
|
222
173
|
: {};
|
|
223
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
|
+
|
|
224
197
|
return {
|
|
225
198
|
id: space.id,
|
|
226
199
|
type: SPACE_TYPE,
|
|
227
|
-
cacheable:
|
|
200
|
+
cacheable: CACHEABLE_PROPS,
|
|
228
201
|
data: space,
|
|
229
202
|
properties: {
|
|
230
203
|
...partials,
|
|
@@ -235,87 +208,215 @@ export const constructSpaceNode = ({
|
|
|
235
208
|
space.state.get() === SpaceState.SPACE_READY && space.properties.icon
|
|
236
209
|
? `ph--${space.properties.icon}--regular`
|
|
237
210
|
: undefined,
|
|
211
|
+
iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
|
|
238
212
|
disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
|
|
213
|
+
disposition: 'workspace',
|
|
239
214
|
testId: 'spacePlugin.space',
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
},
|
|
215
|
+
onRearrange,
|
|
216
|
+
// TODO(wittjosiah): Find a way to only allow space as source for rearranging.
|
|
217
|
+
canDrop: CAN_DROP_SPACE,
|
|
244
218
|
},
|
|
245
219
|
nodes: [
|
|
246
220
|
{
|
|
247
221
|
id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
248
|
-
type: `${
|
|
222
|
+
type: `${meta.id}/settings`,
|
|
249
223
|
data: null,
|
|
250
224
|
properties: {
|
|
251
|
-
label:
|
|
225
|
+
label: SETTINGS_PANEL_LABEL,
|
|
252
226
|
icon: 'ph--faders--regular',
|
|
253
227
|
disposition: 'alternate-tree',
|
|
254
228
|
},
|
|
255
|
-
nodes: [
|
|
256
|
-
{
|
|
257
|
-
id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
258
|
-
type: `${SPACE_PLUGIN}/properties`,
|
|
259
|
-
data: `${SPACE_PLUGIN}/properties`,
|
|
260
|
-
properties: {
|
|
261
|
-
label: ['space settings properties label', { ns: SPACE_PLUGIN }],
|
|
262
|
-
icon: 'ph--sliders--regular',
|
|
263
|
-
position: 'hoist',
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
268
|
-
type: `${SPACE_PLUGIN}/members`,
|
|
269
|
-
data: `${SPACE_PLUGIN}/members`,
|
|
270
|
-
properties: {
|
|
271
|
-
label: ['members panel label', { ns: SPACE_PLUGIN }],
|
|
272
|
-
icon: 'ph--users--regular',
|
|
273
|
-
position: 'hoist',
|
|
274
|
-
},
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
|
|
278
|
-
type: `${SPACE_PLUGIN}/schema`,
|
|
279
|
-
data: `${SPACE_PLUGIN}/schema`,
|
|
280
|
-
properties: {
|
|
281
|
-
label: ['space settings schema label', { ns: SPACE_PLUGIN }],
|
|
282
|
-
icon: 'ph--shapes--regular',
|
|
283
|
-
},
|
|
284
|
-
},
|
|
285
|
-
],
|
|
286
229
|
},
|
|
287
230
|
],
|
|
288
231
|
};
|
|
289
232
|
};
|
|
290
233
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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,
|
|
296
256
|
}: {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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;
|
|
301
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 }) => {
|
|
302
393
|
const state = space.state.get();
|
|
303
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
|
+
|
|
304
407
|
const getId = (id: string) => `${id}/${space.id}`;
|
|
305
|
-
const actions: NodeArg<ActionData
|
|
408
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [];
|
|
306
409
|
|
|
307
410
|
if (hasPendingMigration) {
|
|
308
411
|
actions.push({
|
|
309
|
-
id: getId(
|
|
310
|
-
type:
|
|
311
|
-
data:
|
|
312
|
-
await dispatch(createIntent(SpaceAction.Migrate, { space }));
|
|
313
|
-
},
|
|
412
|
+
id: getId(SpaceOperation.Migrate.meta.key),
|
|
413
|
+
type: Node.ActionGroupType,
|
|
414
|
+
data: () => Operation.invoke(SpaceOperation.Migrate, { space }),
|
|
314
415
|
properties: {
|
|
315
|
-
label:
|
|
416
|
+
label: MIGRATE_SPACE_LABEL,
|
|
316
417
|
icon: 'ph--database--regular',
|
|
317
418
|
disposition: 'list-item-primary',
|
|
318
|
-
disabled:
|
|
419
|
+
disabled: isMigrating,
|
|
319
420
|
},
|
|
320
421
|
});
|
|
321
422
|
}
|
|
@@ -323,26 +424,22 @@ export const constructSpaceActions = ({
|
|
|
323
424
|
if (state === SpaceState.SPACE_READY && !hasPendingMigration) {
|
|
324
425
|
actions.push(
|
|
325
426
|
{
|
|
326
|
-
id: getId(
|
|
327
|
-
type:
|
|
328
|
-
data:
|
|
329
|
-
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
|
|
330
|
-
},
|
|
427
|
+
id: getId(SpaceOperation.OpenCreateObject.meta.key),
|
|
428
|
+
type: Node.ActionType,
|
|
429
|
+
data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: space.db }),
|
|
331
430
|
properties: {
|
|
332
|
-
label:
|
|
431
|
+
label: CREATE_OBJECT_IN_SPACE_LABEL,
|
|
333
432
|
icon: 'ph--plus--regular',
|
|
334
|
-
disposition: 'item',
|
|
433
|
+
disposition: 'list-item-primary',
|
|
335
434
|
testId: 'spacePlugin.createObject',
|
|
336
435
|
},
|
|
337
436
|
},
|
|
338
437
|
{
|
|
339
|
-
id: getId(
|
|
340
|
-
type:
|
|
341
|
-
data:
|
|
342
|
-
await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
|
|
343
|
-
},
|
|
438
|
+
id: getId(SpaceOperation.Rename.meta.key),
|
|
439
|
+
type: Node.ActionType,
|
|
440
|
+
data: (params?: Node.InvokeProps) => Operation.invoke(SpaceOperation.Rename, { space, caller: params?.caller }),
|
|
344
441
|
properties: {
|
|
345
|
-
label:
|
|
442
|
+
label: RENAME_SPACE_LABEL,
|
|
346
443
|
icon: 'ph--pencil-simple-line--regular',
|
|
347
444
|
keyBinding: {
|
|
348
445
|
macos: 'shift+F6',
|
|
@@ -353,44 +450,52 @@ export const constructSpaceActions = ({
|
|
|
353
450
|
);
|
|
354
451
|
}
|
|
355
452
|
|
|
453
|
+
spaceActionsCache.set(space.id, { state, hasPendingMigration, migrating: isMigrating, actions });
|
|
356
454
|
return actions;
|
|
357
455
|
};
|
|
358
456
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
role: 'branch',
|
|
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
468
|
deletable,
|
|
378
469
|
}: {
|
|
379
|
-
schema: Type.
|
|
470
|
+
schema: Type.AnyObj;
|
|
380
471
|
space: Space;
|
|
381
472
|
deletable: boolean;
|
|
382
473
|
}) => {
|
|
383
474
|
const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
|
|
384
475
|
|
|
385
|
-
const actions: NodeArg<ActionData
|
|
476
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
|
|
386
477
|
{
|
|
387
|
-
id: getId(
|
|
388
|
-
type:
|
|
389
|
-
data:
|
|
390
|
-
|
|
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
|
+
}),
|
|
486
|
+
properties: {
|
|
487
|
+
label: ADD_VIEW_TO_SCHEMA_LABEL,
|
|
488
|
+
icon: 'ph--plus--regular',
|
|
489
|
+
disposition: 'list-item-primary',
|
|
490
|
+
testId: 'spacePlugin.addViewToSchema',
|
|
391
491
|
},
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
id: getId(SpaceOperation.RenameObject.meta.key),
|
|
495
|
+
type: Node.ActionType,
|
|
496
|
+
data: () => Effect.fail(new Error('Not implemented')),
|
|
392
497
|
properties: {
|
|
393
|
-
label:
|
|
498
|
+
label: getDynamicLabel('rename object label', Type.getTypename(Type.PersistentType)),
|
|
394
499
|
icon: 'ph--pencil-simple-line--regular',
|
|
395
500
|
disabled: true,
|
|
396
501
|
disposition: 'list-item',
|
|
@@ -398,119 +503,113 @@ export const createStaticSchemaActions = ({
|
|
|
398
503
|
},
|
|
399
504
|
},
|
|
400
505
|
{
|
|
401
|
-
id: getId(
|
|
402
|
-
type:
|
|
403
|
-
data:
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
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
|
+
}),
|
|
411
519
|
properties: {
|
|
412
|
-
label:
|
|
520
|
+
label: getDynamicLabel('delete object label', Type.getTypename(Type.PersistentType)),
|
|
413
521
|
icon: 'ph--trash--regular',
|
|
414
522
|
disposition: 'list-item',
|
|
415
523
|
disabled: !deletable,
|
|
416
524
|
testId: 'spacePlugin.deleteObject',
|
|
417
525
|
},
|
|
418
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
|
+
},
|
|
419
547
|
];
|
|
420
548
|
|
|
421
549
|
return actions;
|
|
422
550
|
};
|
|
423
551
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}) => {
|
|
437
|
-
const type = Obj.getTypename(object);
|
|
438
|
-
if (!type) {
|
|
439
|
-
return undefined;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
const metadata = resolve(type);
|
|
443
|
-
const partials = Obj.instanceOf(DataType.Collection, object)
|
|
444
|
-
? getCollectionGraphNodePartials({ collection: object, space, resolve })
|
|
445
|
-
: Obj.instanceOf(DataType.QueryCollection, object)
|
|
446
|
-
? getQueryCollectionNodePartials({ collection: object, space, resolve })
|
|
447
|
-
: Obj.instanceOf(DataType.StoredSchema, object)
|
|
448
|
-
? getSchemaGraphNodePartials()
|
|
449
|
-
: Obj.instanceOf(DataType.View, object)
|
|
450
|
-
? getViewGraphNodePartials({ view: object, resolve })
|
|
451
|
-
: metadata.graphProps;
|
|
452
|
-
|
|
453
|
-
const label = Obj.getLabel(object) ||
|
|
454
|
-
// TODO(wittjosiah): Remove metadata labels.
|
|
455
|
-
metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
|
|
456
|
-
|
|
457
|
-
return {
|
|
458
|
-
id: fullyQualifiedId(object),
|
|
459
|
-
type,
|
|
460
|
-
cacheable: ['label', 'icon', 'role'],
|
|
461
|
-
data: object,
|
|
462
|
-
properties: {
|
|
463
|
-
label,
|
|
464
|
-
icon: metadata.icon ?? 'ph--placeholder--regular',
|
|
465
|
-
testId: 'spacePlugin.object',
|
|
466
|
-
persistenceClass: 'echo',
|
|
467
|
-
persistenceKey: space?.id,
|
|
468
|
-
canDrop: (source: TreeData) => {
|
|
469
|
-
return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
|
|
470
|
-
},
|
|
471
|
-
...partials,
|
|
472
|
-
},
|
|
473
|
-
};
|
|
474
|
-
};
|
|
475
|
-
|
|
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
|
+
*/
|
|
476
564
|
export const constructObjectActions = ({
|
|
477
565
|
object,
|
|
478
566
|
graph,
|
|
479
|
-
|
|
480
|
-
|
|
567
|
+
resolve,
|
|
568
|
+
capabilities,
|
|
481
569
|
deletable = true,
|
|
482
570
|
navigable = false,
|
|
571
|
+
shareableLinkOrigin,
|
|
483
572
|
}: {
|
|
484
|
-
object: Obj.
|
|
485
|
-
graph: ReadableGraph;
|
|
486
|
-
|
|
487
|
-
|
|
573
|
+
object: Obj.Unknown;
|
|
574
|
+
graph: Graph.ReadableGraph;
|
|
575
|
+
resolve: (typename: string) => Record<string, any>;
|
|
576
|
+
capabilities: CapabilityManager.CapabilityManager;
|
|
577
|
+
shareableLinkOrigin: string;
|
|
488
578
|
deletable?: boolean;
|
|
489
579
|
navigable?: boolean;
|
|
490
580
|
}) => {
|
|
491
|
-
const
|
|
492
|
-
invariant(
|
|
581
|
+
const db = Obj.getDatabase(object);
|
|
582
|
+
invariant(db, 'Database not found');
|
|
493
583
|
const typename = Obj.getTypename(object);
|
|
494
584
|
invariant(typename, 'Object has no typename');
|
|
495
585
|
|
|
496
|
-
const getId = (id: string) => `${id}/${
|
|
586
|
+
const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
|
|
497
587
|
|
|
498
|
-
const
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
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;
|
|
502
603
|
|
|
503
|
-
const actions: NodeArg<ActionData
|
|
504
|
-
...(Obj.instanceOf(
|
|
604
|
+
const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
|
|
605
|
+
...(Obj.instanceOf(Collection.Collection, object)
|
|
505
606
|
? [
|
|
506
607
|
{
|
|
507
|
-
id: getId(
|
|
508
|
-
type:
|
|
509
|
-
data:
|
|
510
|
-
await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
|
|
511
|
-
},
|
|
608
|
+
id: getId(SpaceOperation.OpenCreateObject.meta.key),
|
|
609
|
+
type: Node.ActionType,
|
|
610
|
+
data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: object }),
|
|
512
611
|
properties: {
|
|
513
|
-
label:
|
|
612
|
+
label: CREATE_OBJECT_IN_COLLECTION_LABEL,
|
|
514
613
|
icon: 'ph--plus--regular',
|
|
515
614
|
disposition: 'list-item-primary',
|
|
516
615
|
testId: 'spacePlugin.createObject',
|
|
@@ -518,31 +617,75 @@ export const constructObjectActions = ({
|
|
|
518
617
|
},
|
|
519
618
|
]
|
|
520
619
|
: []),
|
|
521
|
-
...(
|
|
620
|
+
...(Obj.instanceOf(Type.PersistentType, object)
|
|
522
621
|
? [
|
|
523
622
|
{
|
|
524
|
-
id: getId(
|
|
525
|
-
type:
|
|
526
|
-
data:
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
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
|
+
}),
|
|
631
|
+
properties: {
|
|
632
|
+
label: ADD_VIEW_TO_SCHEMA_LABEL,
|
|
633
|
+
icon: 'ph--plus--regular',
|
|
634
|
+
disposition: 'list-item-primary',
|
|
635
|
+
testId: 'spacePlugin.addViewToSchema',
|
|
636
|
+
},
|
|
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' })),
|
|
541
649
|
);
|
|
542
650
|
}
|
|
651
|
+
}),
|
|
652
|
+
properties: {
|
|
653
|
+
label: SNAPSHOT_BY_SCHEMA_LABEL,
|
|
654
|
+
icon: 'ph--camera--regular',
|
|
655
|
+
disposition: 'list-item',
|
|
543
656
|
},
|
|
657
|
+
},
|
|
658
|
+
]
|
|
659
|
+
: []),
|
|
660
|
+
...(createObject && managedCollection
|
|
661
|
+
? [
|
|
662
|
+
{
|
|
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
|
+
});
|
|
671
|
+
} else {
|
|
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
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}),
|
|
544
687
|
properties: {
|
|
545
|
-
label:
|
|
688
|
+
label: CREATE_OBJECT_IN_SYSTEM_COLLECTION_LABEL,
|
|
546
689
|
icon: 'ph--plus--regular',
|
|
547
690
|
disposition: 'list-item-primary',
|
|
548
691
|
testId: 'spacePlugin.createObject',
|
|
@@ -550,56 +693,64 @@ export const constructObjectActions = ({
|
|
|
550
693
|
},
|
|
551
694
|
]
|
|
552
695
|
: []),
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
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
|
+
]),
|
|
589
739
|
...(navigable ||
|
|
590
|
-
(!Obj.instanceOf(
|
|
591
|
-
!Obj.instanceOf(
|
|
592
|
-
!Obj.instanceOf(
|
|
740
|
+
(!Obj.instanceOf(Collection.Collection, object) &&
|
|
741
|
+
!Obj.instanceOf(ManagedCollection.ManagedCollection, object) &&
|
|
742
|
+
!Obj.instanceOf(Type.PersistentType, object))
|
|
593
743
|
? [
|
|
594
744
|
{
|
|
595
745
|
id: getId('copy-link'),
|
|
596
|
-
type:
|
|
597
|
-
data:
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
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
|
+
}),
|
|
601
752
|
properties: {
|
|
602
|
-
label:
|
|
753
|
+
label: COPY_LINK_LABEL,
|
|
603
754
|
icon: 'ph--link--regular',
|
|
604
755
|
disposition: 'list-item',
|
|
605
756
|
testId: 'spacePlugin.copyLink',
|
|
@@ -609,13 +760,11 @@ export const constructObjectActions = ({
|
|
|
609
760
|
: []),
|
|
610
761
|
// TODO(wittjosiah): Factor out and apply to all nodes.
|
|
611
762
|
{
|
|
612
|
-
id: getId(
|
|
613
|
-
type:
|
|
614
|
-
data:
|
|
615
|
-
await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
|
|
616
|
-
},
|
|
763
|
+
id: getId(LayoutOperation.Expose.meta.key),
|
|
764
|
+
type: Node.ActionType,
|
|
765
|
+
data: () => Operation.invoke(LayoutOperation.Expose, { subject: Obj.getDXN(object).toString() }),
|
|
617
766
|
properties: {
|
|
618
|
-
label:
|
|
767
|
+
label: EXPOSE_OBJECT_LABEL,
|
|
619
768
|
icon: 'ph--eye--regular',
|
|
620
769
|
disposition: 'heading-list-item',
|
|
621
770
|
testId: 'spacePlugin.exposeObject',
|
|
@@ -626,13 +775,152 @@ export const constructObjectActions = ({
|
|
|
626
775
|
return actions;
|
|
627
776
|
};
|
|
628
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
|
+
|
|
629
917
|
/**
|
|
630
918
|
* @deprecated This is a temporary solution.
|
|
631
919
|
*/
|
|
632
920
|
export const getNestedObjects = async (
|
|
633
|
-
object: Obj.
|
|
921
|
+
object: Obj.Unknown,
|
|
634
922
|
resolve: (typename: string) => Record<string, any>,
|
|
635
|
-
): Promise<Obj.
|
|
923
|
+
): Promise<Obj.Unknown[]> => {
|
|
636
924
|
const type = Obj.getTypename(object);
|
|
637
925
|
if (!type) {
|
|
638
926
|
return [];
|
|
@@ -644,7 +932,7 @@ export const getNestedObjects = async (
|
|
|
644
932
|
return [];
|
|
645
933
|
}
|
|
646
934
|
|
|
647
|
-
const objects: Obj.
|
|
935
|
+
const objects: Obj.Unknown[] = await loadReferences(object);
|
|
648
936
|
const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));
|
|
649
937
|
return [...objects, ...nested.flat()];
|
|
650
938
|
};
|
|
@@ -654,15 +942,15 @@ export const getNestedObjects = async (
|
|
|
654
942
|
*/
|
|
655
943
|
// TODO(burdon): Remove.
|
|
656
944
|
export const cloneObject = async (
|
|
657
|
-
object:
|
|
945
|
+
object: Obj.Unknown,
|
|
658
946
|
resolve: (typename: string) => Record<string, any>,
|
|
659
|
-
|
|
660
|
-
): Promise<
|
|
947
|
+
newDb: Database.Database,
|
|
948
|
+
): Promise<Obj.Unknown> => {
|
|
661
949
|
const schema = Obj.getSchema(object);
|
|
662
|
-
const typename = schema ? (Type.getTypename(schema) ??
|
|
950
|
+
const typename = schema ? (Type.getTypename(schema) ?? Expando.Expando.typename) : Expando.Expando.typename;
|
|
663
951
|
const metadata = resolve(typename);
|
|
664
952
|
const serializer = metadata.serializer;
|
|
665
953
|
invariant(serializer, `No serializer for type: ${typename}`);
|
|
666
954
|
const content = await serializer.serialize({ object });
|
|
667
|
-
return serializer.deserialize({ content,
|
|
955
|
+
return serializer.deserialize({ content, db: newDb, newId: true });
|
|
668
956
|
};
|