@dxos/plugin-space 0.8.4-main.f9ba587 → 0.8.4-main.fd6878d

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.
Files changed (217) hide show
  1. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs +31 -0
  2. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +88 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +7 -0
  5. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +68 -0
  6. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-builder-PMDF6PJV.mjs → app-graph-builder-VZW75QPJ.mjs} +174 -26
  8. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-YPHYVZAP.mjs} +4 -4
  10. package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-3UFG6LQQ.mjs} +57 -3
  11. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-C7KGJTAL.mjs → chunk-CBYL62HG.mjs} +3 -2
  13. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-DYKFFVN6.mjs} +2 -2
  15. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs.map → chunk-DYKFFVN6.mjs.map} +3 -3
  16. package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-PSIBVBTA.mjs} +386 -319
  17. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-XXIPJLJF.mjs → chunk-Q5EEPP3S.mjs} +2 -1
  19. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-SMB4DGYO.mjs} +129 -25
  21. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-WAXS2ZVX.mjs} +68 -7
  23. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +7 -0
  24. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-T6ZNVE7S.mjs} +2 -2
  25. package/dist/lib/browser/{identity-created-23XJJV2N.mjs.map → identity-created-T6ZNVE7S.mjs.map} +3 -3
  26. package/dist/lib/browser/index.mjs +103 -12
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-TS6CCKST.mjs} +166 -16
  29. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/{react-root-7S6FIC5G.mjs → react-root-RQGTZ2ZO.mjs} +6 -6
  32. package/dist/lib/browser/{react-root-7S6FIC5G.mjs.map → react-root-RQGTZ2ZO.mjs.map} +2 -2
  33. package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-V3ARS2BP.mjs} +48 -16
  34. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +7 -0
  35. package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-5LBA43X5.mjs} +2 -2
  36. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +7 -0
  37. package/dist/lib/browser/{schema-tools-BNP4JTD7.mjs → schema-tools-LPL35WOJ.mjs} +11 -11
  38. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +7 -0
  39. package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-FLLBP5KI.mjs} +2 -2
  40. package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-FXEP6XEW.mjs} +14 -12
  41. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +7 -0
  42. package/dist/lib/browser/{state-522XTUR4.mjs → state-K3UBPKYP.mjs} +2 -2
  43. package/dist/lib/{node-esm/state-C4IOXPZP.mjs.map → browser/state-K3UBPKYP.mjs.map} +2 -2
  44. package/dist/lib/browser/types/index.mjs +1 -1
  45. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +32 -0
  46. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +7 -0
  47. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +89 -0
  48. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +7 -0
  49. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +70 -0
  50. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-TO72W6MI.mjs → app-graph-builder-XNVQOJLE.mjs} +174 -26
  52. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-PKVLWV6V.mjs} +4 -4
  54. package/dist/lib/node-esm/{chunk-AT7LGFER.mjs → chunk-7MZ3J3LI.mjs} +2 -1
  55. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-CTQMR7E3.mjs} +129 -25
  57. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-72QMMRKC.mjs → chunk-FJZNSJC4.mjs} +3 -2
  59. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-HYIZVPOA.mjs} +68 -7
  61. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-KLG4Y4GY.mjs} +2 -2
  63. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs.map → chunk-KLG4Y4GY.mjs.map} +3 -3
  64. package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-KYUHPPRN.mjs} +386 -319
  65. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-S7MKRQHY.mjs} +57 -3
  67. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +7 -0
  68. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-AL7NNCKH.mjs} +2 -2
  69. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs.map → identity-created-AL7NNCKH.mjs.map} +3 -3
  70. package/dist/lib/node-esm/index.mjs +103 -12
  71. package/dist/lib/node-esm/index.mjs.map +3 -3
  72. package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-W6P27SCF.mjs} +166 -16
  73. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +7 -0
  74. package/dist/lib/node-esm/meta.json +1 -1
  75. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-N27KETKT.mjs} +6 -6
  76. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs.map → react-root-N27KETKT.mjs.map} +2 -2
  77. package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-TNPAUQCM.mjs} +48 -16
  78. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +7 -0
  79. package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-TPWZPDCR.mjs} +2 -2
  80. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +7 -0
  81. package/dist/lib/node-esm/{schema-tools-KWW5PTML.mjs → schema-tools-PJE2FKWH.mjs} +11 -11
  82. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +7 -0
  83. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-WKUWY3P6.mjs} +2 -2
  84. package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-PQLLIO5W.mjs} +14 -12
  85. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +7 -0
  86. package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-4M5A6OSB.mjs} +2 -2
  87. package/dist/lib/node-esm/state-4M5A6OSB.mjs.map +7 -0
  88. package/dist/lib/node-esm/types/index.mjs +1 -1
  89. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/capabilities.d.ts +9 -3
  92. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  101. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  102. package/dist/types/src/components/CollectionMain.d.ts +1 -0
  103. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  104. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -2
  105. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  106. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +1 -1
  108. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  109. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  110. package/dist/types/src/components/MembersContainer.stories.d.ts +1 -1
  111. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  113. package/dist/types/src/components/ObjectDetailsPanel.d.ts +9 -0
  114. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -0
  115. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  116. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  117. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -1
  118. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  119. package/dist/types/src/components/RecordMain.d.ts +7 -0
  120. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  121. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  122. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  126. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  127. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  129. package/dist/types/src/components/ViewEditor.d.ts +8 -0
  130. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  131. package/dist/types/src/components/index.d.ts +11 -1
  132. package/dist/types/src/components/index.d.ts.map +1 -1
  133. package/dist/types/src/events.d.ts +1 -0
  134. package/dist/types/src/events.d.ts.map +1 -1
  135. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  136. package/dist/types/src/translations.d.ts +65 -4
  137. package/dist/types/src/translations.d.ts.map +1 -1
  138. package/dist/types/src/types/types.d.ts +82 -2
  139. package/dist/types/src/types/types.d.ts.map +1 -1
  140. package/dist/types/src/util.d.ts +31 -5
  141. package/dist/types/src/util.d.ts.map +1 -1
  142. package/dist/types/tsconfig.tsbuildinfo +1 -1
  143. package/package.json +50 -50
  144. package/src/SpacePlugin.ts +88 -5
  145. package/src/capabilities/app-graph-builder.ts +210 -12
  146. package/src/capabilities/capabilities.ts +8 -3
  147. package/src/capabilities/identity-created.ts +1 -1
  148. package/src/capabilities/intent-resolver.ts +120 -10
  149. package/src/capabilities/react-root.tsx +2 -1
  150. package/src/capabilities/react-surface.tsx +66 -15
  151. package/src/capabilities/schema-defs.ts +3 -2
  152. package/src/capabilities/schema-tool.test.ts +1 -1
  153. package/src/capabilities/schema-tools.ts +11 -11
  154. package/src/capabilities/spaces-ready.ts +10 -7
  155. package/src/capabilities/state.ts +3 -2
  156. package/src/components/AwaitingObject.tsx +5 -7
  157. package/src/components/CollectionMain.tsx +2 -0
  158. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +2 -1
  159. package/src/components/CreateDialog/CreateObjectDialog.tsx +32 -27
  160. package/src/components/CreateDialog/CreateObjectPanel.tsx +3 -3
  161. package/src/components/CreateDialog/CreateSpaceDialog.tsx +1 -1
  162. package/src/components/JoinDialog.tsx +1 -1
  163. package/src/components/MembersContainer.stories.tsx +4 -3
  164. package/src/components/MembersContainer.tsx +7 -5
  165. package/src/components/MenuFooter.tsx +2 -3
  166. package/src/components/ObjectDetailsPanel.tsx +77 -0
  167. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +2 -1
  168. package/src/components/PersistenceStatus.tsx +5 -6
  169. package/src/components/PopoverRenameObject.tsx +7 -13
  170. package/src/components/PopoverRenameSpace.tsx +1 -1
  171. package/src/components/RecordMain.tsx +43 -0
  172. package/src/components/SchemaContainer.tsx +2 -2
  173. package/src/components/SpacePluginSettings.tsx +2 -2
  174. package/src/components/SpacePresence.stories.tsx +2 -1
  175. package/src/components/SpacePresence.tsx +7 -7
  176. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +2 -1
  177. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +6 -6
  178. package/src/components/SyncStatus/SyncStatus.stories.tsx +2 -1
  179. package/src/components/SyncStatus/SyncStatus.tsx +4 -3
  180. package/src/components/SyncStatus/status.ts +4 -4
  181. package/src/components/ViewEditor.tsx +64 -0
  182. package/src/components/index.ts +7 -1
  183. package/src/events.ts +2 -1
  184. package/src/hooks/useActiveSpace.ts +1 -1
  185. package/src/hooks/useInputSurfaceLookup.tsx +1 -1
  186. package/src/translations.ts +66 -4
  187. package/src/types/types.ts +56 -3
  188. package/src/util.tsx +126 -25
  189. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-C7KGJTAL.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
  196. package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
  197. package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
  198. package/dist/lib/browser/schema-defs-K3B3OAH4.mjs.map +0 -7
  199. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  200. package/dist/lib/browser/spaces-ready-K7NSNBHM.mjs.map +0 -7
  201. package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
  202. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
  205. package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
  206. package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
  207. package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
  208. package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
  209. package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
  210. package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
  211. package/dist/lib/node-esm/schema-defs-4MCDG4DV.mjs.map +0 -7
  212. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  213. package/dist/lib/node-esm/spaces-ready-UM2P3DCR.mjs.map +0 -7
  214. /package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs.map → app-graph-serializer-YPHYVZAP.mjs.map} +0 -0
  215. /package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-FLLBP5KI.mjs.map} +0 -0
  216. /package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs.map → app-graph-serializer-PKVLWV6V.mjs.map} +0 -0
  217. /package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-WKUWY3P6.mjs.map} +0 -0
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo } from 'react';
6
+
7
+ import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { Type } from '@dxos/echo';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { useClient } from '@dxos/react-client';
11
+ import { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';
12
+ import { ViewEditor as NativeViewEditor } from '@dxos/react-ui-form';
13
+ import { DataType } from '@dxos/schema';
14
+
15
+ import { SpaceAction } from '../types';
16
+
17
+ type ViewEditorProps = { view: DataType.View };
18
+
19
+ export const ViewEditor = ({ view }: ViewEditorProps) => {
20
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
21
+ const client = useClient();
22
+ const space = getSpace(view);
23
+ const schema = useSchema(client, space, view.query.typename);
24
+
25
+ const views = useQuery(space, Filter.type(DataType.View));
26
+ const currentTypename = useMemo(() => view.query?.typename, [view.query?.typename]);
27
+
28
+ const handleUpdateTypename = useCallback(
29
+ (typename: string) => {
30
+ invariant(schema);
31
+ invariant(Type.isMutable(schema));
32
+
33
+ const matchingViews = views.filter((view) => view.query.typename === currentTypename);
34
+ for (const view of matchingViews) {
35
+ view.query.typename = typename;
36
+ }
37
+
38
+ schema.updateTypename(typename);
39
+ },
40
+ [views, schema],
41
+ );
42
+
43
+ const handleDelete = useCallback(
44
+ (fieldId: string) => {
45
+ void dispatch(createIntent(SpaceAction.DeleteField, { view, fieldId }));
46
+ },
47
+ [dispatch, view],
48
+ );
49
+
50
+ if (!space || !schema) {
51
+ return null;
52
+ }
53
+
54
+ return (
55
+ <NativeViewEditor
56
+ registry={space.db.schemaRegistry}
57
+ schema={schema}
58
+ view={view}
59
+ onTypenameChanged={Type.isMutable(schema) ? handleUpdateTypename : undefined}
60
+ onDelete={Type.isMutable(schema) ? handleDelete : undefined}
61
+ outerSpacing={false}
62
+ />
63
+ );
64
+ };
@@ -2,9 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { lazy } from 'react';
6
+
5
7
  export * from './AwaitingObject';
6
8
  export * from './CreateDialog';
7
- export * from './CollectionMain';
8
9
  export * from './CollectionSection';
9
10
  export * from './JoinDialog';
10
11
  export * from './MembersContainer';
@@ -18,3 +19,8 @@ export * from './SpacePresence';
18
19
  export * from './SpacePluginSettings';
19
20
  export * from './SpaceSettings';
20
21
  export * from './SyncStatus';
22
+ export * from './ViewEditor';
23
+
24
+ export const CollectionMain = lazy(() => import('./CollectionMain'));
25
+ export const ObjectDetailsPanel = lazy(() => import('./ObjectDetailsPanel'));
26
+ export const RecordMain = lazy(() => import('./RecordMain'));
package/src/events.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { defineEvent, Events } from '@dxos/app-framework';
5
+ import { Events, defineEvent } from '@dxos/app-framework';
6
6
 
7
7
  import { SPACE_PLUGIN } from './meta';
8
8
 
@@ -11,4 +11,5 @@ export namespace SpaceEvents {
11
11
  export const SetupSettingsPanel = defineEvent(`${SPACE_PLUGIN}/event/setup-settings-panel`);
12
12
  export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
13
13
  export const SpaceCreated = defineEvent(`${SPACE_PLUGIN}/event/space-created`);
14
+ export const SchemaAdded = defineEvent(`${SPACE_PLUGIN}/event/schema-added`);
14
15
  }
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, useLayout, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, useLayout } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
  import { parseId, useSpace } from '@dxos/react-client/echo';
8
8
 
@@ -5,7 +5,7 @@
5
5
  import { type Schema } from 'effect';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
- import { usePluginManager, isSurfaceAvailable, Surface } from '@dxos/app-framework';
8
+ import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework';
9
9
  import { type InputProps } from '@dxos/react-ui-form';
10
10
 
11
11
  // TODO(ZaymonFC): Move this if you find yourself needing it elsewhere.
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { StoredSchema } from '@dxos/echo-schema';
5
6
  import { type Resource } from '@dxos/react-ui';
6
7
  import { DataType } from '@dxos/schema';
7
8
 
@@ -17,6 +18,8 @@ export const translations = [
17
18
  'typename label_one': 'Collection',
18
19
  'typename label_other': 'Collections',
19
20
  'object name placeholder': 'New collection',
21
+ 'rename object label': 'Rename collection',
22
+ 'delete object label': 'Delete collection',
20
23
  },
21
24
  [DataType.QueryCollection.typename]: {
22
25
  'typename label': 'Smart Collection',
@@ -24,6 +27,61 @@ export const translations = [
24
27
  'typename label_one': 'Smart Collection',
25
28
  'typename label_other': 'Smart Collections',
26
29
  'object name placeholder': 'New smart collection',
30
+ 'rename object label': 'Rename smart collection',
31
+ 'delete object label': 'Delete smart collection',
32
+ },
33
+ [StoredSchema.typename]: {
34
+ 'typename label': 'Record',
35
+ 'typename label_zero': 'Records',
36
+ 'typename label_one': 'Record',
37
+ 'typename label_other': 'Records',
38
+ 'object name placeholder': 'New record type',
39
+ 'rename object label': 'Rename record type',
40
+ 'delete object label': 'Delete record type',
41
+ },
42
+ [DataType.View.typename]: {
43
+ 'typename label': 'View',
44
+ 'typename label_zero': 'Views',
45
+ 'typename label_one': 'View',
46
+ 'typename label_other': 'Views',
47
+ 'object name placeholder': 'New view',
48
+ 'rename object label': 'Rename view',
49
+ 'delete object label': 'Delete view',
50
+ },
51
+ [DataType.Event.typename]: {
52
+ 'typename label': 'Event',
53
+ 'typename label_zero': 'Events',
54
+ 'typename label_one': 'Event',
55
+ 'typename label_other': 'Events',
56
+ 'object name placeholder': 'New event',
57
+ },
58
+ [DataType.Organization.typename]: {
59
+ 'typename label': 'Organization',
60
+ 'typename label_zero': 'Organizations',
61
+ 'typename label_one': 'Organization',
62
+ 'typename label_other': 'Organizations',
63
+ 'object name placeholder': 'New organization',
64
+ },
65
+ [DataType.Person.typename]: {
66
+ 'typename label': 'Person',
67
+ 'typename label_zero': 'People',
68
+ 'typename label_one': 'Person',
69
+ 'typename label_other': 'People',
70
+ 'object name placeholder': 'New person',
71
+ },
72
+ [DataType.Project.typename]: {
73
+ 'typename label': 'Project',
74
+ 'typename label_zero': 'Projects',
75
+ 'typename label_one': 'Project',
76
+ 'typename label_other': 'Projects',
77
+ 'object name placeholder': 'New project',
78
+ },
79
+ [DataType.Task.typename]: {
80
+ 'typename label': 'Task',
81
+ 'typename label_zero': 'Tasks',
82
+ 'typename label_one': 'Task',
83
+ 'typename label_other': 'Tasks',
84
+ 'object name placeholder': 'New task',
27
85
  },
28
86
  [meta.id]: {
29
87
  'plugin name': 'Spaces',
@@ -136,6 +194,10 @@ export const translations = [
136
194
  'add key': 'Add Key',
137
195
  'open space settings label': 'Open settings',
138
196
 
197
+ 'row details no selection label': 'No objects selected',
198
+ 'companion selected objects label': 'Selected',
199
+ 'field deleted label': 'Field deleted',
200
+
139
201
  'members panel label': 'Members',
140
202
  'members verbose label': 'Manage space members',
141
203
  'members description': 'You can view the current status of space members here as well as invite new members.',
@@ -152,10 +214,10 @@ export const translations = [
152
214
  'space settings properties label': 'General settings',
153
215
  'space properties settings verbose label': 'Manage space properties',
154
216
  'space properties settings description': 'You can configure how this space is displayed in the app here.',
155
- 'space settings schema label': 'Schema',
156
- 'schema verbose label': 'Manage schema',
157
- 'schema description': 'You can manage all of the schema stored within this space here.',
158
- 'no schemas found message': 'No schemas found',
217
+ 'space settings schema label': 'Record types',
218
+ 'schema verbose label': 'Manage record types',
219
+ 'schema description': 'You can manage all of the record types stored within this space here.',
220
+ 'no schemas found message': 'No record types found',
159
221
  'display name input placeholder': 'Space name',
160
222
  'display name description': 'Name of the space as it appears in the app.',
161
223
  'icon description': 'Icon used to represent the space in the app.',
@@ -5,13 +5,13 @@
5
5
  import { Schema } from 'effect';
6
6
 
7
7
  import { type AnyIntentChain } from '@dxos/app-framework';
8
- import { Type, type Obj } from '@dxos/echo';
9
- import { type BaseObject, type TypedObject } from '@dxos/echo-schema';
8
+ import { type Obj, Type } from '@dxos/echo';
9
+ import { type BaseObject, EchoSchema, StoredSchema, type TypedObject } from '@dxos/echo-schema';
10
10
  import { type PublicKey } from '@dxos/react-client';
11
11
  // TODO(wittjosiah): This pulls in full client.
12
12
  import { EchoObjectSchema, ReactiveObjectSchema, type Space, SpaceSchema } from '@dxos/react-client/echo';
13
13
  import { CancellableInvitationObservable, Invitation } from '@dxos/react-client/invitations';
14
- import { DataType, TypenameAnnotationId } from '@dxos/schema';
14
+ import { DataType, FieldSchema, TypenameAnnotationId } from '@dxos/schema';
15
15
  import { type ComplexMap } from '@dxos/util';
16
16
 
17
17
  import { SPACE_PLUGIN } from '../meta';
@@ -217,11 +217,63 @@ export namespace SpaceAction {
217
217
  output: Schema.Boolean,
218
218
  }) {}
219
219
 
220
+ export const StoredSchemaForm = Schema.Struct({
221
+ name: Schema.optional(Schema.String),
222
+ typename: Schema.optional(
223
+ Schema.String.annotations({
224
+ [TypenameAnnotationId]: ['unused-static'],
225
+ }),
226
+ ),
227
+ });
228
+
229
+ export class UseStaticSchema extends Schema.TaggedClass<UseStaticSchema>()(`${SPACE_ACTION}/use-static-schema`, {
230
+ input: Schema.Struct({
231
+ space: SpaceSchema,
232
+ typename: Schema.String,
233
+ }),
234
+ output: Schema.Struct({}),
235
+ }) {}
236
+
237
+ export class AddSchema extends Schema.TaggedClass<AddSchema>()(`${SPACE_ACTION}/add-schema`, {
238
+ input: Schema.Struct({
239
+ space: SpaceSchema,
240
+ name: Schema.optional(Schema.String),
241
+ // TODO(wittjosiah): Schema for schema?
242
+ schema: Schema.Any,
243
+ }),
244
+ output: Schema.Struct({
245
+ // TODO(wittjosiah): ObjectId.
246
+ id: Schema.String,
247
+ object: StoredSchema,
248
+ schema: Schema.instanceOf(EchoSchema),
249
+ }),
250
+ }) {}
251
+
252
+ export class DeleteField extends Schema.TaggedClass<DeleteField>()(`${SPACE_ACTION}/delete-field`, {
253
+ input: Schema.Struct({
254
+ view: DataType.View,
255
+ fieldId: Schema.String,
256
+ // TODO(wittjosiah): Separate fields for undo data?
257
+ deletionData: Schema.optional(
258
+ Schema.Struct({
259
+ field: FieldSchema,
260
+ // TODO(wittjosiah): This creates a type error.
261
+ // props: PropertySchema,
262
+ props: Schema.Any,
263
+ index: Schema.Number,
264
+ }),
265
+ ),
266
+ }),
267
+ output: Schema.Void,
268
+ }) {}
269
+
220
270
  export class OpenCreateObject extends Schema.TaggedClass<OpenCreateObject>()(`${SPACE_ACTION}/open-create-object`, {
221
271
  input: Schema.Struct({
222
272
  target: Schema.Union(SpaceSchema, DataType.Collection),
223
273
  typename: Schema.optional(Schema.String),
224
274
  navigable: Schema.optional(Schema.Boolean),
275
+ // TODO(wittjosiah): This is a function, is there a better way to handle this?
276
+ onCreateObject: Schema.optional(Schema.Any),
225
277
  }),
226
278
  output: Schema.Void,
227
279
  }) {}
@@ -233,6 +285,7 @@ export namespace SpaceAction {
233
285
  hidden: Schema.optional(Schema.Boolean),
234
286
  }),
235
287
  output: Schema.Struct({
288
+ // TODO(wittjosiah): ObjectId.
236
289
  id: Schema.String,
237
290
  subject: Schema.Array(Schema.String),
238
291
  object: EchoObjectSchema,
package/src/util.tsx CHANGED
@@ -5,28 +5,28 @@
5
5
  import { Rx } from '@effect-rx/rx-react';
6
6
  import { pipe } from 'effect';
7
7
 
8
- import { chain, createIntent, LayoutAction, type PromiseIntentDispatcher } from '@dxos/app-framework';
8
+ import { LayoutAction, type PromiseIntentDispatcher, chain, createIntent } from '@dxos/app-framework';
9
9
  import { Obj, Ref, Type } from '@dxos/echo';
10
- import { EXPANDO_TYPENAME } from '@dxos/echo-schema';
10
+ import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo-schema';
11
11
  import { invariant } from '@dxos/invariant';
12
12
  import { Migrations } from '@dxos/migrations';
13
13
  import {
14
14
  ACTION_GROUP_TYPE,
15
15
  ACTION_TYPE,
16
- type ReadableGraph,
17
16
  type ActionData,
18
17
  type InvokeParams,
19
18
  type Node,
20
19
  type NodeArg,
20
+ type ReadableGraph,
21
21
  isGraphNode,
22
22
  } from '@dxos/plugin-graph';
23
- import { fullyQualifiedId, getSpace, type QueryResult, SpaceState, type Space, isSpace } from '@dxos/react-client/echo';
23
+ import { type QueryResult, type Space, SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
24
24
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
25
25
  import { type TreeData } from '@dxos/react-ui-list';
26
26
  import { DataType } from '@dxos/schema';
27
27
 
28
28
  import { SPACE_PLUGIN } from './meta';
29
- import { SpaceAction, SPACE_TYPE, type ObjectForm } from './types';
29
+ import { type ObjectForm, SPACE_TYPE, SpaceAction } from './types';
30
30
 
31
31
  export const SPACES = `${SPACE_PLUGIN}-spaces`;
32
32
  export const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';
@@ -36,7 +36,7 @@ export const SHARED = 'shared-spaces';
36
36
  /**
37
37
  * Convert a query result to an Rx value of the objects.
38
38
  */
39
- export const rxFromQuery = <T extends Obj.Any>(query: QueryResult<T>): Rx.Rx<T[]> => {
39
+ export const rxFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Rx.Rx<T[]> => {
40
40
  return Rx.make((get) => {
41
41
  const unsubscribe = query.subscribe((result) => {
42
42
  get.setSelf(result.objects);
@@ -166,6 +166,31 @@ const getQueryCollectionNodePartials = ({
166
166
  };
167
167
  };
168
168
 
169
+ const getSchemaGraphNodePartials = () => {
170
+ return {
171
+ role: 'branch',
172
+ canDrop: () => false,
173
+ };
174
+ };
175
+
176
+ const getViewGraphNodePartials = ({
177
+ view,
178
+ resolve,
179
+ }: {
180
+ view: DataType.View;
181
+ resolve: (typename: string) => Record<string, any>;
182
+ }) => {
183
+ const presentation = view.presentation.target;
184
+ const typename = presentation ? Obj.getTypename(presentation) : undefined;
185
+ const metadata = typename ? resolve(typename) : {};
186
+
187
+ return {
188
+ label: view.name || ['object name placeholder', { ns: typename, default: 'New view' }],
189
+ icon: metadata.icon,
190
+ canDrop: () => false,
191
+ };
192
+ };
193
+
169
194
  const checkPendingMigration = (space: Space) => {
170
195
  return (
171
196
  space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
@@ -331,34 +356,108 @@ export const constructSpaceActions = ({
331
356
  return actions;
332
357
  };
333
358
 
359
+ export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
360
+ return {
361
+ id: `${space.id}/${Type.getTypename(schema)}`,
362
+ type: `${SPACE_PLUGIN}/static-schema`,
363
+ data: schema,
364
+ properties: {
365
+ label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
366
+ icon: 'ph--database--regular',
367
+ role: 'branch',
368
+ canDrop: () => false,
369
+ space,
370
+ },
371
+ };
372
+ };
373
+
374
+ export const createStaticSchemaActions = ({
375
+ schema,
376
+ space,
377
+ deletable,
378
+ }: {
379
+ schema: Type.Obj.Any;
380
+ space: Space;
381
+ deletable: boolean;
382
+ }) => {
383
+ const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
384
+
385
+ const actions: NodeArg<ActionData>[] = [
386
+ {
387
+ id: getId(SpaceAction.RenameObject._tag),
388
+ type: ACTION_TYPE,
389
+ data: async (params?: InvokeParams) => {
390
+ throw new Error('Not implemented');
391
+ },
392
+ properties: {
393
+ label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
394
+ icon: 'ph--pencil-simple-line--regular',
395
+ disabled: true,
396
+ disposition: 'list-item',
397
+ testId: 'spacePlugin.renameObject',
398
+ },
399
+ },
400
+ {
401
+ id: getId(SpaceAction.RemoveObjects._tag),
402
+ type: ACTION_TYPE,
403
+ data: async () => {
404
+ const index = space.properties.staticRecords.findIndex(
405
+ (typename: string) => typename === Type.getTypename(schema),
406
+ );
407
+ if (index > -1) {
408
+ space.properties.staticRecords.splice(index, 1);
409
+ }
410
+ },
411
+ properties: {
412
+ label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
413
+ icon: 'ph--trash--regular',
414
+ disposition: 'list-item',
415
+ disabled: !deletable,
416
+ testId: 'spacePlugin.deleteObject',
417
+ },
418
+ },
419
+ ];
420
+
421
+ return actions;
422
+ };
423
+
334
424
  export const createObjectNode = ({
335
425
  space,
336
426
  object,
427
+ disposition,
337
428
  droppable = true,
338
429
  navigable = false,
339
430
  resolve,
340
431
  }: {
341
432
  space: Space;
342
433
  object: Obj.Any;
434
+ disposition?: string;
343
435
  droppable?: boolean;
344
436
  navigable?: boolean;
345
437
  resolve: (typename: string) => Record<string, any>;
346
438
  }) => {
347
439
  const type = Obj.getTypename(object);
348
440
  if (!type) {
349
- return undefined;
441
+ return null;
350
442
  }
351
443
 
352
444
  const metadata = resolve(type);
353
- if (Object.keys(metadata).length === 0) {
354
- return undefined;
355
- }
356
-
357
445
  const partials = Obj.instanceOf(DataType.Collection, object)
358
446
  ? getCollectionGraphNodePartials({ collection: object, space, resolve })
359
447
  : Obj.instanceOf(DataType.QueryCollection, object)
360
448
  ? getQueryCollectionNodePartials({ collection: object, space, resolve })
361
- : metadata.graphProps;
449
+ : Obj.instanceOf(DataType.StoredSchema, object)
450
+ ? getSchemaGraphNodePartials()
451
+ : Obj.instanceOf(DataType.View, object)
452
+ ? getViewGraphNodePartials({ view: object, resolve })
453
+ : metadata.graphProps;
454
+
455
+ // TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
456
+ // e.g., create new collection with no name and rename it.
457
+ const label = (object as any).name ||
458
+ Obj.getLabel(object) ||
459
+ // TODO(wittjosiah): Remove metadata labels.
460
+ metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
362
461
 
363
462
  return {
364
463
  id: fullyQualifiedId(object),
@@ -366,10 +465,9 @@ export const createObjectNode = ({
366
465
  cacheable: ['label', 'icon', 'role'],
367
466
  data: object,
368
467
  properties: {
369
- // TODO(burdon): Use annotation to get the name field.
370
- label: metadata.label?.(object) ||
371
- (object as any).name || ['object name placeholder', { ns: type, default: 'New object' }],
468
+ label,
372
469
  icon: metadata.icon ?? 'ph--placeholder--regular',
470
+ disposition,
373
471
  testId: 'spacePlugin.object',
374
472
  persistenceClass: 'echo',
375
473
  persistenceKey: space?.id,
@@ -386,16 +484,21 @@ export const constructObjectActions = ({
386
484
  graph,
387
485
  dispatch,
388
486
  objectForms,
487
+ deletable = true,
389
488
  navigable = false,
390
489
  }: {
391
490
  object: Obj.Any;
392
491
  graph: ReadableGraph;
393
492
  dispatch: PromiseIntentDispatcher;
394
493
  objectForms: ObjectForm<any>[];
494
+ deletable?: boolean;
395
495
  navigable?: boolean;
396
496
  }) => {
397
497
  const space = getSpace(object);
398
498
  invariant(space, 'Space not found');
499
+ const typename = Obj.getTypename(object);
500
+ invariant(typename, 'Object has no typename');
501
+
399
502
  const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;
400
503
 
401
504
  const queryCollection = Obj.instanceOf(DataType.QueryCollection, object) ? object : undefined;
@@ -460,10 +563,7 @@ export const constructObjectActions = ({
460
563
  await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
461
564
  },
462
565
  properties: {
463
- label: [
464
- Obj.instanceOf(DataType.Collection, object) ? 'rename collection label' : 'rename object label',
465
- { ns: SPACE_PLUGIN },
466
- ],
566
+ label: ['rename object label', { ns: typename }],
467
567
  icon: 'ph--pencil-simple-line--regular',
468
568
  disposition: 'list-item',
469
569
  // TODO(wittjosiah): Not working.
@@ -483,18 +583,19 @@ export const constructObjectActions = ({
483
583
  await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
484
584
  },
485
585
  properties: {
486
- label: [
487
- Obj.instanceOf(DataType.Collection, object) ? 'delete collection label' : 'delete object label',
488
- { ns: SPACE_PLUGIN },
489
- ],
586
+ label: ['delete object label', { ns: typename }],
490
587
  icon: 'ph--trash--regular',
491
588
  disposition: 'list-item',
589
+ disabled: !deletable,
492
590
  // TODO(wittjosiah): This is a browser shortcut.
493
591
  // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
494
592
  testId: 'spacePlugin.deleteObject',
495
593
  },
496
594
  },
497
- ...(navigable || (!Obj.instanceOf(DataType.Collection, object) && !Obj.instanceOf(DataType.QueryCollection, object))
595
+ ...(navigable ||
596
+ (!Obj.instanceOf(DataType.Collection, object) &&
597
+ !Obj.instanceOf(DataType.QueryCollection, object) &&
598
+ !Obj.instanceOf(DataType.StoredSchema, object))
498
599
  ? [
499
600
  {
500
601
  id: getId('copy-link'),
@@ -564,7 +665,7 @@ export const cloneObject = async (
564
665
  newSpace: Space,
565
666
  ): Promise<Type.Expando> => {
566
667
  const schema = Obj.getSchema(object);
567
- const typename = schema ? Type.getTypename(schema) ?? EXPANDO_TYPENAME : EXPANDO_TYPENAME;
668
+ const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
568
669
  const metadata = resolve(typename);
569
670
  const serializer = metadata.serializer;
570
671
  invariant(serializer, `No serializer for type: ${typename}`);
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Array, Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';\nimport { getSpace, SpaceState, type Space, isSpace, type QueryResult } from '@dxos/client/echo';\nimport { Filter, Obj, Query, Type } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, rxFromObservable, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';\nimport { DataType } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { SpaceCapabilities } from './capabilities';\nimport { getActiveSpace } from '../hooks';\nimport { SPACE_PLUGIN } from '../meta';\nimport { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';\nimport {\n constructObjectActions,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n rxFromQuery,\n SHARED,\n SPACES,\n} from '../util';\n\nexport default (context: PluginContext) => {\n // TODO(wittjosiah): Make reactive.\n const resolve = (typename: string) =>\n context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n const spacesNode = {\n id: SPACES,\n type: SPACES,\n cacheable: ['label', 'role'],\n properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n icon: 'ph--planet--regular',\n testId: 'spacePlugin.spaces',\n role: 'branch',\n disposition: 'collection',\n disabled: true,\n childrenPersistenceClass: 'echo',\n onRearrangeChildren: async (nextOrder: Space[]) => {\n const { graph } = context.getCapability(Capabilities.AppGraph);\n const client = context.getCapability(ClientCapabilities.Client);\n\n // NOTE: This is needed to ensure order is updated by next animation frame.\n // TODO(wittjosiah): Is there a better way to do this?\n // If not, graph should be passed as an argument to the extension.\n graph.sortEdges(\n SPACES,\n 'outbound',\n nextOrder.map(({ id }) => id),\n );\n\n const {\n objects: [spacesOrder],\n } = await client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED })).run();\n if (spacesOrder) {\n spacesOrder.order = nextOrder.map(({ id }) => id);\n } else {\n log.warn('spaces order object not found');\n }\n },\n },\n };\n\n return contributes(Capabilities.AppGraphBuilder, [\n // Primary actions.\n createExtension({\n id: `${SPACE_PLUGIN}/primary-actions`,\n position: 'hoist',\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: SpaceAction.OpenCreateSpace._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SpaceAction.OpenCreateSpace));\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'menu',\n },\n },\n {\n id: SpaceAction.Join._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SpaceAction.Join));\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'menu',\n },\n },\n {\n id: SpaceAction.OpenMembers._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const space = getActiveSpace(context) ?? client.spaces.default;\n await dispatch(createIntent(SpaceAction.OpenMembers, { space }));\n },\n properties: {\n label: ['share space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--users--regular',\n testId: 'spacePlugin.shareSpace',\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n },\n },\n {\n id: SpaceAction.OpenSettings._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const space = getActiveSpace(context) ?? client.spaces.default;\n await dispatch(createIntent(SpaceAction.OpenSettings, { space }));\n },\n properties: {\n label: ['open current space settings label', { ns: SPACE_PLUGIN }],\n icon: 'ph--faders--regular',\n keyBinding: {\n macos: 'meta+shift+,',\n windows: 'ctrl+shift+,',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n // Create spaces group node.\n createExtension({\n id: `${SPACE_PLUGIN}/root`,\n position: 'hoist',\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [spacesNode]),\n Option.getOrElse(() => []),\n ),\n ),\n // resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),\n }),\n\n // Create space nodes.\n createExtension({\n id: SPACES,\n connector: (node) => {\n let query: QueryResult<Type.Expando> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),\n Option.map(() => {\n const state = context.getCapability(SpaceCapabilities.State);\n const client = context.getCapability(ClientCapabilities.Client);\n const spacesRx = rxFromObservable(client.spaces);\n const isReadyRx = rxFromObservable(client.spaces.isReady);\n\n const spaces = get(spacesRx);\n const isReady = get(isReadyRx);\n\n if (!spaces || !isReady) {\n return [];\n }\n\n const settings = get(context.capabilities(Capabilities.SettingsStore))[0]?.getStore<SpaceSettingsProps>(\n SPACE_PLUGIN,\n )?.value;\n\n // TODO(wittjosiah): During client reset, accessing default space throws.\n try {\n if (!query) {\n query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));\n }\n const [spacesOrder] = get(rxFromQuery(query));\n return get(\n rxFromSignal(() => {\n const order: string[] = spacesOrder?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n return [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space) =>\n settings?.showHidden ? true : space.state.get() !== SpaceState.SPACE_INACTIVE,\n )\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: state.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.spaceNames,\n resolve,\n }),\n );\n }),\n );\n } catch {\n return [];\n }\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n // resolver: ({ id }) => {\n // if (id.length !== SPACE_ID_LENGTH) {\n // return;\n // }\n\n // const client = context.requestCapability(ClientCapabilities.Client);\n // const spaces = toSignal(\n // (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n // () => client.spaces.get(),\n // );\n\n // const isReady = toSignal(\n // (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n // () => client.spaces.isReady.get(),\n // );\n\n // if (!spaces || !isReady) {\n // return;\n // }\n\n // const space = spaces.find((space) => space.id === id);\n // if (!space) {\n // return;\n // }\n\n // if (space.state.get() === SpaceState.SPACE_INACTIVE) {\n // return false;\n // } else if (space.state.get() !== SpaceState.SPACE_READY) {\n // return undefined;\n // } else {\n // const state = context.requestCapability(SpaceCapabilities.State);\n // return constructSpaceNode({\n // space,\n // navigable: state.navigableCollections,\n // personal: space === client.spaces.default,\n // namesCache: state.spaceNames,\n // resolve,\n // });\n // }\n // },\n }),\n\n // Create space actions.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.flatMap((space) => {\n const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));\n const [client] = get(context.capabilities(ClientCapabilities.Client));\n const [state] = get(context.capabilities(SpaceCapabilities.State));\n\n if (!dispatcher || !client || !state) {\n return Option.none();\n } else {\n return Option.some({\n space,\n dispatch: dispatcher.dispatchPromise,\n personal: space === client.spaces.default,\n migrating: state.sdkMigrationRunning[space.id],\n });\n }\n }),\n Option.map((params) => constructSpaceActions(params)),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n // Create nodes for objects in the root collection of a space.\n createExtension({\n id: `${SPACE_PLUGIN}/root-collection`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((space) => {\n const state = context.getCapability(SpaceCapabilities.State);\n const spaceState = get(rxFromObservable(space.state));\n if (spaceState !== SpaceState.SPACE_READY) {\n return [];\n }\n\n const collection = get(\n rxFromSignal(\n () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,\n ),\n );\n if (!collection) {\n return [];\n }\n\n return get(\n rxFromSignal(() =>\n pipe(\n collection.objects,\n Array.map((object) => object.target),\n Array.filter(isNonNullable),\n Array.map((object) =>\n createObjectNode({\n space,\n object,\n resolve,\n navigable: state.navigableCollections,\n }),\n ),\n Array.filter(isNonNullable),\n ),\n ),\n );\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n // Create nodes for objects in a collection or by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((collection) => {\n const state = context.getCapability(SpaceCapabilities.State);\n const space = getSpace(collection);\n\n return get(\n rxFromSignal(() =>\n pipe(\n collection.objects,\n Array.map((object) => object.target),\n Array.filter(isNonNullable),\n Array.map(\n (object) =>\n space && createObjectNode({ object, space, resolve, navigable: state.navigableCollections }),\n ),\n Array.filter(isNonNullable),\n ),\n ),\n );\n }),\n Option.getOrElse(() => []),\n ),\n ),\n // resolver: ({ id }) => {\n // if (id.length !== FQ_ID_LENGTH) {\n // return;\n // }\n\n // const [spaceId, objectId] = id.split(':');\n // if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {\n // return;\n // }\n\n // const client = context.requestCapability(ClientCapabilities.Client);\n // const space = client.spaces.get().find((space) => space.id === spaceId);\n // if (!space) {\n // return;\n // }\n\n // const spaceState = toSignal(\n // (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n // () => space.state.get(),\n // space.id,\n // );\n // if (spaceState !== SpaceState.SPACE_READY) {\n // return;\n // }\n\n // const [object] = memoizeQuery(space, Query.select(Filter.ids(objectId)));\n // if (!object) {\n // return;\n // }\n\n // if (isDeleted(object)) {\n // return false;\n // } else {\n // const state = context.requestCapability(SpaceCapabilities.State);\n // return createObjectNode({ object, space, resolve, navigable: state.navigableCollections });\n // }\n // },\n }),\n\n // Create nodes for objects in a query collection.\n createExtension({\n id: `${SPACE_PLUGIN}/query-collection-objects`,\n connector: (node) => {\n let query: QueryResult<Type.Expando> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.flatMap((collection) => {\n const space = getSpace(collection);\n return collection.query.typename && space\n ? Option.some({ typename: collection.query.typename, space })\n : Option.none();\n }),\n Option.map(({ typename, space }) => {\n const state = context.getCapability(SpaceCapabilities.State);\n if (!query) {\n query = space.db.query(\n Query.without(\n Query.select(Filter.typename(typename)),\n // TODO(wittjosiah): This query is broader than it should be.\n // It will return all objects in the collection, not just the ones of the given type.\n // However this works fine for now because this query is only used for exclusions.\n Query.select(Filter.typename(typename))\n .referencedBy(DataType.Collection, 'objects')\n .reference('objects'),\n ),\n );\n }\n return get(rxFromQuery(query))\n .map((object) =>\n get(\n rxFromSignal(() =>\n createObjectNode({\n object,\n space,\n resolve,\n droppable: false, // Cannot rearrange query collections.\n navigable: state.navigableCollections,\n }),\n ),\n ),\n )\n .filter(isNonNullable);\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),\n Option.flatMap((object) => {\n const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));\n const [appGraph] = get(context.capabilities(Capabilities.AppGraph));\n const [state] = get(context.capabilities(SpaceCapabilities.State));\n const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));\n\n if (!dispatcher || !appGraph || !state) {\n return Option.none();\n } else {\n return Option.some({\n object,\n graph: appGraph.graph,\n dispatch: dispatcher.dispatchPromise,\n objectForms,\n navigable: get(rxFromSignal(() => state.navigableCollections)),\n });\n }\n }),\n Option.map((params) => constructObjectActions(params)),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n // Object settings plank companion.\n createExtension({\n id: `${SPACE_PLUGIN}/settings`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'settings'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'settings',\n properties: {\n label: ['object settings label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sliders--regular',\n disposition: 'hidden',\n position: 'fallback',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Rx", "Array", "Option", "pipe", "Capabilities", "contributes", "createIntent", "getSpace", "SpaceState", "isSpace", "Filter", "Obj", "Query", "Type", "log", "ClientCapabilities", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "rxFromObservable", "ROOT_ID", "rxFromSignal", "DataType", "isNonNullable", "context", "resolve", "typename", "getCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "spacesNode", "SPACES", "type", "cacheable", "properties", "label", "ns", "SPACE_PLUGIN", "icon", "testId", "role", "disposition", "disabled", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "graph", "getCapability", "AppGraph", "client", "ClientCapabilities", "Client", "sortEdges", "map", "objects", "spacesOrder", "spaces", "default", "db", "query", "Filter", "Type", "Expando", "key", "SHARED", "run", "order", "log", "warn", "contributes", "AppGraphBuilder", "createExtension", "position", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "SpaceAction", "OpenCreateSpace", "_tag", "data", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "Join", "OpenMembers", "space", "getActiveSpace", "keyBinding", "macos", "windows", "OpenSettings", "getOrElse", "connector", "state", "SpaceCapabilities", "State", "spacesRx", "rxFromObservable", "isReadyRx", "isReady", "settings", "capabilities", "SettingsStore", "getStore", "value", "rxFromQuery", "rxFromSignal", "orderMap", "Map", "index", "filter", "has", "sort", "a", "b", "showHidden", "SpaceState", "SPACE_INACTIVE", "constructSpaceNode", "navigable", "navigableCollections", "personal", "namesCache", "spaceNames", "SPACE_TYPE", "isSpace", "dispatcher", "migrating", "sdkMigrationRunning", "params", "constructSpaceActions", "spaceState", "SPACE_READY", "collection", "DataType", "Collection", "target", "Array", "object", "isNonNullable", "createObjectNode", "Obj", "instanceOf", "getSpace", "QueryCollection", "Query", "without", "select", "referencedBy", "reference", "droppable", "isObject", "appGraph", "objectForms", "ObjectForm", "constructObjectActions", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE"]
7
- }