@dxos/react-ui-table 0.8.4-main.72ec0f3 → 0.8.4-main.8360d9e660
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/chunk-BF54SSNL.mjs +70 -0
- package/dist/lib/browser/chunk-BF54SSNL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GS2UNGJK.mjs → chunk-PTHMYAAM.mjs} +656 -680
- package/dist/lib/browser/chunk-PTHMYAAM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1158 -1028
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +30 -42
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/types/index.mjs +3 -3
- package/dist/lib/node-esm/{chunk-TRR3C5NX.mjs → chunk-GI72MQSG.mjs} +656 -679
- package/dist/lib/node-esm/chunk-GI72MQSG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SIRDIPHZ.mjs +71 -0
- package/dist/lib/node-esm/chunk-SIRDIPHZ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1158 -1028
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +30 -42
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/types/index.mjs +3 -3
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts +1 -2
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/ColumnSettings.d.ts +2 -2
- package/dist/types/src/components/Table/ColumnSettings.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.d.ts +7 -7
- package/dist/types/src/components/Table/DynamicTable.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts +4 -18
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/Relations.stories.d.ts +12 -8
- package/dist/types/src/components/Table/Relations.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/RowActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.d.ts +11 -11
- package/dist/types/src/components/Table/Table.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.stories.d.ts +71 -5
- package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts +1 -1
- package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts +10 -12
- package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +5 -7
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts +4 -4
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableToolbar/TableToolbar.d.ts +3 -3
- package/dist/types/src/components/TableToolbar/TableToolbar.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +22 -15
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAddRow.d.ts +5 -6
- package/dist/types/src/hooks/useAddRow.d.ts.map +1 -1
- package/dist/types/src/hooks/useProjectionModel.d.ts +6 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useTableModel.d.ts +9 -9
- package/dist/types/src/hooks/useTableModel.d.ts.map +1 -1
- package/dist/types/src/model/modal-controller.d.ts +5 -1
- package/dist/types/src/model/modal-controller.d.ts.map +1 -1
- package/dist/types/src/model/selection-model.d.ts +17 -8
- package/dist/types/src/model/selection-model.d.ts.map +1 -1
- package/dist/types/src/model/table-model.d.ts +104 -24
- package/dist/types/src/model/table-model.d.ts.map +1 -1
- package/dist/types/src/model/table-presentation.d.ts +3 -1
- package/dist/types/src/model/table-presentation.d.ts.map +1 -1
- package/dist/types/src/playwright/TableManager.d.ts +2 -1
- package/dist/types/src/playwright/TableManager.d.ts.map +1 -1
- package/dist/types/src/testing/useTestTableModel.d.ts +18 -15
- package/dist/types/src/testing/useTestTableModel.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +4 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Table.d.ts +26 -0
- package/dist/types/src/types/Table.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/dynamic-table.d.ts +14 -11
- package/dist/types/src/util/dynamic-table.d.ts.map +1 -1
- package/dist/types/src/util/dynamic-table.test.d.ts +2 -0
- package/dist/types/src/util/dynamic-table.test.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +2 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/query-ast.d.ts +7 -0
- package/dist/types/src/util/query-ast.d.ts.map +1 -0
- package/dist/types/src/util/sort.d.ts +12 -0
- package/dist/types/src/util/sort.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +54 -55
- package/src/components/Table/ColumnActionsMenu.tsx +10 -6
- package/src/components/Table/ColumnSettings.tsx +8 -9
- package/src/components/Table/DynamicTable.stories.tsx +16 -16
- package/src/components/Table/DynamicTable.tsx +30 -22
- package/src/components/Table/Relations.stories.tsx +39 -41
- package/src/components/Table/RowActionsMenu.tsx +3 -2
- package/src/components/Table/Table.stories.tsx +110 -92
- package/src/components/Table/Table.tsx +324 -299
- package/src/components/TableCellEditor/CellValidationMessage.tsx +5 -5
- package/src/components/TableCellEditor/FormCellEditor.tsx +118 -135
- package/src/components/TableCellEditor/TableCellEditor.stories.tsx +14 -10
- package/src/components/TableCellEditor/TableCellEditor.tsx +31 -31
- package/src/components/TableToolbar/TableToolbar.tsx +25 -19
- package/src/components/testing.ts +38 -12
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useAddRow.ts +8 -10
- package/src/hooks/useProjectionModel.ts +39 -0
- package/src/hooks/useTableModel.ts +36 -34
- package/src/model/modal-controller.ts +23 -12
- package/src/model/selection-model.ts +75 -44
- package/src/model/table-model.test.ts +82 -54
- package/src/model/table-model.ts +430 -167
- package/src/model/table-presentation.test.ts +59 -49
- package/src/model/table-presentation.ts +43 -37
- package/src/playwright/TableManager.ts +13 -6
- package/src/playwright/playwright.config.ts +1 -1
- package/src/playwright/smoke.spec.ts +49 -5
- package/src/testing/useTestTableModel.ts +45 -38
- package/src/translations.ts +3 -3
- package/src/types/Table.ts +79 -0
- package/src/types/index.ts +1 -1
- package/src/util/dynamic-table.test.ts +70 -0
- package/src/util/dynamic-table.ts +40 -26
- package/src/util/index.ts +2 -0
- package/src/util/query-ast.ts +22 -0
- package/src/util/sort.ts +90 -0
- package/src/util/table-buttons.ts +1 -1
- package/src/util/table-controls.ts +2 -2
- package/dist/lib/browser/chunk-2PFAPQL4.mjs +0 -66
- package/dist/lib/browser/chunk-2PFAPQL4.mjs.map +0 -7
- package/dist/lib/browser/chunk-GS2UNGJK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6POOFFYF.mjs +0 -67
- package/dist/lib/node-esm/chunk-6POOFFYF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TRR3C5NX.mjs.map +0 -7
- package/dist/types/src/model/table-sorting.d.ts +0 -52
- package/dist/types/src/model/table-sorting.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -28
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/model/table-sorting.ts +0 -225
- package/src/types/schema.ts +0 -73
|
@@ -6,41 +6,34 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
|
6
6
|
import * as Schema from 'effect/Schema';
|
|
7
7
|
import React, { useCallback } from 'react';
|
|
8
8
|
|
|
9
|
-
import { Obj, type QueryAST, Type } from '@dxos/echo';
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
FormatAnnotation,
|
|
13
|
-
FormatEnum,
|
|
14
|
-
GeneratorAnnotation,
|
|
15
|
-
LabelAnnotation,
|
|
16
|
-
PropertyMetaAnnotationId,
|
|
17
|
-
} from '@dxos/echo/internal';
|
|
18
|
-
import { live } from '@dxos/echo/internal';
|
|
9
|
+
import { Annotation, type Database, Format, Obj, type QueryAST, Ref, Type } from '@dxos/echo';
|
|
10
|
+
import { View } from '@dxos/echo';
|
|
11
|
+
import { type Mutable, PropertyMetaAnnotationId } from '@dxos/echo/internal';
|
|
19
12
|
import { invariant } from '@dxos/invariant';
|
|
20
13
|
import { faker } from '@dxos/random';
|
|
21
14
|
import { PublicKey } from '@dxos/react-client';
|
|
22
|
-
import { type Space } from '@dxos/react-client/echo';
|
|
23
15
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
16
|
+
import { Panel, ScrollArea } from '@dxos/react-ui';
|
|
17
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
18
|
+
import { ViewEditor, translations as formTranslations } from '@dxos/react-ui-form';
|
|
26
19
|
import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
20
|
+
import { ViewModel, getSchemaFromPropertyDefinitions, getTypenameFromQuery } from '@dxos/schema';
|
|
21
|
+
import { TestSchema, createObjectFactory } from '@dxos/schema/testing';
|
|
22
|
+
import { withRegistry } from '@dxos/storybook-utils';
|
|
29
23
|
|
|
30
24
|
import { useTestTableModel } from '../../testing';
|
|
31
25
|
import { translations } from '../../translations';
|
|
32
26
|
import { Table } from '../../types';
|
|
33
|
-
import { TableToolbar } from '../TableToolbar';
|
|
34
27
|
|
|
35
28
|
import { Table as TableComponent } from './Table';
|
|
36
29
|
|
|
37
|
-
const
|
|
30
|
+
const Example = Schema.Struct({
|
|
38
31
|
// TODO(wittjosiah): Should be title. Currently name to work with default label.
|
|
39
32
|
name: Schema.optional(Schema.String).annotations({ title: 'Title' }),
|
|
40
33
|
urgent: Schema.optional(Schema.Boolean).annotations({ title: 'Urgent' }),
|
|
41
34
|
status: Schema.optional(
|
|
42
35
|
Schema.Literal('todo', 'in-progress', 'done')
|
|
43
|
-
.pipe(FormatAnnotation.set(
|
|
36
|
+
.pipe(Format.FormatAnnotation.set(Format.TypeFormat.SingleSelect))
|
|
44
37
|
.annotations({
|
|
45
38
|
title: 'Status',
|
|
46
39
|
[PropertyMetaAnnotationId]: {
|
|
@@ -55,24 +48,24 @@ const TestSchema = Schema.Struct({
|
|
|
55
48
|
}),
|
|
56
49
|
),
|
|
57
50
|
description: Schema.optional(Schema.String).annotations({ title: 'Description' }),
|
|
58
|
-
parent: Schema.optional(Schema.suspend(():
|
|
51
|
+
parent: Schema.optional(Schema.suspend((): Ref.RefSchema<Example> => Ref.Ref(Example))).annotations({
|
|
59
52
|
title: 'Parent',
|
|
60
53
|
}),
|
|
61
54
|
}).pipe(
|
|
62
|
-
Type.
|
|
63
|
-
LabelAnnotation.set(['name']),
|
|
55
|
+
Type.object({ typename: `com.example.type.${PublicKey.random().truncate()}`, version: '0.1.0' }),
|
|
56
|
+
Annotation.LabelAnnotation.set(['name']),
|
|
64
57
|
);
|
|
65
|
-
interface
|
|
58
|
+
interface Example extends Schema.Schema.Type<typeof Example> {}
|
|
66
59
|
|
|
67
60
|
const StoryViewEditor = ({
|
|
68
61
|
view,
|
|
69
62
|
schema,
|
|
70
|
-
|
|
63
|
+
db,
|
|
71
64
|
handleDeleteColumn,
|
|
72
65
|
}: {
|
|
73
66
|
view?: View.View;
|
|
74
67
|
schema?: Schema.Schema.AnyNoContext;
|
|
75
|
-
|
|
68
|
+
db?: Database.Database;
|
|
76
69
|
handleDeleteColumn: (fieldId: string) => void;
|
|
77
70
|
}) => {
|
|
78
71
|
const handleQueryChanged = useCallback(
|
|
@@ -81,7 +74,9 @@ const StoryViewEditor = ({
|
|
|
81
74
|
invariant(Type.isMutable(schema));
|
|
82
75
|
schema.updateTypename(getTypenameFromQuery(newQuery));
|
|
83
76
|
invariant(view);
|
|
84
|
-
view
|
|
77
|
+
Obj.change(view, (v) => {
|
|
78
|
+
v.query.ast = newQuery as Mutable<typeof newQuery>;
|
|
79
|
+
});
|
|
85
80
|
},
|
|
86
81
|
[schema, view],
|
|
87
82
|
);
|
|
@@ -92,7 +87,7 @@ const StoryViewEditor = ({
|
|
|
92
87
|
|
|
93
88
|
return (
|
|
94
89
|
<ViewEditor
|
|
95
|
-
registry={
|
|
90
|
+
registry={db?.schemaRegistry}
|
|
96
91
|
schema={schema}
|
|
97
92
|
view={view}
|
|
98
93
|
onQueryChanged={handleQueryChanged}
|
|
@@ -106,44 +101,53 @@ const StoryViewEditor = ({
|
|
|
106
101
|
//
|
|
107
102
|
|
|
108
103
|
const DefaultStory = () => {
|
|
109
|
-
const {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (!schema || !view) {
|
|
104
|
+
const { db, schema, table, tableRef, model, presentation, handleInsertRow, handleSaveView, handleDeleteColumn } =
|
|
105
|
+
useTestTableModel();
|
|
106
|
+
|
|
107
|
+
const handleRowClick = useCallback(
|
|
108
|
+
(row: any) => {
|
|
109
|
+
if (model?.getDraftRowCount() === 0 && ['frozenRowsEnd', 'fixedEndStart', 'fixedEndEnd'].includes(row?.plane)) {
|
|
110
|
+
handleInsertRow();
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
[model, handleInsertRow],
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
if (!schema || !table?.view.target) {
|
|
123
117
|
return <div />;
|
|
124
118
|
}
|
|
125
119
|
|
|
126
120
|
return (
|
|
127
121
|
<div className='grow grid grid-cols-[1fr_350px]'>
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
122
|
+
<TableComponent.Root>
|
|
123
|
+
<Panel.Root>
|
|
124
|
+
<Panel.Toolbar asChild>
|
|
125
|
+
<TableComponent.Toolbar
|
|
126
|
+
classNames='border-b border-subdued-separator'
|
|
127
|
+
onAdd={handleInsertRow}
|
|
128
|
+
onSave={handleSaveView}
|
|
129
|
+
/>
|
|
130
|
+
</Panel.Toolbar>
|
|
131
|
+
<Panel.Content asChild>
|
|
132
|
+
<TableComponent.Main
|
|
133
|
+
ref={tableRef}
|
|
134
|
+
schema={schema}
|
|
135
|
+
model={model}
|
|
136
|
+
presentation={presentation}
|
|
137
|
+
onRowClick={handleRowClick}
|
|
138
|
+
ignoreAttention
|
|
139
|
+
/>
|
|
140
|
+
</Panel.Content>
|
|
141
|
+
</Panel.Root>
|
|
142
|
+
</TableComponent.Root>
|
|
143
|
+
<ScrollArea.Root orientation='vertical' classNames='border-l border-separator'>
|
|
144
|
+
<ScrollArea.Viewport>
|
|
145
|
+
<StoryViewEditor view={table.view.target} schema={schema} db={db} handleDeleteColumn={handleDeleteColumn} />
|
|
146
|
+
<SyntaxHighlighter language='json' className='text-xs'>
|
|
147
|
+
{JSON.stringify({ view: table.view.target, schema }, null, 2)}
|
|
148
|
+
</SyntaxHighlighter>
|
|
149
|
+
</ScrollArea.Viewport>
|
|
150
|
+
</ScrollArea.Root>
|
|
147
151
|
</div>
|
|
148
152
|
);
|
|
149
153
|
};
|
|
@@ -154,26 +158,31 @@ type StoryProps = { rows?: number };
|
|
|
154
158
|
// Story definitions.
|
|
155
159
|
//
|
|
156
160
|
|
|
157
|
-
// TODO(burdon): Need
|
|
161
|
+
// TODO(burdon): Need simpler story.
|
|
158
162
|
|
|
159
163
|
const meta = {
|
|
160
164
|
title: 'ui/react-ui-table/Table',
|
|
161
165
|
render: DefaultStory,
|
|
162
166
|
decorators: [
|
|
163
|
-
withTheme,
|
|
167
|
+
withTheme(),
|
|
168
|
+
withLayout({ layout: 'fullscreen' }),
|
|
169
|
+
withRegistry,
|
|
164
170
|
withClientProvider({
|
|
165
171
|
types: [View.View, Table.Table],
|
|
166
172
|
createIdentity: true,
|
|
167
173
|
createSpace: true,
|
|
168
|
-
onCreateSpace: async ({
|
|
169
|
-
const [schema] = await space.db.schemaRegistry.register([
|
|
170
|
-
const { view } = await
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
174
|
+
onCreateSpace: async ({ space }) => {
|
|
175
|
+
const [schema] = await space.db.schemaRegistry.register([Example]);
|
|
176
|
+
const { view, jsonSchema } = await ViewModel.makeFromDatabase({ db: space.db, typename: schema.typename });
|
|
177
|
+
const table = Table.make({ view, jsonSchema });
|
|
178
|
+
Obj.change(view, (v) => {
|
|
179
|
+
v.projection.fields = [
|
|
180
|
+
v.projection.fields.find((field) => field.path === 'name')!,
|
|
181
|
+
...v.projection.fields.filter((field) => field.path !== 'name'),
|
|
182
|
+
];
|
|
183
|
+
});
|
|
175
184
|
|
|
176
|
-
space.db.add(
|
|
185
|
+
space.db.add(table);
|
|
177
186
|
|
|
178
187
|
Array.from({ length: 10 }).map(() => {
|
|
179
188
|
return space.db.add(
|
|
@@ -192,7 +201,7 @@ const meta = {
|
|
|
192
201
|
controls: {
|
|
193
202
|
disable: true,
|
|
194
203
|
},
|
|
195
|
-
translations,
|
|
204
|
+
translations: [...translations, ...formTranslations],
|
|
196
205
|
},
|
|
197
206
|
} satisfies Meta<typeof TableComponent>;
|
|
198
207
|
|
|
@@ -209,26 +218,30 @@ export const StaticSchema: StoryObj = {
|
|
|
209
218
|
types: [View.View, Table.Table],
|
|
210
219
|
createIdentity: true,
|
|
211
220
|
createSpace: true,
|
|
212
|
-
onCreateSpace: async ({
|
|
213
|
-
const { view } = await
|
|
214
|
-
|
|
221
|
+
onCreateSpace: async ({ space }) => {
|
|
222
|
+
const { view, jsonSchema } = await ViewModel.makeFromDatabase({
|
|
223
|
+
db: space.db,
|
|
224
|
+
typename: TestSchema.Person.typename,
|
|
225
|
+
});
|
|
226
|
+
const table = Table.make({ view, jsonSchema });
|
|
227
|
+
space.db.add(table);
|
|
215
228
|
|
|
216
229
|
const factory = createObjectFactory(space.db, faker as any);
|
|
217
230
|
await factory([
|
|
218
|
-
{ type:
|
|
219
|
-
// { type:
|
|
231
|
+
{ type: TestSchema.Person, count: 10 },
|
|
232
|
+
// { type: TestSchema.Organization, count: 1 },
|
|
220
233
|
]);
|
|
221
234
|
},
|
|
222
235
|
}),
|
|
223
236
|
],
|
|
224
237
|
parameters: {
|
|
225
238
|
layout: 'fullscreen',
|
|
226
|
-
translations,
|
|
239
|
+
translations: [...translations, ...formTranslations],
|
|
227
240
|
},
|
|
228
241
|
};
|
|
229
242
|
|
|
230
243
|
const ContactWithArrayOfEmails = Schema.Struct({
|
|
231
|
-
name: Schema.String.pipe(GeneratorAnnotation.set('person.fullName')),
|
|
244
|
+
name: Schema.String.pipe(Annotation.GeneratorAnnotation.set('person.fullName')),
|
|
232
245
|
emails: Schema.optional(
|
|
233
246
|
Schema.Array(
|
|
234
247
|
Schema.Struct({
|
|
@@ -238,8 +251,8 @@ const ContactWithArrayOfEmails = Schema.Struct({
|
|
|
238
251
|
),
|
|
239
252
|
),
|
|
240
253
|
}).pipe(
|
|
241
|
-
|
|
242
|
-
typename: 'dxos.
|
|
254
|
+
Type.object({
|
|
255
|
+
typename: 'org.dxos.type.contact-with-array-of-emails',
|
|
243
256
|
version: '0.1.0',
|
|
244
257
|
}),
|
|
245
258
|
);
|
|
@@ -248,17 +261,21 @@ export const ArrayOfObjects: StoryObj = {
|
|
|
248
261
|
render: DefaultStory,
|
|
249
262
|
decorators: [
|
|
250
263
|
withClientProvider({
|
|
251
|
-
types: [View.View, Table.Table,
|
|
264
|
+
types: [View.View, Table.Table, TestSchema.Person, TestSchema.Organization, ContactWithArrayOfEmails],
|
|
252
265
|
createIdentity: true,
|
|
253
266
|
createSpace: true,
|
|
254
|
-
onCreateSpace: async ({
|
|
255
|
-
const { view } = await
|
|
256
|
-
|
|
267
|
+
onCreateSpace: async ({ space }) => {
|
|
268
|
+
const { view, jsonSchema } = await ViewModel.makeFromDatabase({
|
|
269
|
+
db: space.db,
|
|
270
|
+
typename: ContactWithArrayOfEmails.typename,
|
|
271
|
+
});
|
|
272
|
+
const table = Table.make({ view, jsonSchema });
|
|
273
|
+
space.db.add(table);
|
|
257
274
|
|
|
258
275
|
const factory = createObjectFactory(space.db, faker as any);
|
|
259
276
|
await factory([
|
|
260
|
-
// { type:
|
|
261
|
-
// { type:
|
|
277
|
+
// { type: TestSchema.Person, count: 10 },
|
|
278
|
+
// { type: TestSchema.Organization, count: 1 },
|
|
262
279
|
{ type: ContactWithArrayOfEmails, count: 10 },
|
|
263
280
|
]);
|
|
264
281
|
},
|
|
@@ -278,9 +295,9 @@ export const Tags: Meta<StoryProps> = {
|
|
|
278
295
|
types: [View.View, Table.Table],
|
|
279
296
|
createIdentity: true,
|
|
280
297
|
createSpace: true,
|
|
281
|
-
onCreateSpace: async ({
|
|
298
|
+
onCreateSpace: async ({ space }) => {
|
|
282
299
|
// Configure schema.
|
|
283
|
-
const typename = 'example.
|
|
300
|
+
const typename = 'com.example.type.single-select';
|
|
284
301
|
const selectOptions = [
|
|
285
302
|
{ id: 'one', title: 'One', color: 'emerald' },
|
|
286
303
|
{ id: 'two', title: 'Two', color: 'blue' },
|
|
@@ -294,25 +311,26 @@ export const Tags: Meta<StoryProps> = {
|
|
|
294
311
|
const schema = getSchemaFromPropertyDefinitions(typename, [
|
|
295
312
|
{
|
|
296
313
|
name: 'single',
|
|
297
|
-
format:
|
|
314
|
+
format: Format.TypeFormat.SingleSelect,
|
|
298
315
|
config: { options: selectOptions },
|
|
299
316
|
},
|
|
300
317
|
{
|
|
301
318
|
name: 'multiple',
|
|
302
|
-
format:
|
|
319
|
+
format: Format.TypeFormat.MultiSelect,
|
|
303
320
|
config: { options: selectOptions },
|
|
304
321
|
},
|
|
305
322
|
]);
|
|
306
323
|
const [storedSchema] = await space.db.schemaRegistry.register([schema]);
|
|
307
324
|
|
|
308
325
|
// Initialize table.
|
|
309
|
-
const { view } = await
|
|
310
|
-
|
|
326
|
+
const { view, jsonSchema } = await ViewModel.makeFromDatabase({ db: space.db, typename });
|
|
327
|
+
const table = Table.make({ view, jsonSchema });
|
|
328
|
+
space.db.add(table);
|
|
311
329
|
|
|
312
330
|
// Populate.
|
|
313
331
|
Array.from({ length: 10 }).map(() => {
|
|
314
332
|
return space.db.add(
|
|
315
|
-
|
|
333
|
+
Obj.make(storedSchema, {
|
|
316
334
|
single: faker.helpers.arrayElement([...selectOptionIds, undefined]),
|
|
317
335
|
multiple: faker.helpers.randomSubset(selectOptionIds),
|
|
318
336
|
}),
|