@dxos/react-ui-table 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (172) hide show
  1. package/dist/lib/browser/{chunk-5MKYB7NF.mjs → chunk-YWNRUF4J.mjs} +7 -3
  2. package/dist/lib/browser/{chunk-5MKYB7NF.mjs.map → chunk-YWNRUF4J.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +295 -97
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/types/index.mjs +1 -1
  7. package/dist/lib/node/{chunk-NRFKBRPV.cjs → chunk-TGG6OZ54.cjs} +10 -6
  8. package/dist/lib/node/{chunk-NRFKBRPV.cjs.map → chunk-TGG6OZ54.cjs.map} +3 -3
  9. package/dist/lib/node/index.cjs +293 -93
  10. package/dist/lib/node/index.cjs.map +3 -3
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/types/index.cjs +3 -3
  13. package/dist/lib/node/types/index.cjs.map +1 -1
  14. package/dist/lib/node-esm/{chunk-SU4D55KI.mjs → chunk-KKLP54L3.mjs} +7 -3
  15. package/dist/lib/node-esm/{chunk-SU4D55KI.mjs.map → chunk-KKLP54L3.mjs.map} +3 -3
  16. package/dist/lib/node-esm/index.mjs +295 -97
  17. package/dist/lib/node-esm/index.mjs.map +3 -3
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/types/index.mjs +1 -1
  20. package/dist/types/src/components/Table/DynamicTable.d.ts +15 -10
  21. package/dist/types/src/components/Table/DynamicTable.d.ts.map +1 -1
  22. package/dist/types/src/components/Table/DynamicTable.stories.d.ts +10 -0
  23. package/dist/types/src/components/Table/DynamicTable.stories.d.ts.map +1 -0
  24. package/dist/types/src/components/Table/Table.d.ts +1 -1
  25. package/dist/types/src/components/Table/Table.d.ts.map +1 -1
  26. package/dist/types/src/components/Table/Table.stories.d.ts +2 -3
  27. package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Table/relations.stories.d.ts +9 -0
  29. package/dist/types/src/components/Table/relations.stories.d.ts.map +1 -0
  30. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
  31. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
  32. package/dist/types/src/components/testing.d.ts.map +1 -1
  33. package/dist/types/src/hooks/useTableModel.d.ts +6 -10
  34. package/dist/types/src/hooks/useTableModel.d.ts.map +1 -1
  35. package/dist/types/src/model/index.d.ts +1 -0
  36. package/dist/types/src/model/index.d.ts.map +1 -1
  37. package/dist/types/src/model/selection-model.d.ts +6 -3
  38. package/dist/types/src/model/selection-model.d.ts.map +1 -1
  39. package/dist/types/src/model/table-model.d.ts +13 -14
  40. package/dist/types/src/model/table-model.d.ts.map +1 -1
  41. package/dist/types/src/model/table-presentation.d.ts +4 -4
  42. package/dist/types/src/model/table-presentation.d.ts.map +1 -1
  43. package/dist/types/src/model/table-sorting.d.ts +2 -2
  44. package/dist/types/src/model/table-sorting.d.ts.map +1 -1
  45. package/dist/types/src/types/table.d.ts +2 -1
  46. package/dist/types/src/types/table.d.ts.map +1 -1
  47. package/dist/types/src/util/dynamic-table.d.ts +21 -30
  48. package/dist/types/src/util/dynamic-table.d.ts.map +1 -1
  49. package/dist/types/src/util/table-controls.d.ts +2 -2
  50. package/dist/types/src/util/table-controls.d.ts.map +1 -1
  51. package/dist/types/src/util/table.d.ts.map +1 -1
  52. package/package.json +33 -32
  53. package/src/components/Table/DynamicTable.stories.tsx +155 -0
  54. package/src/components/Table/DynamicTable.tsx +46 -28
  55. package/src/components/Table/Table.stories.tsx +129 -125
  56. package/src/components/Table/Table.tsx +51 -26
  57. package/src/components/Table/relations.stories.tsx +113 -0
  58. package/src/components/TableCellEditor/TableCellEditor.stories.tsx +8 -3
  59. package/src/components/TableCellEditor/TableCellEditor.tsx +102 -4
  60. package/src/components/testing.ts +0 -1
  61. package/src/hooks/useTableModel.ts +11 -11
  62. package/src/model/index.ts +1 -0
  63. package/src/model/selection-model.ts +12 -2
  64. package/src/model/table-model.test.ts +1 -1
  65. package/src/model/table-model.ts +27 -18
  66. package/src/model/table-presentation.test.ts +1 -1
  67. package/src/model/table-presentation.ts +65 -11
  68. package/src/model/table-sorting.ts +2 -2
  69. package/src/playwright/smoke.spec.ts +2 -3
  70. package/src/types/table.ts +6 -5
  71. package/src/util/dynamic-table.ts +57 -25
  72. package/src/util/table-controls.ts +4 -4
  73. package/src/util/table.ts +2 -1
  74. package/dist/lib/browser/deprecated/index.mjs +0 -1483
  75. package/dist/lib/browser/deprecated/index.mjs.map +0 -7
  76. package/dist/lib/node/deprecated/index.cjs +0 -1511
  77. package/dist/lib/node/deprecated/index.cjs.map +0 -7
  78. package/dist/lib/node-esm/deprecated/index.mjs +0 -1485
  79. package/dist/lib/node-esm/deprecated/index.mjs.map +0 -7
  80. package/dist/types/src/deprecated/components/Cell/Cell.d.ts +0 -12
  81. package/dist/types/src/deprecated/components/Cell/Cell.d.ts.map +0 -1
  82. package/dist/types/src/deprecated/components/Cell/CellCombobox.d.ts +0 -13
  83. package/dist/types/src/deprecated/components/Cell/CellCombobox.d.ts.map +0 -1
  84. package/dist/types/src/deprecated/components/Cell/index.d.ts +0 -2
  85. package/dist/types/src/deprecated/components/Cell/index.d.ts.map +0 -1
  86. package/dist/types/src/deprecated/components/ColumnMenu/ColumnMenu.d.ts +0 -23
  87. package/dist/types/src/deprecated/components/ColumnMenu/ColumnMenu.d.ts.map +0 -1
  88. package/dist/types/src/deprecated/components/ColumnMenu/ColumnMenu.stories.d.ts +0 -36
  89. package/dist/types/src/deprecated/components/ColumnMenu/ColumnMenu.stories.d.ts.map +0 -1
  90. package/dist/types/src/deprecated/components/ColumnMenu/ColumnSettings.d.ts +0 -15
  91. package/dist/types/src/deprecated/components/ColumnMenu/ColumnSettings.d.ts.map +0 -1
  92. package/dist/types/src/deprecated/components/ColumnMenu/ColumnSettings.stories.d.ts +0 -84
  93. package/dist/types/src/deprecated/components/ColumnMenu/ColumnSettings.stories.d.ts.map +0 -1
  94. package/dist/types/src/deprecated/components/ColumnMenu/index.d.ts +0 -3
  95. package/dist/types/src/deprecated/components/ColumnMenu/index.d.ts.map +0 -1
  96. package/dist/types/src/deprecated/components/Table/Table.d.ts +0 -20
  97. package/dist/types/src/deprecated/components/Table/Table.d.ts.map +0 -1
  98. package/dist/types/src/deprecated/components/Table/Table.stories.d.ts +0 -116
  99. package/dist/types/src/deprecated/components/Table/Table.stories.d.ts.map +0 -1
  100. package/dist/types/src/deprecated/components/Table/TableBody.d.ts +0 -12
  101. package/dist/types/src/deprecated/components/Table/TableBody.d.ts.map +0 -1
  102. package/dist/types/src/deprecated/components/Table/TableContext.d.ts +0 -13
  103. package/dist/types/src/deprecated/components/Table/TableContext.d.ts.map +0 -1
  104. package/dist/types/src/deprecated/components/Table/TableHead.d.ts +0 -9
  105. package/dist/types/src/deprecated/components/Table/TableHead.d.ts.map +0 -1
  106. package/dist/types/src/deprecated/components/Table/TableRootContext.d.ts +0 -17
  107. package/dist/types/src/deprecated/components/Table/TableRootContext.d.ts.map +0 -1
  108. package/dist/types/src/deprecated/components/Table/index.d.ts +0 -5
  109. package/dist/types/src/deprecated/components/Table/index.d.ts.map +0 -1
  110. package/dist/types/src/deprecated/components/Table/props.d.ts +0 -42
  111. package/dist/types/src/deprecated/components/Table/props.d.ts.map +0 -1
  112. package/dist/types/src/deprecated/components/index.d.ts +0 -4
  113. package/dist/types/src/deprecated/components/index.d.ts.map +0 -1
  114. package/dist/types/src/deprecated/helpers.d.ts +0 -91
  115. package/dist/types/src/deprecated/helpers.d.ts.map +0 -1
  116. package/dist/types/src/deprecated/hooks/index.d.ts +0 -5
  117. package/dist/types/src/deprecated/hooks/index.d.ts.map +0 -1
  118. package/dist/types/src/deprecated/hooks/useColumnSizing.d.ts +0 -12
  119. package/dist/types/src/deprecated/hooks/useColumnSizing.d.ts.map +0 -1
  120. package/dist/types/src/deprecated/hooks/useColumnSorting.d.ts +0 -15
  121. package/dist/types/src/deprecated/hooks/useColumnSorting.d.ts.map +0 -1
  122. package/dist/types/src/deprecated/hooks/usePinLastRow.d.ts +0 -3
  123. package/dist/types/src/deprecated/hooks/usePinLastRow.d.ts.map +0 -1
  124. package/dist/types/src/deprecated/hooks/useRowSelection.d.ts +0 -7
  125. package/dist/types/src/deprecated/hooks/useRowSelection.d.ts.map +0 -1
  126. package/dist/types/src/deprecated/index.d.ts +0 -8
  127. package/dist/types/src/deprecated/index.d.ts.map +0 -1
  128. package/dist/types/src/deprecated/schema/Schema.stories.d.ts +0 -11
  129. package/dist/types/src/deprecated/schema/Schema.stories.d.ts.map +0 -1
  130. package/dist/types/src/deprecated/schema/column-utils.d.ts +0 -7
  131. package/dist/types/src/deprecated/schema/column-utils.d.ts.map +0 -1
  132. package/dist/types/src/deprecated/schema/index.d.ts +0 -3
  133. package/dist/types/src/deprecated/schema/index.d.ts.map +0 -1
  134. package/dist/types/src/deprecated/schema/types.d.ts +0 -27
  135. package/dist/types/src/deprecated/schema/types.d.ts.map +0 -1
  136. package/dist/types/src/deprecated/theme.d.ts +0 -29
  137. package/dist/types/src/deprecated/theme.d.ts.map +0 -1
  138. package/dist/types/src/deprecated/translations.d.ts +0 -21
  139. package/dist/types/src/deprecated/translations.d.ts.map +0 -1
  140. package/dist/types/src/deprecated/types.d.ts +0 -26
  141. package/dist/types/src/deprecated/types.d.ts.map +0 -1
  142. package/src/deprecated/components/Cell/Cell.tsx +0 -88
  143. package/src/deprecated/components/Cell/CellCombobox.tsx +0 -103
  144. package/src/deprecated/components/Cell/index.ts +0 -5
  145. package/src/deprecated/components/ColumnMenu/ColumnMenu.stories.tsx +0 -129
  146. package/src/deprecated/components/ColumnMenu/ColumnMenu.tsx +0 -182
  147. package/src/deprecated/components/ColumnMenu/ColumnSettings.stories.tsx +0 -108
  148. package/src/deprecated/components/ColumnMenu/ColumnSettings.tsx +0 -207
  149. package/src/deprecated/components/ColumnMenu/index.ts +0 -6
  150. package/src/deprecated/components/Table/Table.stories.tsx +0 -508
  151. package/src/deprecated/components/Table/Table.tsx +0 -301
  152. package/src/deprecated/components/Table/TableBody.tsx +0 -82
  153. package/src/deprecated/components/Table/TableContext.tsx +0 -34
  154. package/src/deprecated/components/Table/TableHead.tsx +0 -78
  155. package/src/deprecated/components/Table/TableRootContext.ts +0 -39
  156. package/src/deprecated/components/Table/index.ts +0 -8
  157. package/src/deprecated/components/Table/props.ts +0 -60
  158. package/src/deprecated/components/index.ts +0 -7
  159. package/src/deprecated/helpers.tsx +0 -526
  160. package/src/deprecated/hooks/index.ts +0 -8
  161. package/src/deprecated/hooks/useColumnSizing.ts +0 -46
  162. package/src/deprecated/hooks/useColumnSorting.ts +0 -64
  163. package/src/deprecated/hooks/usePinLastRow.ts +0 -47
  164. package/src/deprecated/hooks/useRowSelection.ts +0 -40
  165. package/src/deprecated/index.ts +0 -12
  166. package/src/deprecated/schema/Schema.stories.tsx +0 -59
  167. package/src/deprecated/schema/column-utils.ts +0 -54
  168. package/src/deprecated/schema/index.ts +0 -6
  169. package/src/deprecated/schema/types.ts +0 -40
  170. package/src/deprecated/theme.ts +0 -82
  171. package/src/deprecated/translations.ts +0 -26
  172. package/src/deprecated/types.ts +0 -38
@@ -2,17 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type SortDirectionType } from '@dxos/echo-schema';
5
+ import type { BaseSchema, JsonSchemaType, SortDirectionType } from '@dxos/echo-schema';
6
6
  import { create, makeRef } from '@dxos/live-object';
7
7
  import {
8
8
  createView,
9
- echoSchemaFromPropertyDefinitions,
9
+ getSchemaFromPropertyDefinitions,
10
10
  ViewProjection,
11
+ type ViewType,
11
12
  type SchemaPropertyDefinition,
12
13
  } from '@dxos/schema';
13
14
 
14
- import { TableType } from '..';
15
+ import { TableType } from '../types';
15
16
 
17
+ // TODO(ZaymonFC): Upstream these extra fields to SchemaPropertyDefinition to enhance schema-tools schema creation.
16
18
  type PropertyDisplayProps = {
17
19
  size: number;
18
20
  title: string;
@@ -21,26 +23,63 @@ type PropertyDisplayProps = {
21
23
 
22
24
  export type TablePropertyDefinition = SchemaPropertyDefinition & Partial<PropertyDisplayProps>;
23
25
 
24
- export const makeDynamicTable = (typename: string, properties: TablePropertyDefinition[]) => {
25
- const table = create(TableType, { name: 'dynamic-table' });
26
- const echoSchema = echoSchemaFromPropertyDefinitions(typename, properties);
27
- const propertyNames = properties.map((property) => property.name);
26
+ /**
27
+ * @deprecated
28
+ */
29
+ // TODO(burdon): Remove variance.
30
+ export const getBaseSchems = ({
31
+ typename,
32
+ properties,
33
+ jsonSchema,
34
+ schema,
35
+ }: {
36
+ typename?: string;
37
+ properties?: TablePropertyDefinition[];
38
+ jsonSchema?: JsonSchemaType;
39
+ schema?: BaseSchema;
40
+ }): { typename: string; jsonSchema: JsonSchemaType } => {
41
+ if (typename && properties) {
42
+ const schema = getSchemaFromPropertyDefinitions(typename, properties);
43
+ return { typename: schema.typename, jsonSchema: schema.jsonSchema };
44
+ } else if (schema) {
45
+ return { typename: schema.typename, jsonSchema: schema.jsonSchema };
46
+ } else if (typename && jsonSchema) {
47
+ return { typename, jsonSchema };
48
+ } else {
49
+ throw new Error('invalid properties');
50
+ }
51
+ };
28
52
 
53
+ export const makeDynamicTable = ({
54
+ typename,
55
+ jsonSchema,
56
+ properties,
57
+ }: {
58
+ typename: string;
59
+ jsonSchema: JsonSchemaType;
60
+ properties?: TablePropertyDefinition[];
61
+ }): { table: TableType; projection: ViewProjection } => {
29
62
  const view = createView({
30
63
  name: 'dynamic-table',
31
- typename: echoSchema.typename,
32
- jsonSchema: echoSchema.jsonSchema,
33
- fields: propertyNames,
64
+ typename,
65
+ jsonSchema,
66
+ ...(properties && { fields: properties.map((property) => property.name) }),
34
67
  });
35
68
 
36
- table.view = makeRef(view);
37
- const viewProjection = new ViewProjection(echoSchema, view);
69
+ const table = create(TableType, { name: 'dynamic-table', view: makeRef(view) });
70
+ const projection = new ViewProjection(jsonSchema, view);
71
+ if (properties && view.fields) {
72
+ setProperties(view, projection, properties);
73
+ }
38
74
 
39
- for (const property of properties) {
40
- if (!view.fields) {
41
- continue;
42
- }
75
+ return {
76
+ table,
77
+ projection,
78
+ };
79
+ };
43
80
 
81
+ const setProperties = (view: ViewType, projection: ViewProjection, properties: TablePropertyDefinition[]) => {
82
+ for (const property of properties) {
44
83
  const field = view.fields.find((field) => field.path === property.name);
45
84
  if (field) {
46
85
  if (property.size !== undefined) {
@@ -48,8 +87,8 @@ export const makeDynamicTable = (typename: string, properties: TablePropertyDefi
48
87
  }
49
88
 
50
89
  if (property.title !== undefined) {
51
- const fieldProjection = viewProjection.getFieldProjection(field.id);
52
- viewProjection.setFieldProjection({
90
+ const fieldProjection = projection.getFieldProjection(field.id);
91
+ projection.setFieldProjection({
53
92
  ...fieldProjection,
54
93
  props: { ...fieldProjection.props, title: property.title },
55
94
  });
@@ -61,11 +100,4 @@ export const makeDynamicTable = (typename: string, properties: TablePropertyDefi
61
100
  }
62
101
  }
63
102
  }
64
-
65
- return {
66
- table,
67
- schema: echoSchema,
68
- view,
69
- viewProjection,
70
- };
71
103
  };
@@ -44,7 +44,7 @@ const renderInput = (
44
44
  return `<input type="checkbox" class="${baseClass}" ${renderAttributes(attrs)} ${checked ? 'checked' : ''} ${preventToggle ? 'onclick="return false"' : ''} ${disabled ? 'disabled' : ''} data-testid="${testId}"/>`;
45
45
  };
46
46
 
47
- export const renderCheckbox = ({
47
+ export const CheckboxStory = ({
48
48
  rowIndex,
49
49
  header = false,
50
50
  checked = false,
@@ -59,7 +59,7 @@ export const renderCheckbox = ({
59
59
  return renderInput(BASE_CLASSES.checkbox, attrs, checked, disabled, true, 'table-selection');
60
60
  };
61
61
 
62
- export const renderSwitch = ({ colIndex, rowIndex, checked = false, disabled = false }: RenderSwitchProps): string => {
62
+ export const SwitchStory = ({ colIndex, rowIndex, checked = false, disabled = false }: RenderSwitchProps): string => {
63
63
  const attrs = {
64
64
  [CONTROL_IDENTIFIERS.switch]: '',
65
65
  'data-row-index': rowIndex.toString(),
@@ -72,7 +72,7 @@ export const renderSwitch = ({ colIndex, rowIndex, checked = false, disabled = f
72
72
  export const tableControls = {
73
73
  checkbox: {
74
74
  attr: CONTROL_IDENTIFIERS.checkbox,
75
- render: renderCheckbox,
75
+ render: CheckboxStory,
76
76
  getData: (el: HTMLElement): Extract<ControlData, { type: 'checkbox' }> => ({
77
77
  type: 'checkbox',
78
78
  rowIndex: Number(el.getAttribute('data-row-index')),
@@ -81,7 +81,7 @@ export const tableControls = {
81
81
  },
82
82
  switch: {
83
83
  attr: CONTROL_IDENTIFIERS.switch,
84
- render: renderSwitch,
84
+ render: SwitchStory,
85
85
  getData: (el: HTMLElement): Extract<ControlData, { type: 'switch' }> => ({
86
86
  type: 'switch',
87
87
  rowIndex: Number(el.getAttribute('data-row-index')),
package/src/util/table.ts CHANGED
@@ -19,6 +19,7 @@ import { createFieldId, createView, getSchemaProperties, ViewProjection, type Vi
19
19
 
20
20
  import { type TableType } from '../types';
21
21
 
22
+ // TODO(ZaymonFC): We don't need the client anymore.
22
23
  type InitialiseTableProps = {
23
24
  client: Client;
24
25
  space: Space;
@@ -94,7 +95,7 @@ const ContactSchema = TypedObject({
94
95
  const ContactFields = ['name', 'email', 'salary', 'active'];
95
96
 
96
97
  const createProjection = (schema: EchoSchema, view: ViewType): ViewProjection => {
97
- const projection = new ViewProjection(schema, view);
98
+ const projection = new ViewProjection(schema.jsonSchema, view);
98
99
  projection.setFieldProjection({
99
100
  field: {
100
101
  id: view.fields.find((f) => f.path === 'salary')!.id,