@dxos/react-ui-form 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +0 -1
  2. package/dist/lib/browser/index.mjs +2289 -2269
  3. package/dist/lib/browser/index.mjs.map +4 -4
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/node-esm/index.mjs +2289 -2269
  6. package/dist/lib/node-esm/index.mjs.map +4 -4
  7. package/dist/lib/node-esm/meta.json +1 -1
  8. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +8 -7
  9. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  10. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +13 -7
  11. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Form/Form.d.ts +81 -26
  13. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  14. package/dist/types/src/components/Form/Form.stories.d.ts +59 -84
  15. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/Form/FormField.d.ts +37 -0
  17. package/dist/types/src/components/Form/FormField.d.ts.map +1 -0
  18. package/dist/types/src/components/Form/FormFieldComponent.d.ts +78 -0
  19. package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -0
  20. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +9 -0
  21. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -0
  22. package/dist/types/src/components/Form/FormFieldSet.d.ts +19 -0
  23. package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -0
  24. package/dist/types/src/components/Form/fields/ArrayField.d.ts +18 -0
  25. package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -0
  26. package/dist/types/src/components/Form/fields/BooleanField.d.ts +4 -0
  27. package/dist/types/src/components/Form/fields/BooleanField.d.ts.map +1 -0
  28. package/dist/types/src/components/Form/fields/GeoPointField.d.ts +5 -0
  29. package/dist/types/src/components/Form/fields/GeoPointField.d.ts.map +1 -0
  30. package/dist/types/src/components/Form/fields/MarkdownField.d.ts +4 -0
  31. package/dist/types/src/components/Form/fields/MarkdownField.d.ts.map +1 -0
  32. package/dist/types/src/components/Form/fields/NumberField.d.ts +4 -0
  33. package/dist/types/src/components/Form/fields/NumberField.d.ts.map +1 -0
  34. package/dist/types/src/components/Form/fields/RefField.d.ts +14 -0
  35. package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -0
  36. package/dist/types/src/components/Form/fields/SelectField.d.ts +10 -0
  37. package/dist/types/src/components/Form/fields/SelectField.d.ts.map +1 -0
  38. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts +5 -0
  39. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts.map +1 -0
  40. package/dist/types/src/components/{ControlSection/ControlSection.stories.d.ts → Form/fields/SelectOptionField.stories.d.ts} +12 -14
  41. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts.map +1 -0
  42. package/dist/types/src/components/Form/fields/TextAreaField.d.ts +4 -0
  43. package/dist/types/src/components/Form/fields/TextAreaField.d.ts.map +1 -0
  44. package/dist/types/src/components/Form/fields/TextField.d.ts +4 -0
  45. package/dist/types/src/components/Form/fields/TextField.d.ts.map +1 -0
  46. package/dist/types/src/components/Form/fields/TupleField.d.ts +6 -0
  47. package/dist/types/src/components/Form/fields/TupleField.d.ts.map +1 -0
  48. package/dist/types/src/components/Form/fields/index.d.ts +12 -0
  49. package/dist/types/src/components/Form/fields/index.d.ts.map +1 -0
  50. package/dist/types/src/components/Form/index.d.ts +2 -4
  51. package/dist/types/src/components/Form/index.d.ts.map +1 -1
  52. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +15 -10
  53. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -1
  54. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +10 -6
  55. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/Settings/Settings.d.ts +56 -0
  57. package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
  58. package/dist/types/src/components/{Form/custom/SelectOptionsInput.stories.d.ts → Settings/Settings.stories.d.ts} +10 -8
  59. package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Settings/index.d.ts +2 -0
  61. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  62. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +16 -16
  63. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  64. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +13 -9
  65. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/index.d.ts +1 -1
  67. package/dist/types/src/components/index.d.ts.map +1 -1
  68. package/dist/types/src/components/testing.d.ts +0 -2
  69. package/dist/types/src/components/testing.d.ts.map +1 -1
  70. package/dist/types/src/hooks/index.d.ts +2 -3
  71. package/dist/types/src/hooks/index.d.ts.map +1 -1
  72. package/dist/types/src/hooks/useFormHandler.d.ts +82 -0
  73. package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -0
  74. package/dist/types/src/hooks/useKeyHandler.d.ts +6 -0
  75. package/dist/types/src/hooks/useKeyHandler.d.ts.map +1 -0
  76. package/dist/types/src/translations.d.ts +10 -7
  77. package/dist/types/src/translations.d.ts.map +1 -1
  78. package/dist/types/src/util/field.d.ts +3 -3
  79. package/dist/types/src/util/field.d.ts.map +1 -1
  80. package/dist/types/src/util/formatting.d.ts +2 -2
  81. package/dist/types/src/util/formatting.d.ts.map +1 -1
  82. package/dist/types/src/util/index.d.ts +1 -1
  83. package/dist/types/src/util/index.d.ts.map +1 -1
  84. package/dist/types/src/util/properties.d.ts +7 -0
  85. package/dist/types/src/util/properties.d.ts.map +1 -0
  86. package/dist/types/src/util/refs.d.ts +1 -2
  87. package/dist/types/src/util/refs.d.ts.map +1 -1
  88. package/dist/types/tsconfig.tsbuildinfo +1 -1
  89. package/package.json +50 -46
  90. package/src/components/FieldEditor/FieldEditor.stories.tsx +43 -24
  91. package/src/components/FieldEditor/FieldEditor.tsx +74 -78
  92. package/src/components/Form/Form.stories.tsx +149 -248
  93. package/src/components/Form/Form.tsx +347 -107
  94. package/src/components/Form/FormField.tsx +294 -0
  95. package/src/components/Form/FormFieldComponent.stories.tsx +65 -0
  96. package/src/components/Form/FormFieldComponent.tsx +172 -0
  97. package/src/components/Form/FormFieldSet.tsx +123 -0
  98. package/src/components/Form/README.md +3 -0
  99. package/src/components/Form/fields/ArrayField.tsx +149 -0
  100. package/src/components/Form/fields/BooleanField.tsx +22 -0
  101. package/src/components/Form/fields/GeoPointField.tsx +120 -0
  102. package/src/components/Form/fields/MarkdownField.tsx +78 -0
  103. package/src/components/Form/fields/NumberField.tsx +39 -0
  104. package/src/components/Form/fields/RefField.tsx +189 -0
  105. package/src/components/Form/fields/SelectField.tsx +65 -0
  106. package/src/components/Form/{custom/SelectOptionsInput.stories.tsx → fields/SelectOptionField.stories.tsx} +19 -16
  107. package/src/components/Form/{custom/SelectOptionsInput.tsx → fields/SelectOptionField.tsx} +23 -17
  108. package/src/components/Form/fields/TextAreaField.tsx +38 -0
  109. package/src/components/Form/fields/TextField.tsx +38 -0
  110. package/src/components/Form/{custom/TupleInput.tsx → fields/TupleField.tsx} +15 -8
  111. package/src/components/Form/fields/index.ts +15 -0
  112. package/src/components/Form/index.ts +3 -4
  113. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +40 -37
  114. package/src/components/ObjectPicker/ObjectPicker.tsx +84 -70
  115. package/src/components/Settings/Settings.stories.tsx +56 -0
  116. package/src/components/Settings/Settings.tsx +230 -0
  117. package/src/components/{ControlSection → Settings}/index.ts +1 -1
  118. package/src/components/ViewEditor/ViewEditor.stories.tsx +69 -49
  119. package/src/components/ViewEditor/ViewEditor.test.tsx +8 -6
  120. package/src/components/ViewEditor/ViewEditor.tsx +302 -271
  121. package/src/components/index.ts +1 -1
  122. package/src/components/testing.tsx +12 -7
  123. package/src/hooks/index.ts +2 -3
  124. package/src/hooks/useFormHandler.ts +380 -0
  125. package/src/hooks/useKeyHandler.tsx +37 -0
  126. package/src/translations.ts +12 -10
  127. package/src/util/field.ts +25 -25
  128. package/src/util/formatting.ts +22 -22
  129. package/src/util/index.ts +1 -1
  130. package/src/util/properties.ts +18 -0
  131. package/src/util/refs.ts +11 -17
  132. package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
  133. package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
  134. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
  135. package/dist/types/src/components/ControlSection/index.d.ts +0 -2
  136. package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
  137. package/dist/types/src/components/Form/ArrayField.d.ts +0 -16
  138. package/dist/types/src/components/Form/ArrayField.d.ts.map +0 -1
  139. package/dist/types/src/components/Form/Defaults.d.ts +0 -14
  140. package/dist/types/src/components/Form/Defaults.d.ts.map +0 -1
  141. package/dist/types/src/components/Form/FormActions.d.ts +0 -9
  142. package/dist/types/src/components/Form/FormActions.d.ts.map +0 -1
  143. package/dist/types/src/components/Form/FormContent.d.ts +0 -63
  144. package/dist/types/src/components/Form/FormContent.d.ts.map +0 -1
  145. package/dist/types/src/components/Form/FormContext.d.ts +0 -23
  146. package/dist/types/src/components/Form/FormContext.d.ts.map +0 -1
  147. package/dist/types/src/components/Form/Input.d.ts +0 -29
  148. package/dist/types/src/components/Form/Input.d.ts.map +0 -1
  149. package/dist/types/src/components/Form/RefField.d.ts +0 -21
  150. package/dist/types/src/components/Form/RefField.d.ts.map +0 -1
  151. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +0 -4
  152. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +0 -1
  153. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +0 -4
  154. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +0 -1
  155. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +0 -1
  156. package/dist/types/src/components/Form/custom/TupleInput.d.ts +0 -6
  157. package/dist/types/src/components/Form/custom/TupleInput.d.ts.map +0 -1
  158. package/dist/types/src/components/Form/custom/index.d.ts +0 -4
  159. package/dist/types/src/components/Form/custom/index.d.ts.map +0 -1
  160. package/dist/types/src/components/Form/factory.d.ts +0 -8
  161. package/dist/types/src/components/Form/factory.d.ts.map +0 -1
  162. package/dist/types/src/hooks/useForm.d.ts +0 -67
  163. package/dist/types/src/hooks/useForm.d.ts.map +0 -1
  164. package/dist/types/src/hooks/useQueryRefOptions.d.ts +0 -28
  165. package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +0 -1
  166. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts +0 -8
  167. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +0 -1
  168. package/dist/types/src/util/schema.d.ts +0 -3
  169. package/dist/types/src/util/schema.d.ts.map +0 -1
  170. package/src/components/ControlSection/ControlSection.stories.tsx +0 -38
  171. package/src/components/ControlSection/ControlSection.tsx +0 -153
  172. package/src/components/Form/ArrayField.tsx +0 -125
  173. package/src/components/Form/Defaults.tsx +0 -205
  174. package/src/components/Form/FormActions.tsx +0 -54
  175. package/src/components/Form/FormContent.tsx +0 -322
  176. package/src/components/Form/FormContext.tsx +0 -110
  177. package/src/components/Form/Input.tsx +0 -54
  178. package/src/components/Form/RefField.tsx +0 -269
  179. package/src/components/Form/custom/GeoPointInput.tsx +0 -80
  180. package/src/components/Form/custom/index.ts +0 -7
  181. package/src/components/Form/factory.tsx +0 -31
  182. package/src/hooks/useForm.ts +0 -295
  183. package/src/hooks/useQueryRefOptions.ts +0 -59
  184. package/src/hooks/useRefQueryLookupHandler.ts +0 -39
  185. package/src/util/schema.ts +0 -12
@@ -6,35 +6,46 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import * as Schema from 'effect/Schema';
7
7
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
8
 
9
- import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
10
- import { type EchoSchema, Format, toJsonSchema } from '@dxos/echo/internal';
11
- import { QueryBuilder } from '@dxos/echo-query';
12
- import { useSpace } from '@dxos/react-client/echo';
13
- import { withClientProvider } from '@dxos/react-client/testing';
9
+ import { DXN, Filter, JsonSchema, Obj, Query, type QueryAST, Tag, Type } from '@dxos/echo';
10
+ import { type View } from '@dxos/echo';
11
+ import { type EchoSchema, Format, type Mutable } from '@dxos/echo/internal';
12
+ import { useQuery } from '@dxos/react-client/echo';
13
+ import { useClientStory, withClientProvider } from '@dxos/react-client/testing';
14
14
  import { useAsyncEffect } from '@dxos/react-ui';
15
- import { withTheme } from '@dxos/react-ui/testing';
16
- import { type DataType, type ProjectionModel, createView, getTypenameFromQuery } from '@dxos/schema';
15
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
16
+ import { type ProjectionModel, ViewModel, getTypenameFromQuery } from '@dxos/schema';
17
+ import { Employer, Organization, Person, Pipeline } from '@dxos/types';
17
18
 
18
19
  import { translations } from '../../translations';
19
- import { TestLayout, TestPanel, VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
20
+ import { TestLayout, VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
20
21
 
21
22
  import { ViewEditor, type ViewEditorProps } from './ViewEditor';
22
23
 
24
+ const types = [
25
+ // TODO(burdon): Get label from annotation.
26
+ { value: Organization.Organization.typename, label: 'Organization' },
27
+ { value: Person.Person.typename, label: 'Person' },
28
+ { value: Pipeline.Pipeline.typename, label: 'Project' },
29
+ { value: Employer.Employer.typename, label: 'Employer' },
30
+ ];
31
+
23
32
  // Type definition for debug objects exposed to tests.
24
33
  export type ViewEditorDebugObjects = {
25
34
  schema: EchoSchema;
26
- view: DataType.View;
35
+ view: View.View;
27
36
  projection: ProjectionModel;
28
37
  };
29
38
 
30
39
  type StoryProps = Pick<ViewEditorProps, 'readonly' | 'mode'>;
31
40
 
32
41
  const DefaultStory = (props: StoryProps) => {
33
- const space = useSpace();
42
+ const { space } = useClientStory();
34
43
  const [schema, setSchema] = useState<EchoSchema>();
35
- const [view, setView] = useState<DataType.View>();
44
+ const [view, setView] = useState<View.View>();
36
45
  const projectionRef = useRef<ProjectionModel>(null);
37
46
 
47
+ const tags = useQuery(space?.db, Filter.type(Tag.Tag));
48
+
38
49
  useAsyncEffect(async () => {
39
50
  if (space) {
40
51
  const TestSchema = Schema.Struct({
@@ -42,7 +53,7 @@ const DefaultStory = (props: StoryProps) => {
42
53
  email: Format.Email,
43
54
  salary: Format.Currency(),
44
55
  }).pipe(
45
- Type.Obj({
56
+ Type.object({
46
57
  typename: 'example.com/type/Test',
47
58
  version: '0.1.0',
48
59
  }),
@@ -53,19 +64,17 @@ const DefaultStory = (props: StoryProps) => {
53
64
  description: Schema.String,
54
65
  completed: Schema.Boolean,
55
66
  }).pipe(
56
- Type.Obj({
67
+ Type.object({
57
68
  typename: 'example.com/type/Alternate',
58
69
  version: '0.1.0',
59
70
  }),
60
71
  );
61
72
 
62
73
  const [testSchema] = await space.db.schemaRegistry.register([TestSchema, AlternateSchema]);
63
- const view = createView({
74
+ const view = ViewModel.make({
64
75
  name: 'Test',
65
76
  query: Query.select(Filter.type(TestSchema)),
66
- queryString: 'Query.select(Filter.type(TestSchema))',
67
- jsonSchema: toJsonSchema(TestSchema),
68
- presentation: Obj.make(Type.Expando, {}),
77
+ jsonSchema: JsonSchema.toJsonSchema(TestSchema),
69
78
  });
70
79
 
71
80
  setSchema(testSchema);
@@ -74,38 +83,37 @@ const DefaultStory = (props: StoryProps) => {
74
83
  }, [space]);
75
84
 
76
85
  const updateViewQuery = useCallback(
77
- async (queryString: string, target?: string) => {
86
+ async (newQuery: QueryAST.Query, target?: string) => {
78
87
  if (!schema || !view || !space) {
79
88
  return;
80
89
  }
81
90
 
82
- if (props.mode === 'query') {
83
- view.query.string = queryString;
84
-
85
- const builder = new QueryBuilder();
86
- const filter = builder.build(queryString) ?? Filter.nothing();
91
+ if (props.mode === 'tag') {
87
92
  const queue = target && DXN.tryParse(target) ? target : undefined;
88
- const newQuery = queue ? Query.select(filter).options({ queues: [queue] }) : Query.select(filter);
89
- view.query.ast = newQuery.ast;
93
+ const query = queue ? Query.fromAst(newQuery).from({ queues: [queue] }) : Query.fromAst(newQuery);
94
+ Obj.change(view, (v) => {
95
+ v.query.ast = query.ast as Mutable<typeof query.ast>;
96
+ });
90
97
 
91
- const typename = getTypenameFromQuery(newQuery.ast);
98
+ const typename = getTypenameFromQuery(query.ast);
92
99
  const [newSchema] = await space.db.schemaRegistry.query({ typename }).run();
93
100
  if (!newSchema) {
94
101
  return;
95
102
  }
96
103
 
97
- const newView = createView({
98
- query: newQuery,
104
+ const newView = ViewModel.make({
105
+ query,
99
106
  jsonSchema: newSchema.jsonSchema,
100
- presentation: Obj.make(Type.Expando, {}),
101
107
  });
102
- view.projection = Obj.getSnapshot(newView).projection;
108
+ Obj.change(view, (v) => {
109
+ v.projection = Obj.getSnapshot(newView).projection as Mutable<typeof v.projection>;
110
+ });
103
111
  setSchema(() => newSchema);
104
112
  } else {
105
- const typename = queryString;
106
- const newQuery = Query.select(Filter.typename(typename));
107
- view.query.ast = newQuery.ast;
108
- schema.updateTypename(typename);
113
+ Obj.change(view, (v) => {
114
+ v.query.ast = newQuery as Mutable<typeof newQuery>;
115
+ });
116
+ schema.updateTypename(getTypenameFromQuery(newQuery));
109
117
  }
110
118
  },
111
119
  [view, schema],
@@ -139,18 +147,18 @@ const DefaultStory = (props: StoryProps) => {
139
147
 
140
148
  return (
141
149
  <TestLayout json={json}>
142
- <TestPanel>
143
- <ViewEditor
144
- ref={projectionRef}
145
- schema={schema}
146
- view={view}
147
- registry={space?.db.schemaRegistry}
148
- mode={props.mode}
149
- readonly={props.readonly}
150
- onQueryChanged={updateViewQuery}
151
- onDelete={handleDelete}
152
- />
153
- </TestPanel>
150
+ <ViewEditor
151
+ ref={projectionRef}
152
+ schema={schema}
153
+ view={view}
154
+ registry={space?.db.schemaRegistry}
155
+ mode={props.mode}
156
+ readonly={props.readonly}
157
+ types={types}
158
+ tags={tags}
159
+ onQueryChanged={updateViewQuery}
160
+ onDelete={handleDelete}
161
+ />
154
162
  </TestLayout>
155
163
  );
156
164
  };
@@ -158,7 +166,19 @@ const DefaultStory = (props: StoryProps) => {
158
166
  const meta = {
159
167
  title: 'ui/react-ui-form/ViewEditor',
160
168
  render: DefaultStory,
161
- decorators: [withClientProvider({ createSpace: true }), withTheme],
169
+ decorators: [
170
+ withClientProvider({
171
+ createSpace: true,
172
+ types: [Tag.Tag],
173
+ onCreateSpace: ({ space }) => {
174
+ space.db.add(Tag.make({ label: 'Important' }));
175
+ space.db.add(Tag.make({ label: 'Investor' }));
176
+ space.db.add(Tag.make({ label: 'New' }));
177
+ },
178
+ }),
179
+ withTheme(),
180
+ withLayout({ layout: 'fullscreen' }),
181
+ ],
162
182
  parameters: {
163
183
  layout: 'fullscreen',
164
184
  translations,
@@ -177,8 +197,8 @@ export const Readonly: Story = {
177
197
  },
178
198
  };
179
199
 
180
- export const QueryMode: Story = {
200
+ export const TagQueryMode: Story = {
181
201
  args: {
182
- mode: 'query',
202
+ mode: 'tag',
183
203
  },
184
204
  };
@@ -6,8 +6,9 @@ import { composeStories } from '@storybook/react';
6
6
  import { cleanup, fireEvent, screen, waitFor } from '@testing-library/react';
7
7
  import { afterEach, describe, expect, test } from 'vitest';
8
8
 
9
+ import { View } from '@dxos/echo';
9
10
  import { EchoSchema, isInstanceOf } from '@dxos/echo/internal';
10
- import { DataType, ProjectionModel } from '@dxos/schema';
11
+ import { ProjectionModel } from '@dxos/schema';
11
12
 
12
13
  import { VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
13
14
 
@@ -20,7 +21,7 @@ const getViewEditorDebugObjects = (): ViewEditorDebugObjects => {
20
21
  const debugObjects = (window as any)[VIEW_EDITOR_DEBUG_SYMBOL] as ViewEditorDebugObjects;
21
22
  expect(debugObjects).toBeDefined();
22
23
  expect(debugObjects.schema).toBeInstanceOf(EchoSchema);
23
- expect(isInstanceOf(DataType.View, debugObjects.view)).toBeTruthy();
24
+ expect(isInstanceOf(View.View, debugObjects.view)).toBeTruthy();
24
25
  expect(debugObjects.projection).toBeInstanceOf(ProjectionModel);
25
26
  return debugObjects;
26
27
  };
@@ -54,7 +55,7 @@ describe('ViewEditor', () => {
54
55
  const nameField = screen.getByText('name');
55
56
  fireEvent.click(nameField);
56
57
 
57
- const fieldInput = screen.getByPlaceholderText('Field name.');
58
+ const fieldInput = screen.getByPlaceholderText('Property name');
58
59
  fireEvent.change(fieldInput, { target: { value: 'new_property' } });
59
60
 
60
61
  fireEvent.click(screen.getByTestId('save-button'));
@@ -89,12 +90,12 @@ describe('ViewEditor', () => {
89
90
  await Default.run();
90
91
  await waitForViewEditor();
91
92
 
92
- // Click the add property button.
93
+ // Click the add property button. The new field is auto-expanded by handleAdd.
93
94
  const addButton = screen.getByText('Add property');
94
95
  fireEvent.click(addButton);
95
96
 
96
97
  // Fill out the property field.
97
- const fieldInput = screen.getByPlaceholderText('Field name.');
98
+ const fieldInput = screen.getByPlaceholderText('Property name');
98
99
  fireEvent.change(fieldInput, { target: { value: 'added_property' } });
99
100
 
100
101
  // Click the format combo box and select the first option.
@@ -134,7 +135,8 @@ describe('ViewEditor', () => {
134
135
  expect(addedPropertyProjection!.props.property).toBe('added_property');
135
136
  });
136
137
 
137
- test('delete property', async () => {
138
+ // TODO(mykola): Fix flaky test.
139
+ test('delete property', { retry: 2 }, async () => {
138
140
  await Default.run();
139
141
  await waitForViewEditor();
140
142