@dxos/plugin-debug 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (164) hide show
  1. package/dist/lib/browser/index.mjs +97 -91
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/DebugPlugin.d.ts +6 -1
  5. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  6. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  7. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  8. package/dist/types/src/capabilities/index.d.ts +15 -4
  9. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  10. package/dist/types/src/capabilities/{react-context/react-context.d.ts → react-context.d.ts} +1 -1
  11. package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
  12. package/dist/types/src/capabilities/react-surface.d.ts +9 -0
  13. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  14. package/dist/types/src/capabilities/settings.d.ts +10 -0
  15. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  16. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  17. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  18. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +79 -0
  19. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  20. package/dist/types/src/components/DebugSettings/index.d.ts +3 -0
  21. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  22. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
  23. package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
  24. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
  25. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +1 -1
  26. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  27. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  28. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  29. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  30. package/dist/types/src/components/index.d.ts +4 -10
  31. package/dist/types/src/components/index.d.ts.map +1 -1
  32. package/dist/types/src/{components → containers/DebugGraph}/DebugGraph.d.ts +0 -1
  33. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
  34. package/dist/types/src/containers/DebugGraph/index.d.ts +3 -0
  35. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
  36. package/dist/types/src/{components → containers/DebugObjectPanel}/DebugObjectPanel.d.ts +1 -1
  37. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
  38. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +3 -0
  39. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
  40. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +3 -0
  41. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
  42. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +3 -0
  43. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
  44. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
  45. package/dist/types/src/containers/DebugStatus/index.d.ts +3 -0
  46. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
  47. package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
  48. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
  49. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +3 -0
  50. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
  51. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +15 -0
  52. package/dist/types/src/{components → containers}/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  53. package/dist/types/src/containers/SpaceGenerator/index.d.ts +3 -0
  54. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
  55. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
  56. package/dist/types/src/containers/Wireframe/index.d.ts +3 -0
  57. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
  58. package/dist/types/src/containers/index.d.ts +9 -0
  59. package/dist/types/src/containers/index.d.ts.map +1 -0
  60. package/dist/types/src/translations.d.ts +60 -58
  61. package/dist/types/src/translations.d.ts.map +1 -1
  62. package/dist/types/src/types/Settings.d.ts +6 -0
  63. package/dist/types/src/types/Settings.d.ts.map +1 -0
  64. package/dist/types/src/types/index.d.ts +67 -0
  65. package/dist/types/src/types/index.d.ts.map +1 -0
  66. package/dist/types/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +74 -67
  68. package/src/DebugPlugin.tsx +23 -10
  69. package/src/capabilities/app-graph-builder.ts +406 -0
  70. package/src/capabilities/index.ts +6 -4
  71. package/src/capabilities/react-context.tsx +25 -0
  72. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +122 -109
  73. package/src/capabilities/{settings/settings.ts → settings.ts} +7 -6
  74. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  75. package/src/components/DebugSettings/DebugSettings.tsx +228 -0
  76. package/src/components/DebugSettings/index.ts +7 -0
  77. package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +2 -2
  78. package/src/components/SchemaTable/index.ts +5 -0
  79. package/src/components/SpaceGenerator/ObjectGenerator.tsx +7 -8
  80. package/src/components/SpaceGenerator/index.ts +2 -3
  81. package/src/components/SpaceGenerator/presets.ts +51 -46
  82. package/src/components/index.ts +4 -11
  83. package/src/{components → containers/DebugGraph}/DebugGraph.tsx +0 -2
  84. package/src/containers/DebugGraph/index.ts +7 -0
  85. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +47 -0
  86. package/src/containers/DebugObjectPanel/index.ts +7 -0
  87. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +55 -0
  88. package/src/containers/DebugSpaceObjectsPanel/index.ts +7 -0
  89. package/src/{components → containers/DebugStatus}/DebugStatus.tsx +41 -17
  90. package/src/containers/DebugStatus/index.ts +7 -0
  91. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
  92. package/src/containers/DevtoolsOverviewContainer/index.ts +7 -0
  93. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +130 -0
  94. package/src/containers/SpaceGenerator/index.ts +7 -0
  95. package/src/{components → containers/Wireframe}/Wireframe.tsx +2 -2
  96. package/src/containers/Wireframe/index.ts +7 -0
  97. package/src/containers/index.ts +13 -0
  98. package/src/meta.ts +1 -1
  99. package/src/translations.ts +66 -58
  100. package/src/types/Settings.ts +15 -0
  101. package/src/{types.ts → types/index.ts} +7 -13
  102. package/dist/lib/browser/DebugGraph-6VMEOKEV.mjs +0 -15
  103. package/dist/lib/browser/DebugGraph-6VMEOKEV.mjs.map +0 -7
  104. package/dist/lib/browser/DevtoolsOverviewContainer-77PKFLYV.mjs +0 -19
  105. package/dist/lib/browser/DevtoolsOverviewContainer-77PKFLYV.mjs.map +0 -7
  106. package/dist/lib/browser/SpaceGenerator-H33AEFGC.mjs +0 -1152
  107. package/dist/lib/browser/SpaceGenerator-H33AEFGC.mjs.map +0 -7
  108. package/dist/lib/browser/app-graph-builder-LV73R7HR.mjs +0 -598
  109. package/dist/lib/browser/app-graph-builder-LV73R7HR.mjs.map +0 -7
  110. package/dist/lib/browser/chunk-4UFQXPP7.mjs +0 -78
  111. package/dist/lib/browser/chunk-4UFQXPP7.mjs.map +0 -7
  112. package/dist/lib/browser/chunk-A5H5GRV6.mjs +0 -20
  113. package/dist/lib/browser/chunk-A5H5GRV6.mjs.map +0 -7
  114. package/dist/lib/browser/react-context-FSWBT3MH.mjs +0 -17
  115. package/dist/lib/browser/react-context-FSWBT3MH.mjs.map +0 -7
  116. package/dist/lib/browser/react-surface-2N6CPSHR.mjs +0 -757
  117. package/dist/lib/browser/react-surface-2N6CPSHR.mjs.map +0 -7
  118. package/dist/lib/browser/settings-KA4GN73K.mjs +0 -31
  119. package/dist/lib/browser/settings-KA4GN73K.mjs.map +0 -7
  120. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +0 -6
  121. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  122. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  123. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  124. package/dist/types/src/capabilities/react-context/index.d.ts +0 -7
  125. package/dist/types/src/capabilities/react-context/index.d.ts.map +0 -1
  126. package/dist/types/src/capabilities/react-context/react-context.d.ts.map +0 -1
  127. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  128. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  129. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  130. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  131. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  132. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  133. package/dist/types/src/capabilities/settings/settings.d.ts +0 -5
  134. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  135. package/dist/types/src/components/Container.d.ts +0 -5
  136. package/dist/types/src/components/Container.d.ts.map +0 -1
  137. package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
  138. package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
  139. package/dist/types/src/components/DebugSettings.d.ts +0 -8
  140. package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
  141. package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
  142. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
  143. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
  144. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  145. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -15
  146. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  147. package/dist/types/src/components/Wireframe.d.ts.map +0 -1
  148. package/dist/types/src/types.d.ts +0 -68
  149. package/dist/types/src/types.d.ts.map +0 -1
  150. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -420
  151. package/src/capabilities/app-graph-builder/index.ts +0 -7
  152. package/src/capabilities/react-context/index.ts +0 -7
  153. package/src/capabilities/react-context/react-context.tsx +0 -20
  154. package/src/capabilities/react-surface/index.ts +0 -7
  155. package/src/capabilities/settings/index.ts +0 -7
  156. package/src/components/Container.tsx +0 -15
  157. package/src/components/DebugObjectPanel.tsx +0 -33
  158. package/src/components/DebugSettings.tsx +0 -185
  159. package/src/components/DevtoolsOverviewContainer.tsx +0 -20
  160. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -54
  161. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -127
  162. /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
  163. /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
  164. /package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +0 -0
@@ -1,185 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import React, { useEffect, useState } from 'react';
6
-
7
- import { Common } from '@dxos/app-framework';
8
- import { useCapabilities } from '@dxos/app-framework/react';
9
- import { type ConfigProto, SaveConfig, Storage, defs } from '@dxos/config';
10
- import { log } from '@dxos/log';
11
- import { useClient } from '@dxos/react-client';
12
- import { Icon, IconButton, Input, Select, Toast, useFileDownload, useTranslation } from '@dxos/react-ui';
13
- import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
14
- import { setDeep } from '@dxos/util';
15
-
16
- import { meta } from '../meta';
17
- import { type DebugSettingsProps } from '../types';
18
-
19
- type Toast = {
20
- title: string;
21
- description?: string;
22
- };
23
-
24
- const StorageAdapters = {
25
- opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,
26
- idb: defs.Runtime.Client.Storage.StorageDriver.IDB,
27
- } as const;
28
-
29
- export type DebugSettingsComponentProps = {
30
- settings: DebugSettingsProps;
31
- onSettingsChange: (fn: (current: DebugSettingsProps) => DebugSettingsProps) => void;
32
- };
33
-
34
- export const DebugSettings = ({ settings, onSettingsChange }: DebugSettingsComponentProps) => {
35
- const { t } = useTranslation(meta.id);
36
- const [toast, setToast] = useState<Toast>();
37
- const client = useClient();
38
- const download = useFileDownload();
39
- // TODO(mykola): Get updates from other places that change Config.
40
- const [storageConfig, setStorageConfig] = useState<ConfigProto>({});
41
- const [upload] = useCapabilities(Common.Capability.FileUploader);
42
-
43
- useEffect(() => {
44
- void Storage().then((config) => setStorageConfig(config));
45
- }, []);
46
-
47
- const handleToast = (toast: Toast) => {
48
- setToast(toast);
49
- const t = setTimeout(() => setToast(undefined), 5_000);
50
- return () => clearTimeout(t);
51
- };
52
-
53
- const handleDownload = async () => {
54
- const data = await client.diagnostics();
55
- const file = new Blob([JSON.stringify(data, undefined, 2)], {
56
- type: 'text/plain',
57
- });
58
- const fileName = `composer-${new Date().toISOString().replace(/\W/g, '-')}.json`;
59
- download(file, fileName);
60
-
61
- if (upload) {
62
- const info = await upload(client.spaces.default.db, new File([file], fileName));
63
- if (!info) {
64
- log.error('diagnostics failed to upload to IPFS');
65
- return;
66
- }
67
- handleToast({
68
- title: t('settings uploaded'),
69
- description: t('settings uploaded to clipboard'),
70
- });
71
-
72
- // TODO(nf): move to IpfsPlugin?
73
- const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;
74
- void navigator.clipboard.writeText(url);
75
- handleToast({
76
- title: t('settings uploaded'),
77
- description: t('settings uploaded to clipboard'),
78
- });
79
- log.info('diagnostics', { url });
80
- }
81
- };
82
-
83
- const handleRepair = async () => {
84
- try {
85
- const info = await client.repair();
86
- setStorageConfig(await Storage());
87
- handleToast({
88
- title: t('settings repair success'),
89
- description: JSON.stringify(info, undefined, 2),
90
- });
91
- } catch (err: any) {
92
- handleToast({
93
- title: t('settings repair failed'),
94
- description: err.message,
95
- });
96
- }
97
- };
98
-
99
- return (
100
- <ControlPage>
101
- <ControlSection title={t('settings title', { ns: meta.id })}>
102
- <ControlGroup>
103
- <ControlItemInput title={t('settings wireframe')}>
104
- <Input.Switch
105
- checked={settings.wireframe}
106
- onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, wireframe: !!checked }))}
107
- />
108
- </ControlItemInput>
109
- <ControlItemInput title={t('settings download diagnostics')}>
110
- <IconButton
111
- icon='ph--download-simple--regular'
112
- iconOnly
113
- label={t('settings download diagnostics')}
114
- onClick={handleDownload}
115
- />
116
- </ControlItemInput>
117
- <ControlItemInput title={t('settings repair')}>
118
- <IconButton
119
- icon='ph--first-aid-kit--regular'
120
- iconOnly
121
- label={t('settings repair')}
122
- onClick={handleRepair}
123
- />
124
- </ControlItemInput>
125
-
126
- {/* TODO(burdon): Move to layout? */}
127
- {toast && (
128
- <Toast.Root>
129
- <Toast.Body>
130
- <Toast.Title>
131
- <Icon icon='ph--gift--duotone' size={5} classNames='inline mr-1' />
132
- <span>{toast.title}</span>
133
- </Toast.Title>
134
- {toast.description && <Toast.Description>{toast.description}</Toast.Description>}
135
- </Toast.Body>
136
- </Toast.Root>
137
- )}
138
-
139
- <ControlItemInput title={t('settings choose storage adaptor')}>
140
- <Select.Root
141
- value={
142
- Object.entries(StorageAdapters).find(
143
- ([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,
144
- )?.[0]
145
- }
146
- onValueChange={(value) => {
147
- if (confirm(t('settings storage adapter changed alert'))) {
148
- updateConfig(
149
- storageConfig,
150
- setStorageConfig,
151
- ['runtime', 'client', 'storage', 'dataStore'],
152
- StorageAdapters[value as keyof typeof StorageAdapters],
153
- );
154
- }
155
- }}
156
- >
157
- <Select.TriggerButton placeholder={t('settings data store label')} />
158
- <Select.Portal>
159
- <Select.Content>
160
- <Select.Viewport>
161
- {Object.keys(StorageAdapters).map((key) => (
162
- <Select.Option key={key} value={key}>
163
- {t(`settings storage adaptor ${key} label`)}
164
- </Select.Option>
165
- ))}
166
- </Select.Viewport>
167
- <Select.Arrow />
168
- </Select.Content>
169
- </Select.Portal>
170
- </Select.Root>
171
- </ControlItemInput>
172
- </ControlGroup>
173
- </ControlSection>
174
- </ControlPage>
175
- );
176
- };
177
-
178
- const updateConfig = (config: ConfigProto, setConfig: (newConfig: ConfigProto) => void, path: string[], value: any) => {
179
- const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));
180
- setDeep(storageConfigCopy, path, value);
181
- setConfig(storageConfigCopy);
182
- queueMicrotask(async () => {
183
- await SaveConfig(storageConfigCopy);
184
- });
185
- };
@@ -1,20 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { Surface } from '@dxos/app-framework/react';
8
- import { StatsPanel, useStats } from '@dxos/devtools';
9
-
10
- export const DevtoolsOverviewContainer = () => {
11
- const [stats, refreshStats] = useStats();
12
-
13
- return (
14
- <StatsPanel stats={stats} onRefresh={refreshStats}>
15
- <Surface role='devtools-overview' />
16
- </StatsPanel>
17
- );
18
- };
19
-
20
- export default DevtoolsOverviewContainer;
@@ -1,54 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import * as Effect from 'effect/Effect';
7
- import React from 'react';
8
-
9
- import { OperationPlugin } from '@dxos/app-framework';
10
- import { withPluginManager } from '@dxos/app-framework/testing';
11
- import { ClientPlugin } from '@dxos/plugin-client';
12
- import { useSpaces } from '@dxos/react-client/echo';
13
- import { withTheme } from '@dxos/react-ui/testing';
14
- import { render } from '@dxos/storybook-utils';
15
-
16
- import { SpaceGenerator } from './SpaceGenerator';
17
-
18
- const DefaultStory = () => {
19
- const [space] = useSpaces();
20
- if (!space) {
21
- return null;
22
- }
23
-
24
- return <SpaceGenerator space={space} />;
25
- };
26
-
27
- const meta = {
28
- title: 'plugins/plugin-debug/SpaceGenerator',
29
- component: SpaceGenerator as any,
30
- render: render(DefaultStory),
31
- decorators: [
32
- withTheme,
33
- withPluginManager({
34
- plugins: [
35
- ClientPlugin({
36
- onClientInitialized: ({ client }) =>
37
- Effect.gen(function* () {
38
- yield* Effect.promise(() => client.halo.createIdentity());
39
- }),
40
- }),
41
- OperationPlugin(),
42
- ],
43
- }),
44
- ],
45
- parameters: {
46
- layout: 'fullscreen',
47
- },
48
- } satisfies Meta<typeof DefaultStory>;
49
-
50
- export default meta;
51
-
52
- type Story = StoryObj<typeof meta>;
53
-
54
- export const Default: Story = {};
@@ -1,127 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import React, { useCallback, useMemo, useState } from 'react';
6
-
7
- import { useOperationInvoker } from '@dxos/app-framework/react';
8
- import { ComputeGraph } from '@dxos/conductor';
9
- import { Filter, Obj, type Type } from '@dxos/echo';
10
- import { Markdown } from '@dxos/plugin-markdown/types';
11
- import { Sheet } from '@dxos/plugin-sheet/types';
12
- import { Diagram } from '@dxos/plugin-sketch/types';
13
- import { useClient } from '@dxos/react-client';
14
- import { type Space } from '@dxos/react-client/echo';
15
- import { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';
16
- import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
17
- import { Organization, Person, Task } from '@dxos/types';
18
- import { jsonKeyReplacer, sortKeys } from '@dxos/util';
19
-
20
- import { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';
21
- import { generator } from './presets';
22
- import { SchemaTable } from './SchemaTable';
23
-
24
- export type SpaceGeneratorProps = {
25
- space: Space;
26
- onCreateObjects?: (objects: Obj.Unknown[]) => void;
27
- };
28
-
29
- export const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {
30
- const { invokePromise } = useOperationInvoker();
31
- const client = useClient();
32
- const staticTypes = [Markdown.Document, Diagram.Diagram, Sheet.Sheet, ComputeGraph]; // TODO(burdon): Make extensible.
33
- const recordTypes: Type.Obj.Any[] = [Organization.Organization, Person.Person, Task.Task];
34
- const [count, setCount] = useState(1);
35
- const [info, setInfo] = useState<any>({});
36
- const presets = useMemo(() => generator(), []);
37
-
38
- // Register types.
39
- useAsyncEffect(async () => {
40
- await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);
41
- }, [client]);
42
-
43
- // Create type generators.
44
- const typeMap = useMemo(() => {
45
- const recordGenerators = new Map<string, ObjectGenerator<any>>(
46
- recordTypes.map((type) => [type.typename, createGenerator(client, invokePromise, type)]),
47
- );
48
-
49
- return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);
50
- }, [client, recordTypes, invokePromise]);
51
-
52
- // Query space to get info.
53
- const updateInfo = async () => {
54
- // Create schema map.
55
- const echoSchema = await space.db.schemaRegistry.query().run();
56
- const staticSchema = await space.db.graph.schemaRegistry.query().run();
57
-
58
- // Create object map.
59
- const objects = await space.db.query(Filter.everything()).run();
60
- const objectMap = sortKeys(
61
- objects.reduce<Record<string, number>>((map, obj) => {
62
- const type = Obj.getTypename(obj);
63
- if (type) {
64
- const count = map[type] ?? 0;
65
- map[type] = count + 1;
66
- }
67
-
68
- return map;
69
- }, {}),
70
- );
71
-
72
- setInfo({
73
- schema: {
74
- static: staticSchema.length,
75
- mutable: echoSchema.length,
76
- },
77
- objects: objectMap,
78
- });
79
- };
80
-
81
- useAsyncEffect(updateInfo, [space]);
82
-
83
- const handleCreateData = useCallback(
84
- async (typename: string) => {
85
- const constructor = typeMap.get(typename);
86
- if (constructor) {
87
- // TODO(burdon): Input to specify number of objects.
88
- await constructor(space, count, onCreateObjects);
89
- await updateInfo();
90
- }
91
- },
92
- [typeMap, count],
93
- );
94
-
95
- return (
96
- <div role='none' className='flex flex-col grow overflow-hidden'>
97
- <Toolbar.Root classNames='border-be border-subduedSeparator'>
98
- <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />
99
- <Toolbar.Separator variant='gap' />
100
- <Input.Root>
101
- <Input.TextInput
102
- type='number'
103
- min={1}
104
- max={100}
105
- placeholder={'Count'}
106
- classNames='!w-[4rem] !text-right'
107
- size={8}
108
- value={count}
109
- onChange={(ev) => setCount(parseInt(ev.target.value))}
110
- />
111
- </Input.Root>
112
- </Toolbar.Root>
113
-
114
- <div className='flex flex-col overflow-y-auto divide-y divide-separator'>
115
- <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />
116
- <SchemaTable types={recordTypes} objects={info.objects} label='Record Types' onClick={handleCreateData} />
117
- <SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />
118
-
119
- <div>
120
- <SyntaxHighlighter language='json' classNames='text-xs'>
121
- {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}
122
- </SyntaxHighlighter>
123
- </div>
124
- </div>
125
- </div>
126
- );
127
- };