@dxos/react-ui-table 0.7.4-staging.f7e8224 → 0.7.5-labs.071a3e2

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 (118) hide show
  1. package/dist/lib/browser/{chunk-IYCSJDMB.mjs → chunk-3FR6NHPD.mjs} +7 -5
  2. package/dist/lib/browser/chunk-3FR6NHPD.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1424 -1067
  4. package/dist/lib/browser/index.mjs.map +4 -4
  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-MHBMVCFZ.cjs → chunk-NB3SFHGA.cjs} +9 -7
  8. package/dist/lib/node/chunk-NB3SFHGA.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +1429 -1052
  10. package/dist/lib/node/index.cjs.map +4 -4
  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-BMWGPXPL.mjs → chunk-RLVVOZW5.mjs} +7 -5
  15. package/dist/lib/node-esm/chunk-RLVVOZW5.mjs.map +7 -0
  16. package/dist/lib/node-esm/index.mjs +1424 -1067
  17. package/dist/lib/node-esm/index.mjs.map +4 -4
  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/_deprecated/hooks/useColumnSorting.d.ts +1 -1
  21. package/dist/types/src/components/Table/ColumnActionsMenu.d.ts +4 -3
  22. package/dist/types/src/components/Table/ColumnActionsMenu.d.ts.map +1 -1
  23. package/dist/types/src/components/Table/ColumnSettings.d.ts +3 -2
  24. package/dist/types/src/components/Table/ColumnSettings.d.ts.map +1 -1
  25. package/dist/types/src/components/Table/CreateRefPanel.d.ts +3 -2
  26. package/dist/types/src/components/Table/CreateRefPanel.d.ts.map +1 -1
  27. package/dist/types/src/components/Table/RefPanel.d.ts +4 -3
  28. package/dist/types/src/components/Table/RefPanel.d.ts.map +1 -1
  29. package/dist/types/src/components/Table/RowActionsMenu.d.ts +3 -2
  30. package/dist/types/src/components/Table/RowActionsMenu.d.ts.map +1 -1
  31. package/dist/types/src/components/Table/Table.d.ts +2 -1
  32. package/dist/types/src/components/Table/Table.d.ts.map +1 -1
  33. package/dist/types/src/components/Table/Table.stories.d.ts +1 -4
  34. package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +3 -2
  36. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
  37. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
  38. package/dist/types/src/components/TableToolbar/TableToolbar.d.ts +18 -0
  39. package/dist/types/src/components/TableToolbar/TableToolbar.d.ts.map +1 -0
  40. package/dist/types/src/components/TableToolbar/index.d.ts +2 -0
  41. package/dist/types/src/components/TableToolbar/index.d.ts.map +1 -0
  42. package/dist/types/src/components/index.d.ts +1 -1
  43. package/dist/types/src/components/index.d.ts.map +1 -1
  44. package/dist/types/src/components/testing.d.ts +31 -71
  45. package/dist/types/src/components/testing.d.ts.map +1 -1
  46. package/dist/types/src/index.d.ts +1 -0
  47. package/dist/types/src/index.d.ts.map +1 -1
  48. package/dist/types/src/model/index.d.ts +1 -0
  49. package/dist/types/src/model/index.d.ts.map +1 -1
  50. package/dist/types/src/model/modal-controller.d.ts +6 -2
  51. package/dist/types/src/model/modal-controller.d.ts.map +1 -1
  52. package/dist/types/src/model/selection-model.d.ts.map +1 -1
  53. package/dist/types/src/model/table-model.d.ts +19 -31
  54. package/dist/types/src/model/table-model.d.ts.map +1 -1
  55. package/dist/types/src/model/table-presentation.d.ts +22 -0
  56. package/dist/types/src/model/table-presentation.d.ts.map +1 -0
  57. package/dist/types/src/model/table-presentation.test.d.ts +2 -0
  58. package/dist/types/src/model/table-presentation.test.d.ts.map +1 -0
  59. package/dist/types/src/model/table-sorting.d.ts +53 -0
  60. package/dist/types/src/model/table-sorting.d.ts.map +1 -0
  61. package/dist/types/src/playwright/TableManager.d.ts +2 -1
  62. package/dist/types/src/playwright/TableManager.d.ts.map +1 -1
  63. package/dist/types/src/translations.d.ts +2 -1
  64. package/dist/types/src/translations.d.ts.map +1 -1
  65. package/dist/types/src/types/table.d.ts +46 -154
  66. package/dist/types/src/types/table.d.ts.map +1 -1
  67. package/dist/types/src/util/index.d.ts +1 -0
  68. package/dist/types/src/util/index.d.ts.map +1 -1
  69. package/dist/types/src/util/table-buttons.d.ts +63 -19
  70. package/dist/types/src/util/table-buttons.d.ts.map +1 -1
  71. package/dist/types/src/util/table-controls.d.ts +32 -9
  72. package/dist/types/src/util/table-controls.d.ts.map +1 -1
  73. package/dist/types/src/util/table.d.ts +3 -2
  74. package/dist/types/src/util/table.d.ts.map +1 -1
  75. package/dist/types/tsconfig.tsbuildinfo +1 -0
  76. package/package.json +35 -34
  77. package/src/_deprecated/schema/Schema.stories.tsx +1 -1
  78. package/src/components/Table/ColumnActionsMenu.tsx +12 -12
  79. package/src/components/Table/ColumnSettings.tsx +11 -11
  80. package/src/components/Table/CreateRefPanel.tsx +13 -14
  81. package/src/components/Table/RefPanel.tsx +9 -9
  82. package/src/components/Table/RowActionsMenu.tsx +6 -7
  83. package/src/components/Table/Table.stories.tsx +85 -56
  84. package/src/components/Table/Table.tsx +239 -148
  85. package/src/components/TableCellEditor/TableCellEditor.stories.tsx +13 -12
  86. package/src/components/TableCellEditor/TableCellEditor.tsx +6 -4
  87. package/src/components/TableToolbar/TableToolbar.tsx +72 -0
  88. package/src/components/{Toolbar → TableToolbar}/index.ts +1 -1
  89. package/src/components/index.ts +1 -1
  90. package/src/components/testing.ts +10 -8
  91. package/src/index.ts +2 -0
  92. package/src/model/index.ts +1 -0
  93. package/src/model/modal-controller.ts +15 -48
  94. package/src/model/selection-model.ts +12 -1
  95. package/src/model/table-model.test.ts +4 -76
  96. package/src/model/table-model.ts +73 -304
  97. package/src/model/table-presentation.test.ts +102 -0
  98. package/src/model/table-presentation.ts +235 -0
  99. package/src/model/table-sorting.ts +215 -0
  100. package/src/playwright/TableManager.ts +5 -1
  101. package/src/playwright/smoke.spec.ts +94 -9
  102. package/src/translations.ts +2 -1
  103. package/src/types/table.ts +4 -4
  104. package/src/util/index.ts +1 -0
  105. package/src/util/table-buttons.ts +127 -48
  106. package/src/util/table-controls.ts +71 -7
  107. package/src/util/table.ts +93 -52
  108. package/dist/lib/browser/chunk-IYCSJDMB.mjs.map +0 -7
  109. package/dist/lib/node/chunk-MHBMVCFZ.cjs.map +0 -7
  110. package/dist/lib/node-esm/chunk-BMWGPXPL.mjs.map +0 -7
  111. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -21
  112. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  113. package/dist/types/src/components/Toolbar/common.d.ts +0 -14
  114. package/dist/types/src/components/Toolbar/common.d.ts.map +0 -1
  115. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  116. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  117. package/src/components/Toolbar/Toolbar.tsx +0 -87
  118. package/src/components/Toolbar/common.tsx +0 -71
@@ -9,13 +9,13 @@ import { DropdownMenu } from '@dxos/react-ui';
9
9
  import { FieldEditor } from '@dxos/react-ui-form';
10
10
  import { type FieldType } from '@dxos/schema';
11
11
 
12
- import { type TableModel } from '../../model';
12
+ import { type TableModel, type ModalController } from '../../model';
13
13
 
14
- type ColumnSettingsProps = { model?: TableModel; onNewColumn: () => void };
14
+ type ColumnSettingsProps = { model?: TableModel; modals: ModalController; onNewColumn: () => void };
15
15
 
16
- export const ColumnSettings = ({ model, onNewColumn }: ColumnSettingsProps) => {
16
+ export const ColumnSettings = ({ model, modals, onNewColumn }: ColumnSettingsProps) => {
17
17
  const [newField, setNewField] = useState<FieldType>();
18
- const state = model?.modalController.state.value;
18
+ const state = modals.state.value;
19
19
 
20
20
  const space = getSpace(model?.table);
21
21
 
@@ -34,17 +34,17 @@ export const ColumnSettings = ({ model, onNewColumn }: ColumnSettingsProps) => {
34
34
  if (state?.type === 'columnSettings') {
35
35
  const { mode } = state;
36
36
  if (mode.type === 'edit') {
37
- return model?.table?.view?.fields.find((f) => f.id === mode.fieldId);
37
+ return model?.table?.view?.target?.fields.find((f) => f.id === mode.fieldId);
38
38
  }
39
39
  }
40
40
  return undefined;
41
- }, [model?.table?.view?.fields, state]);
41
+ }, [model?.table?.view?.target?.fields, state]);
42
42
 
43
43
  const field = existingField ?? newField;
44
44
 
45
45
  const handleSave = useCallback(() => {
46
- model?.modalController.close();
47
- }, [model?.modalController]);
46
+ modals.close();
47
+ }, [modals]);
48
48
 
49
49
  const handleCancel = useCallback(() => {
50
50
  if (state?.type === 'columnSettings' && state.mode.type === 'create' && newField) {
@@ -52,18 +52,18 @@ export const ColumnSettings = ({ model, onNewColumn }: ColumnSettingsProps) => {
52
52
  }
53
53
  }, [model?.projection, state, newField]);
54
54
 
55
- if (!model?.table?.view || !model.projection || !field) {
55
+ if (!model?.table?.view?.target || !model.projection || !field) {
56
56
  return null;
57
57
  }
58
58
 
59
59
  return (
60
60
  <DropdownMenu.Root modal={false} open={state?.type === 'columnSettings'}>
61
- <DropdownMenu.VirtualTrigger virtualRef={model.modalController.trigger} />
61
+ <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />
62
62
  <DropdownMenu.Portal>
63
63
  <DropdownMenu.Content classNames='md:is-64'>
64
64
  <DropdownMenu.Viewport>
65
65
  <FieldEditor
66
- view={model.table.view}
66
+ view={model.table.view.target!}
67
67
  projection={model.projection}
68
68
  field={field}
69
69
  registry={space?.db.schemaRegistry}
@@ -10,22 +10,22 @@ import { Popover } from '@dxos/react-ui';
10
10
  import { Form } from '@dxos/react-ui-form';
11
11
  import { type GridScopedProps, useGridContext } from '@dxos/react-ui-grid';
12
12
 
13
- import { type TableModel } from '../../model';
13
+ import { type TableModel, type ModalController } from '../../model';
14
14
 
15
- export type CreateRefPanelProps = { model?: TableModel };
15
+ export type CreateRefPanelProps = { model?: TableModel; modals: ModalController };
16
16
 
17
17
  // TODO(burdon): Factor out Space dependency (to plugin?)
18
- export const CreateRefPanel = ({ model, __gridScope }: GridScopedProps<CreateRefPanelProps>) => {
18
+ export const CreateRefPanel = ({ model, modals, __gridScope }: GridScopedProps<CreateRefPanelProps>) => {
19
19
  const { id: gridId } = useGridContext('TableCellEditor', __gridScope);
20
20
  const space = getSpace(model?.table);
21
- const state = model?.modalController.state.value;
21
+ const state = modals.state.value;
22
+
22
23
  const schema = useMemo<S.Schema<any> | undefined>(() => {
23
24
  if (!space || state?.type !== 'createRefPanel') {
24
25
  return;
25
26
  }
26
27
 
27
- // TODO(burdon): Factor out.
28
- const schema: S.Schema<any> | undefined = space.db.schemaRegistry.getSchema(state.typename)?.schema;
28
+ const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();
29
29
  if (schema) {
30
30
  const omit = S.omit<any, any, ['id']>('id');
31
31
  return omit(schema);
@@ -38,22 +38,21 @@ export const CreateRefPanel = ({ model, __gridScope }: GridScopedProps<CreateRef
38
38
  return;
39
39
  }
40
40
 
41
- const schema: S.Schema<any> | undefined = space.db.schemaRegistry.getSchema(state.typename)?.schema;
41
+ const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();
42
42
  if (schema) {
43
43
  const obj = space.db.add(create(schema, values));
44
44
  state.onCreate?.(obj);
45
45
  }
46
-
47
- void model.modalController.close();
46
+ void modals.close();
48
47
  },
49
- [model?.modalController, space, state],
48
+ [modals, space, state],
50
49
  );
51
50
 
52
51
  const handleCancel = useCallback(() => {
53
52
  if (model) {
54
- model.modalController.close();
53
+ modals.close();
55
54
  }
56
- }, [model?.modalController]);
55
+ }, [modals]);
57
56
 
58
57
  if (!model?.table?.view || !model.projection) {
59
58
  return null;
@@ -65,11 +64,11 @@ export const CreateRefPanel = ({ model, __gridScope }: GridScopedProps<CreateRef
65
64
  open={state?.type === 'createRefPanel' && !!schema}
66
65
  onOpenChange={(nextOpen) => {
67
66
  if (model && !nextOpen) {
68
- return model.modalController.close();
67
+ return modals.close();
69
68
  }
70
69
  }}
71
70
  >
72
- <Popover.VirtualTrigger virtualRef={model.modalController.trigger} />
71
+ <Popover.VirtualTrigger virtualRef={modals.trigger} />
73
72
  <Popover.Portal>
74
73
  <Popover.Content classNames='md:is-64' data-grid={gridId}>
75
74
  {state?.type === 'createRefPanel' && schema && (
@@ -8,9 +8,9 @@ import { getSpace, type Space } from '@dxos/react-client/echo';
8
8
  import { Popover } from '@dxos/react-ui';
9
9
  import { Form } from '@dxos/react-ui-form';
10
10
 
11
- import { type TableModel } from '../../model';
11
+ import { type TableModel, type ModalController } from '../../model';
12
12
 
13
- type RefPanelProps = { model?: TableModel };
13
+ type RefPanelProps = { model: TableModel; modals: ModalController };
14
14
 
15
15
  const getRefTargetObj = (space?: Space, id?: string) => {
16
16
  if (space && id) {
@@ -20,13 +20,13 @@ const getRefTargetObj = (space?: Space, id?: string) => {
20
20
  }
21
21
  };
22
22
 
23
- export const RefPanel = ({ model }: RefPanelProps) => {
24
- const state = model?.modalController.state.value;
25
- const space = getSpace(model?.table);
23
+ export const RefPanel = ({ model, modals }: RefPanelProps) => {
24
+ const state = modals.state.value;
25
+ const space = getSpace(model.table);
26
26
  const targetObj = getRefTargetObj(space, state?.type === 'refPanel' ? state.targetId : undefined);
27
27
  const schema = space && state?.type === 'refPanel' ? space.db.schemaRegistry.getSchema(state.typename) : undefined;
28
28
 
29
- if (!model?.table?.view || !model.projection) {
29
+ if (!model.table?.view || !model.projection) {
30
30
  return null;
31
31
  }
32
32
 
@@ -35,12 +35,12 @@ export const RefPanel = ({ model }: RefPanelProps) => {
35
35
  modal={false}
36
36
  open={state?.type === 'refPanel' && !!targetObj && !!schema}
37
37
  onOpenChange={(nextOpen) => {
38
- if (model && !nextOpen) {
39
- return model.modalController.close();
38
+ if (!nextOpen) {
39
+ return modals.close();
40
40
  }
41
41
  }}
42
42
  >
43
- <Popover.VirtualTrigger virtualRef={model.modalController.trigger} />
43
+ <Popover.VirtualTrigger virtualRef={modals.trigger} />
44
44
  <Popover.Portal>
45
45
  <Popover.Content classNames='md:is-64'>
46
46
  {targetObj && schema && <Form readonly values={targetObj} schema={schema} />}
@@ -6,22 +6,21 @@ import React from 'react';
6
6
 
7
7
  import { DropdownMenu, useTranslation } from '@dxos/react-ui';
8
8
 
9
- import { type TableModel } from '../../model';
9
+ import { type TableModel, type ModalController } from '../../model';
10
10
  import { translationKey } from '../../translations';
11
11
 
12
- type RowActionsMenuProps = { model: TableModel };
12
+ type RowActionsMenuProps = { model: TableModel; modals: ModalController };
13
13
 
14
- export const RowActionsMenu = ({ model }: RowActionsMenuProps) => {
14
+ export const RowActionsMenu = ({ model, modals }: RowActionsMenuProps) => {
15
15
  const { t } = useTranslation(translationKey);
16
16
  const hasSelection = model.selection.hasSelection.value;
17
- const state = model.modalController.state.value;
17
+ const state = modals.state.value;
18
18
  if (state?.type !== 'row') {
19
19
  return null;
20
20
  }
21
-
22
21
  return (
23
- <DropdownMenu.Root modal={false} open={true} onOpenChange={model.modalController.close}>
24
- <DropdownMenu.VirtualTrigger virtualRef={model.modalController.trigger} />
22
+ <DropdownMenu.Root modal={false} open={true} onOpenChange={modals.close}>
23
+ <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />
25
24
  <DropdownMenu.Content>
26
25
  <DropdownMenu.Viewport>
27
26
  <DropdownMenu.Item data-testid='row-menu-delete' onClick={() => model.deleteRow(state.rowIndex)}>
@@ -4,15 +4,15 @@
4
4
 
5
5
  import '@dxos-theme';
6
6
 
7
- import { type StoryObj, type Meta } from '@storybook/react';
7
+ import { type Meta } from '@storybook/react';
8
8
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
9
 
10
- import { type MutableSchema } from '@dxos/echo-schema';
10
+ import { type EchoSchema } from '@dxos/echo-schema';
11
11
  import { invariant } from '@dxos/invariant';
12
12
  import { useGlobalFilteredObjects } from '@dxos/plugin-search';
13
13
  import { faker } from '@dxos/random';
14
- import { Filter, useSpaces, useQuery, create } from '@dxos/react-client/echo';
15
- import { withClientProvider } from '@dxos/react-client/testing';
14
+ import { Filter, useQuery, create } from '@dxos/react-client/echo';
15
+ import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
16
16
  import { useDefaultValue } from '@dxos/react-ui';
17
17
  import { ViewEditor } from '@dxos/react-ui-form';
18
18
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
@@ -21,12 +21,14 @@ import { withLayout, withTheme } from '@dxos/storybook-utils';
21
21
 
22
22
  import { Table, type TableController } from './Table';
23
23
  import { useTableModel, type UseTableModelParams } from '../../hooks';
24
+ import { TablePresentation } from '../../model';
24
25
  import translations from '../../translations';
25
26
  import { TableType } from '../../types';
26
27
  import { initializeTable } from '../../util';
27
- import { Toolbar } from '../Toolbar';
28
+ import { TableToolbar } from '../TableToolbar';
28
29
  import { createItems, createTable, type SimulatorProps, useSimulator } from '../testing';
29
30
 
31
+ // NOTE(ZaymonFC): We rely on this seed being 0 in the smoke tests.
30
32
  faker.seed(0);
31
33
 
32
34
  //
@@ -34,25 +36,26 @@ faker.seed(0);
34
36
  //
35
37
 
36
38
  const DefaultStory = () => {
37
- const spaces = useSpaces();
38
- const space = spaces[spaces.length - 1];
39
+ const { space } = useClientProvider();
40
+ invariant(space);
41
+
39
42
  const tables = useQuery(space, Filter.schema(TableType));
40
43
  const [table, setTable] = useState<TableType>();
41
- const [schema, setSchema] = useState<MutableSchema>();
44
+ const [schema, setSchema] = useState<EchoSchema>();
42
45
  useEffect(() => {
43
- if (tables.length && !table) {
46
+ if (space && tables.length && !table) {
44
47
  const table = tables[0];
45
48
  invariant(table.view);
46
49
  setTable(table);
47
- setSchema(space.db.schemaRegistry.getSchema(table.view.query.type));
50
+ setSchema(space.db.schemaRegistry.getSchema(table.view.target!.query.type));
48
51
  }
49
- }, [tables]);
52
+ }, [space, tables]);
50
53
 
51
54
  const projection = useMemo(() => {
52
- if (schema && table?.view) {
53
- return new ViewProjection(schema, table.view);
55
+ if (schema && table?.view?.target) {
56
+ return new ViewProjection(schema, table.view.target);
54
57
  }
55
- }, [schema, table?.view]);
58
+ }, [schema, table?.view?.target]);
56
59
 
57
60
  const objects = useQuery(space, schema ? Filter.schema(schema) : Filter.nothing());
58
61
  const filteredObjects = useGlobalFilteredObjects(objects);
@@ -81,6 +84,32 @@ const DefaultStory = () => {
81
84
  [table, projection],
82
85
  );
83
86
 
87
+ const tableRef = useRef<TableController>(null);
88
+ const handleCellUpdate = useCallback((cell: any) => {
89
+ tableRef.current?.update?.(cell);
90
+ }, []);
91
+
92
+ const handleRowOrderChanged = useCallback(() => {
93
+ tableRef.current?.update?.();
94
+ }, []);
95
+
96
+ const model = useTableModel({
97
+ table,
98
+ projection,
99
+ objects: filteredObjects,
100
+ onInsertRow: handleInsertRow,
101
+ onDeleteRows: handleDeleteRows,
102
+ onDeleteColumn: handleDeleteColumn,
103
+ onCellUpdate: handleCellUpdate,
104
+ onRowOrderChanged: handleRowOrderChanged,
105
+ });
106
+
107
+ const presentation = useMemo(() => {
108
+ if (model) {
109
+ return new TablePresentation(model);
110
+ }
111
+ }, [model]);
112
+
84
113
  const handleAction = useCallback(
85
114
  (action: { type: string }) => {
86
115
  switch (action.type) {
@@ -90,23 +119,26 @@ const DefaultStory = () => {
90
119
  }
91
120
  case 'add-row': {
92
121
  handleInsertRow();
122
+ break;
123
+ }
124
+ case 'save-view': {
125
+ model?.saveView();
126
+ break;
93
127
  }
94
128
  }
95
129
  },
96
- [table, spaces],
130
+ [table, model],
97
131
  );
98
132
 
99
- const tableRef = useRef<TableController>(null);
100
- const model = useTableModel({
101
- table,
102
- projection,
103
- objects: filteredObjects,
104
- onInsertRow: handleInsertRow,
105
- onDeleteRows: handleDeleteRows,
106
- onDeleteColumn: handleDeleteColumn,
107
- onCellUpdate: (cell) => tableRef.current?.update?.(cell),
108
- onRowOrderChanged: () => tableRef.current?.update?.(),
109
- });
133
+ const onTypenameChanged = useCallback(
134
+ (typename: string) => {
135
+ if (table?.view?.target) {
136
+ schema?.updateTypename(typename);
137
+ table.view.target.query.type = typename;
138
+ }
139
+ },
140
+ [table?.view?.target, schema],
141
+ );
110
142
 
111
143
  if (!schema || !table) {
112
144
  return <div />;
@@ -115,27 +147,24 @@ const DefaultStory = () => {
115
147
  return (
116
148
  <div className='grow grid grid-cols-[1fr_350px]'>
117
149
  <div className='grid grid-rows-[min-content_1fr] min-bs-0 overflow-hidden'>
118
- <Toolbar.Root classNames='border-b border-separator' onAction={handleAction}>
119
- <Toolbar.Editing />
120
- <Toolbar.Separator />
121
- <Toolbar.Actions />
122
- </Toolbar.Root>
150
+ <TableToolbar classNames='border-b border-separator' onAction={handleAction} />
123
151
  <Table.Root>
124
- <Table.Main ref={tableRef} model={model} ignoreAttention />
152
+ <Table.Main ref={tableRef} model={model} presentation={presentation} ignoreAttention />
125
153
  </Table.Root>
126
154
  </div>
127
155
  <div className='flex flex-col h-full border-l border-separator overflow-y-auto'>
128
- {table.view && (
156
+ {table.view?.target && (
129
157
  <ViewEditor
130
158
  registry={space?.db.schemaRegistry}
131
159
  schema={schema}
132
- view={table.view}
160
+ view={table.view.target!}
161
+ onTypenameChanged={onTypenameChanged}
133
162
  onDelete={handleDeleteColumn}
134
163
  />
135
164
  )}
136
165
 
137
166
  <SyntaxHighlighter language='json' className='w-full text-xs'>
138
- {JSON.stringify({ view: table.view, schema }, null, 2)}
167
+ {JSON.stringify({ view: table.view?.target, schema }, null, 2)}
139
168
  </SyntaxHighlighter>
140
169
  </div>
141
170
  </div>
@@ -146,7 +175,7 @@ type StoryProps = {
146
175
  rows?: number;
147
176
  } & Pick<SimulatorProps, 'insertInterval' | 'updateInterval'>;
148
177
 
149
- const TablePerformanceStory = (props: StoryProps) => {
178
+ const _TablePerformanceStory = (props: StoryProps) => {
150
179
  const getDefaultRows = useCallback(() => 10, []);
151
180
  const rows = useDefaultValue(props.rows, getDefaultRows);
152
181
  const table = useMemo(() => createTable(), []);
@@ -161,9 +190,9 @@ const TablePerformanceStory = (props: StoryProps) => {
161
190
 
162
191
  const handleDeleteColumn = useCallback<NonNullable<UseTableModelParams<any>['onDeleteColumn']>>(
163
192
  (fieldId) => {
164
- if (table && table.view) {
165
- const fieldPosition = table.view.fields.findIndex((field) => field.id === fieldId);
166
- table.view.fields.splice(fieldPosition, 1);
193
+ if (table && table.view?.target) {
194
+ const fieldPosition = table.view.target!.fields.findIndex((field) => field.id === fieldId);
195
+ table.view.target!.fields.splice(fieldPosition, 1);
167
196
  }
168
197
  },
169
198
  [table],
@@ -202,7 +231,7 @@ const meta: Meta<StoryProps> = {
202
231
  createSpace: true,
203
232
  onSpaceCreated: async ({ space }) => {
204
233
  const table = space.db.add(create(TableType, {}));
205
- const schema = initializeTable({ space, table, initialRow: false });
234
+ const schema = await initializeTable({ space, table, initialRow: false });
206
235
  Array.from({ length: 10 }).map(() => {
207
236
  return space.db.add(
208
237
  create(schema, {
@@ -219,22 +248,22 @@ const meta: Meta<StoryProps> = {
219
248
 
220
249
  export default meta;
221
250
 
222
- type Story = StoryObj<StoryProps>;
223
-
224
251
  export const Default = {};
225
252
 
226
- export const Mutations: Story = {
227
- render: TablePerformanceStory,
228
- args: {
229
- rows: 1000,
230
- updateInterval: 1,
231
- },
232
- };
253
+ // TODO(ZaymonFC): Restore the performance stories.
254
+ // type Story = StoryObj<StoryProps>;
255
+ // export const Mutations: Story = {
256
+ // render: TablePerformanceStory,
257
+ // args: {
258
+ // rows: 1000,
259
+ // updateInterval: 1,
260
+ // },
261
+ // };
233
262
 
234
- export const RapidInsertions: Story = {
235
- render: TablePerformanceStory,
236
- args: {
237
- rows: 0,
238
- insertInterval: 100,
239
- },
240
- };
263
+ // export const RapidInsertions: Story = {
264
+ // render: TablePerformanceStory,
265
+ // args: {
266
+ // rows: 0,
267
+ // insertInterval: 100,
268
+ // },
269
+ // };