@powerhousedao/document-engineering 1.39.0 → 1.40.0

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 (57) hide show
  1. package/README.md +12 -0
  2. package/dist/src/table/components/default-fns/default-cell-on-save.d.ts +11 -0
  3. package/dist/src/table/components/default-fns/default-cell-on-save.d.ts.map +1 -0
  4. package/dist/src/table/components/default-fns/default-cell-on-save.js +18 -0
  5. package/dist/src/table/components/default-fns/default-cell-on-save.js.map +1 -0
  6. package/dist/src/table/table/object-set-table.d.ts.map +1 -1
  7. package/dist/src/table/table/object-set-table.js +2 -11
  8. package/dist/src/table/table/object-set-table.js.map +1 -1
  9. package/dist/src/table/tests/basic-rendering.test.d.ts +2 -0
  10. package/dist/src/table/tests/basic-rendering.test.d.ts.map +1 -0
  11. package/dist/src/table/tests/basic-rendering.test.js +332 -0
  12. package/dist/src/table/tests/basic-rendering.test.js.map +1 -0
  13. package/dist/src/table/tests/cell-selection.test.d.ts +2 -0
  14. package/dist/src/table/tests/cell-selection.test.d.ts.map +1 -0
  15. package/dist/src/table/tests/cell-selection.test.js +346 -0
  16. package/dist/src/table/tests/cell-selection.test.js.map +1 -0
  17. package/dist/src/table/tests/helpers/test-utils.d.ts +28 -0
  18. package/dist/src/table/tests/helpers/test-utils.d.ts.map +1 -0
  19. package/dist/src/table/tests/helpers/test-utils.js +85 -0
  20. package/dist/src/table/tests/helpers/test-utils.js.map +1 -0
  21. package/dist/src/table/tests/page-objects/base-table.page.d.ts +83 -0
  22. package/dist/src/table/tests/page-objects/base-table.page.d.ts.map +1 -0
  23. package/dist/src/table/tests/page-objects/base-table.page.js +146 -0
  24. package/dist/src/table/tests/page-objects/base-table.page.js.map +1 -0
  25. package/dist/src/table/tests/page-objects/table-cell.page.d.ts +58 -0
  26. package/dist/src/table/tests/page-objects/table-cell.page.d.ts.map +1 -0
  27. package/dist/src/table/tests/page-objects/table-cell.page.js +163 -0
  28. package/dist/src/table/tests/page-objects/table-cell.page.js.map +1 -0
  29. package/dist/src/table/tests/page-objects/table-header.page.d.ts +66 -0
  30. package/dist/src/table/tests/page-objects/table-header.page.d.ts.map +1 -0
  31. package/dist/src/table/tests/page-objects/table-header.page.js +156 -0
  32. package/dist/src/table/tests/page-objects/table-header.page.js.map +1 -0
  33. package/dist/src/table/tests/page-objects/table-row.page.d.ts +98 -0
  34. package/dist/src/table/tests/page-objects/table-row.page.d.ts.map +1 -0
  35. package/dist/src/table/tests/page-objects/table-row.page.js +240 -0
  36. package/dist/src/table/tests/page-objects/table-row.page.js.map +1 -0
  37. package/dist/src/table/tests/page-objects/table.page.d.ts +36 -0
  38. package/dist/src/table/tests/page-objects/table.page.d.ts.map +1 -0
  39. package/dist/src/table/tests/page-objects/table.page.js +46 -0
  40. package/dist/src/table/tests/page-objects/table.page.js.map +1 -0
  41. package/dist/src/table/tests/row-actions.test.d.ts +2 -0
  42. package/dist/src/table/tests/row-actions.test.d.ts.map +1 -0
  43. package/dist/src/table/tests/row-actions.test.js +601 -0
  44. package/dist/src/table/tests/row-actions.test.js.map +1 -0
  45. package/dist/src/table/tests/row-selection.test.d.ts +2 -0
  46. package/dist/src/table/tests/row-selection.test.d.ts.map +1 -0
  47. package/dist/src/table/tests/row-selection.test.js +272 -0
  48. package/dist/src/table/tests/row-selection.test.js.map +1 -0
  49. package/dist/src/table/tests/sorting.test.d.ts +2 -0
  50. package/dist/src/table/tests/sorting.test.d.ts.map +1 -0
  51. package/dist/src/table/tests/sorting.test.js +793 -0
  52. package/dist/src/table/tests/sorting.test.js.map +1 -0
  53. package/dist/src/ui/components/data-entry/date-picker/date-picker.js +1 -1
  54. package/dist/src/ui/components/data-entry/date-picker/date-picker.js.map +1 -1
  55. package/dist/style.css +4 -5
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,346 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
2
+ import { describe, expect, it } from 'vitest';
3
+ import { fireEvent } from '@testing-library/react';
4
+ import { createMockPerson, createTestTableConfig, renderTestTable } from './helpers/test-utils.js';
5
+ import { TablePage } from './page-objects/table.page.js';
6
+ describe('ObjectSetTable - Cell Selection', () => {
7
+ describe('Single Cell Selection', () => {
8
+ it('should select a cell when clicked', () => {
9
+ const renderResult = renderTestTable();
10
+ const table = new TablePage(renderResult);
11
+ // Click cell at (0, 1) - First Name column
12
+ const cell = table.getCellByIndex(0, 1);
13
+ expect(cell).toBeTruthy();
14
+ fireEvent.click(cell);
15
+ // Verify cell is selected
16
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
17
+ expect(table.cell.getCellBorderColor(0, 1)).toBe('gray'); // Non-editable cell
18
+ });
19
+ it('should deselect previous cell when selecting a new cell', () => {
20
+ const renderResult = renderTestTable();
21
+ const table = new TablePage(renderResult);
22
+ // Click first cell
23
+ const firstCell = table.getCellByIndex(0, 1);
24
+ fireEvent.click(firstCell);
25
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
26
+ // Click second cell
27
+ const secondCell = table.getCellByIndex(1, 2);
28
+ fireEvent.click(secondCell);
29
+ // Verify first cell is deselected and second is selected
30
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
31
+ expect(table.cell.isCellSelected(1, 2)).toBe(true);
32
+ });
33
+ it('should clear cell selection when row number is clicked', () => {
34
+ const renderResult = renderTestTable();
35
+ const table = new TablePage(renderResult);
36
+ // Click cell first
37
+ const cell = table.getCellByIndex(0, 1);
38
+ expect(cell).toBeTruthy();
39
+ fireEvent.click(cell);
40
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
41
+ // Click row number cell
42
+ const rowNumberCell = table.getCellByIndex(0, 0);
43
+ expect(rowNumberCell).toBeTruthy();
44
+ fireEvent.click(rowNumberCell);
45
+ // Verify cell selection is cleared and row is selected
46
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
47
+ expect(table.row.isRowSelected(0)).toBe(true);
48
+ });
49
+ });
50
+ describe('Visual State Changes', () => {
51
+ it('should apply blue border to selected editable cell', () => {
52
+ const editableConfig = createTestTableConfig({
53
+ columns: [
54
+ {
55
+ field: 'firstName',
56
+ title: 'First Name',
57
+ type: 'string',
58
+ editable: true,
59
+ },
60
+ {
61
+ field: 'status',
62
+ title: 'Status',
63
+ type: 'string',
64
+ },
65
+ {
66
+ field: 'payment',
67
+ title: 'Payment',
68
+ type: 'number',
69
+ },
70
+ ],
71
+ });
72
+ const renderResult = renderTestTable(editableConfig);
73
+ const table = new TablePage(renderResult);
74
+ // Click editable cell
75
+ const editableCell = table.getCellByIndex(0, 1);
76
+ expect(editableCell).toBeTruthy();
77
+ fireEvent.click(editableCell);
78
+ // Verify blue border for editable cell
79
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
80
+ expect(table.cell.getCellBorderColor(0, 1)).toBe('blue');
81
+ });
82
+ it('should apply gray border to selected non-editable cell', () => {
83
+ const renderResult = renderTestTable();
84
+ const table = new TablePage(renderResult);
85
+ // Click non-editable cell
86
+ const nonEditableCell = table.getCellByIndex(0, 2);
87
+ expect(nonEditableCell).toBeTruthy();
88
+ fireEvent.click(nonEditableCell);
89
+ // Verify gray border for non-editable cell
90
+ expect(table.cell.isCellSelected(0, 2)).toBe(true);
91
+ expect(table.cell.getCellBorderColor(0, 2)).toBe('gray');
92
+ });
93
+ it('should apply focus styling to selected cell', () => {
94
+ const renderResult = renderTestTable();
95
+ const table = new TablePage(renderResult);
96
+ // Click cell
97
+ const cell = table.getCellByIndex(0, 1);
98
+ expect(cell).toBeTruthy();
99
+ fireEvent.click(cell);
100
+ // Verify cell has focus and tabIndex
101
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
102
+ expect(cell?.getAttribute('tabIndex')).toBe('0');
103
+ });
104
+ });
105
+ describe('Double-Click Edit Mode', () => {
106
+ it('should enter edit mode on double-click for editable cell', () => {
107
+ const editableConfig = createTestTableConfig({
108
+ columns: [
109
+ {
110
+ field: 'firstName',
111
+ title: 'First Name',
112
+ type: 'string',
113
+ editable: true,
114
+ },
115
+ {
116
+ field: 'status',
117
+ title: 'Status',
118
+ type: 'string',
119
+ },
120
+ {
121
+ field: 'payment',
122
+ title: 'Payment',
123
+ type: 'number',
124
+ },
125
+ ],
126
+ });
127
+ const renderResult = renderTestTable(editableConfig);
128
+ const table = new TablePage(renderResult);
129
+ // Double-click editable cell - should enter edit mode, not just select
130
+ const editableCell = table.getCellByIndex(0, 1);
131
+ expect(editableCell).toBeTruthy();
132
+ fireEvent.doubleClick(editableCell);
133
+ // For editable cells, double-click enters edit mode instead of just selecting
134
+ // We can verify the cell is editable, but edit mode detection is complex
135
+ expect(table.cell.isCellEditable(0, 1)).toBe(true);
136
+ });
137
+ it('should handle double-click for non-editable cell', () => {
138
+ const nonEditableConfig = createTestTableConfig({
139
+ columns: [
140
+ {
141
+ field: 'firstName',
142
+ title: 'First Name',
143
+ type: 'string',
144
+ editable: false,
145
+ },
146
+ {
147
+ field: 'status',
148
+ title: 'Status',
149
+ type: 'string',
150
+ editable: false,
151
+ },
152
+ {
153
+ field: 'payment',
154
+ title: 'Payment',
155
+ type: 'number',
156
+ editable: false,
157
+ },
158
+ ],
159
+ });
160
+ const renderResult = renderTestTable(nonEditableConfig);
161
+ const table = new TablePage(renderResult);
162
+ // Double-click non-editable cell - should not enter edit mode
163
+ const nonEditableCell = table.getCellByIndex(0, 2);
164
+ expect(nonEditableCell).toBeTruthy();
165
+ fireEvent.doubleClick(nonEditableCell);
166
+ // For non-editable cells, double-click should not cause any issues
167
+ // The main behavior is that the cell selection system works correctly
168
+ expect(table.cell.getCellValue(0, 2)).toBeDefined();
169
+ });
170
+ it('should select cell on first click and maintain selection on double-click', () => {
171
+ const editableConfig = createTestTableConfig({
172
+ columns: [
173
+ {
174
+ field: 'firstName',
175
+ title: 'First Name',
176
+ type: 'string',
177
+ editable: true,
178
+ },
179
+ {
180
+ field: 'status',
181
+ title: 'Status',
182
+ type: 'string',
183
+ },
184
+ {
185
+ field: 'payment',
186
+ title: 'Payment',
187
+ type: 'number',
188
+ },
189
+ ],
190
+ });
191
+ const renderResult = renderTestTable(editableConfig);
192
+ const table = new TablePage(renderResult);
193
+ // First click - should select cell
194
+ const cell = table.getCellByIndex(0, 1);
195
+ expect(cell).toBeTruthy();
196
+ fireEvent.click(cell);
197
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
198
+ // Double-click - should maintain selection
199
+ expect(cell).toBeTruthy();
200
+ fireEvent.doubleClick(cell);
201
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
202
+ });
203
+ });
204
+ describe('Cell Selection Clearing', () => {
205
+ it('should clear cell selection when clicking another cell', () => {
206
+ const renderResult = renderTestTable();
207
+ const table = new TablePage(renderResult);
208
+ // Click first cell
209
+ const firstCell = table.getCellByIndex(0, 1);
210
+ fireEvent.click(firstCell);
211
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
212
+ // Click second cell
213
+ const secondCell = table.getCellByIndex(1, 2);
214
+ fireEvent.click(secondCell);
215
+ // Verify first cell is deselected and second is selected
216
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
217
+ expect(table.cell.isCellSelected(1, 2)).toBe(true);
218
+ });
219
+ it('should clear cell selection when selecting a row', () => {
220
+ const renderResult = renderTestTable();
221
+ const table = new TablePage(renderResult);
222
+ // Click cell first
223
+ const cell = table.getCellByIndex(0, 1);
224
+ expect(cell).toBeTruthy();
225
+ fireEvent.click(cell);
226
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
227
+ // Click row number of different row
228
+ const rowNumberCell = table.getCellByIndex(2, 0);
229
+ expect(rowNumberCell).toBeTruthy();
230
+ fireEvent.click(rowNumberCell);
231
+ // Verify cell selection is cleared and row is selected
232
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
233
+ expect(table.row.isRowSelected(2)).toBe(true);
234
+ });
235
+ it('should clear cell selection when clicking with Ctrl/Cmd/Shift', () => {
236
+ const renderResult = renderTestTable();
237
+ const table = new TablePage(renderResult);
238
+ // Click cell first
239
+ const cell = table.getCellByIndex(0, 1);
240
+ expect(cell).toBeTruthy();
241
+ fireEvent.click(cell);
242
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
243
+ // Click row with Ctrl key pressed
244
+ const row = table.getRowByIndex(2);
245
+ expect(row).toBeTruthy();
246
+ fireEvent.click(row, { ctrlKey: true });
247
+ // Verify cell selection is cleared when row selection happens
248
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
249
+ expect(table.row.isRowSelected(2)).toBe(true);
250
+ });
251
+ });
252
+ describe('Edge Cases', () => {
253
+ it('should handle cell selection in first row', () => {
254
+ const renderResult = renderTestTable();
255
+ const table = new TablePage(renderResult);
256
+ // Click cell in first row
257
+ const cell = table.getCellByIndex(0, 1);
258
+ expect(cell).toBeTruthy();
259
+ fireEvent.click(cell);
260
+ // Verify proper selection
261
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
262
+ expect(table.cell.getCellBorderColor(0, 1)).toBe('gray');
263
+ });
264
+ it('should handle cell selection in last row', () => {
265
+ const renderResult = renderTestTable();
266
+ const table = new TablePage(renderResult);
267
+ const lastRowIndex = table.getRowCount() - 1;
268
+ // Click cell in last row
269
+ const cell = table.getCellByIndex(lastRowIndex, 1);
270
+ expect(cell).toBeTruthy();
271
+ fireEvent.click(cell);
272
+ // Verify proper selection
273
+ expect(table.cell.isCellSelected(lastRowIndex, 1)).toBe(true);
274
+ expect(table.cell.getCellBorderColor(lastRowIndex, 1)).toBe('gray');
275
+ });
276
+ it('should handle cell selection with empty data', () => {
277
+ const emptyDataConfig = createTestTableConfig({
278
+ data: [createMockPerson({ firstName: '' })],
279
+ });
280
+ const renderResult = renderTestTable(emptyDataConfig);
281
+ const table = new TablePage(renderResult);
282
+ // Click empty cell
283
+ const cell = table.getCellByIndex(0, 1);
284
+ expect(cell).toBeTruthy();
285
+ fireEvent.click(cell);
286
+ // Verify selection works even with empty data
287
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
288
+ expect(table.cell.isCellEmpty(0, 1)).toBe(true);
289
+ });
290
+ it('should not allow cell selection when row selection is disabled', () => {
291
+ const noRowSelectionConfig = createTestTableConfig({
292
+ allowRowSelection: false,
293
+ });
294
+ const renderResult = renderTestTable(noRowSelectionConfig);
295
+ const table = new TablePage(renderResult);
296
+ // Click cell
297
+ const cell = table.getCellByIndex(0, 1);
298
+ expect(cell).toBeTruthy();
299
+ fireEvent.click(cell);
300
+ // Verify cell selection is disabled when row selection is disabled
301
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
302
+ expect(table.cell.getCellBorderColor(0, 1)).toBe('none');
303
+ });
304
+ it('should handle cell selection in different column types', () => {
305
+ const renderResult = renderTestTable();
306
+ const table = new TablePage(renderResult);
307
+ // Test selection in different columns
308
+ const firstNameCell = table.getCellByIndex(0, 1);
309
+ const statusCell = table.getCellByIndex(0, 2);
310
+ const paymentCell = table.getCellByIndex(0, 3);
311
+ // Click firstName column
312
+ expect(firstNameCell).toBeTruthy();
313
+ fireEvent.click(firstNameCell);
314
+ expect(table.cell.isCellSelected(0, 1)).toBe(true);
315
+ // Click status column
316
+ expect(statusCell).toBeTruthy();
317
+ fireEvent.click(statusCell);
318
+ expect(table.cell.isCellSelected(0, 2)).toBe(true);
319
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
320
+ // Click payment column
321
+ expect(paymentCell).toBeTruthy();
322
+ fireEvent.click(paymentCell);
323
+ expect(table.cell.isCellSelected(0, 3)).toBe(true);
324
+ expect(table.cell.isCellSelected(0, 2)).toBe(false);
325
+ });
326
+ it('should handle rapid cell selection changes', () => {
327
+ const renderResult = renderTestTable();
328
+ const table = new TablePage(renderResult);
329
+ // Rapidly click different cells
330
+ const cell1 = table.getCellByIndex(0, 1);
331
+ const cell2 = table.getCellByIndex(1, 2);
332
+ const cell3 = table.getCellByIndex(2, 1);
333
+ expect(cell1).toBeTruthy();
334
+ fireEvent.click(cell1);
335
+ expect(cell2).toBeTruthy();
336
+ fireEvent.click(cell2);
337
+ expect(cell3).toBeTruthy();
338
+ fireEvent.click(cell3);
339
+ // Verify only the last clicked cell is selected
340
+ expect(table.cell.isCellSelected(0, 1)).toBe(false);
341
+ expect(table.cell.isCellSelected(1, 2)).toBe(false);
342
+ expect(table.cell.isCellSelected(2, 1)).toBe(true);
343
+ });
344
+ });
345
+ });
346
+ //# sourceMappingURL=cell-selection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-selection.test.js","sourceRoot":"","sources":["../../../../src/table/tests/cell-selection.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type RenderOptions, type RenderResult } from '@testing-library/react';
2
+ import type { ReactElement } from 'react';
3
+ import type { ObjectSetTableConfig } from '../../table/types.js';
4
+ import { type MockedPerson } from '../../table/mock-data.js';
5
+ /**
6
+ * Custom render function that wraps components with necessary providers
7
+ * and provides common test utilities for table testing
8
+ */
9
+ declare const customRender: (ui: ReactElement, options?: Omit<RenderOptions, "wrapper">) => RenderResult;
10
+ /**
11
+ * Creates a simple table configuration for testing
12
+ */
13
+ export declare const createTestTableConfig: (overrides?: Partial<ObjectSetTableConfig<MockedPerson>>) => ObjectSetTableConfig<MockedPerson>;
14
+ /**
15
+ * Renders a test table with the given configuration
16
+ */
17
+ export declare const renderTestTable: (config?: Partial<ObjectSetTableConfig<MockedPerson>>) => RenderResult;
18
+ /**
19
+ * Creates mock data for testing
20
+ */
21
+ export declare const createMockPerson: (overrides?: Partial<MockedPerson>) => MockedPerson;
22
+ /**
23
+ * Creates an array of mock persons for testing
24
+ */
25
+ export declare const createMockPersons: (count: number) => MockedPerson[];
26
+ export * from '@testing-library/react';
27
+ export { customRender as render };
28
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/helpers/test-utils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEtE;;;GAGG;AACH,QAAA,MAAM,YAAY,GAAI,IAAI,YAAY,EAAE,UAAU,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAG,YAIlF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,KACtD,oBAAoB,CAAC,YAAY,CAwBnC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,KAAG,YAGtF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY,OAAO,CAAC,YAAY,CAAC,KAAG,YAmBpE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,YAAY,EAQ7D,CAAA;AAGD,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render } from '@testing-library/react';
3
+ import { ObjectSetTable } from '../../table/object-set-table.js';
4
+ import { mockData } from '../../table/mock-data.js';
5
+ /**
6
+ * Custom render function that wraps components with necessary providers
7
+ * and provides common test utilities for table testing
8
+ */
9
+ const customRender = (ui, options) => {
10
+ return render(ui, {
11
+ ...options,
12
+ });
13
+ };
14
+ /**
15
+ * Creates a simple table configuration for testing
16
+ */
17
+ export const createTestTableConfig = (overrides) => {
18
+ return {
19
+ columns: [
20
+ {
21
+ field: 'firstName',
22
+ title: 'First Name',
23
+ type: 'string',
24
+ },
25
+ {
26
+ field: 'status',
27
+ title: 'Status',
28
+ type: 'string',
29
+ },
30
+ {
31
+ field: 'payment',
32
+ title: 'Payment',
33
+ type: 'number',
34
+ },
35
+ ],
36
+ data: mockData,
37
+ allowRowSelection: true,
38
+ showRowNumbers: true,
39
+ ...overrides,
40
+ };
41
+ };
42
+ /**
43
+ * Renders a test table with the given configuration
44
+ */
45
+ export const renderTestTable = (config) => {
46
+ const tableConfig = createTestTableConfig(config);
47
+ return customRender(_jsx(ObjectSetTable, { ...tableConfig }));
48
+ };
49
+ /**
50
+ * Creates mock data for testing
51
+ */
52
+ export const createMockPerson = (overrides) => {
53
+ return {
54
+ id: crypto.randomUUID(),
55
+ firstName: 'Test User',
56
+ walletAddress: '0x1234567890abcdef',
57
+ isActive: true,
58
+ payment: 1000,
59
+ email: 'test@example.com',
60
+ status: 'active',
61
+ address: {
62
+ country: 'US',
63
+ addressLine1: '123 Test St',
64
+ addressLine2: 'Apt 1',
65
+ city: 'Test City',
66
+ state: 'TS',
67
+ zip: '12345',
68
+ },
69
+ ...overrides,
70
+ };
71
+ };
72
+ /**
73
+ * Creates an array of mock persons for testing
74
+ */
75
+ export const createMockPersons = (count) => {
76
+ return Array.from({ length: count }, (_, index) => createMockPerson({
77
+ id: `test-${index}`,
78
+ firstName: `User ${index}`,
79
+ payment: index * 100,
80
+ }));
81
+ };
82
+ // Re-export everything from testing-library
83
+ export * from '@testing-library/react';
84
+ export { customRender as render };
85
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../../../src/table/tests/helpers/test-utils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAyC,MAAM,wBAAwB,CAAA;AAEtF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAEhE,OAAO,EAAE,QAAQ,EAAqB,MAAM,0BAA0B,CAAA;AAEtE;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,EAAgB,EAAE,OAAwC,EAAgB,EAAE;IAChG,OAAO,MAAM,CAAC,EAAE,EAAE;QAChB,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,SAAuD,EACnB,EAAE;IACtC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,QAAQ;aACf;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,QAAQ;aACf;YACD;gBACE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,QAAQ;aACf;SACF;QACD,IAAI,EAAE,QAAQ;QACd,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,GAAG,SAAS;KACb,CAAA;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAoD,EAAgB,EAAE;IACpG,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACjD,OAAO,YAAY,CAAC,KAAC,cAAc,OAAK,WAAW,GAAI,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAiC,EAAgB,EAAE;IAClF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,SAAS,EAAE,WAAW;QACtB,aAAa,EAAE,oBAAoB;QACnC,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,aAAa;YAC3B,YAAY,EAAE,OAAO;YACrB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,OAAO;SACb;QACD,GAAG,SAAS;KACb,CAAA;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAkB,EAAE;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAChD,gBAAgB,CAAC;QACf,EAAE,EAAE,QAAQ,KAAK,EAAE;QACnB,SAAS,EAAE,QAAQ,KAAK,EAAE;QAC1B,OAAO,EAAE,KAAK,GAAG,GAAG;KACrB,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED,4CAA4C;AAC5C,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { type RenderResult } from '@testing-library/react';
2
+ /**
3
+ * Base page object class for table interactions
4
+ * Provides common methods to query and interact with the table component
5
+ */
6
+ export declare class BaseTablePage {
7
+ protected container: HTMLElement;
8
+ protected renderResult: RenderResult;
9
+ constructor(renderResult: RenderResult);
10
+ /**
11
+ * Gets the main table element
12
+ */
13
+ getTable(): HTMLElement;
14
+ /**
15
+ * Gets the table header element
16
+ */
17
+ getTableHeader(): HTMLElement;
18
+ /**
19
+ * Gets the table body element
20
+ */
21
+ getTableBody(): HTMLElement;
22
+ /**
23
+ * Gets all table rows (excluding header)
24
+ */
25
+ getTableRows(): HTMLElement[];
26
+ /**
27
+ * Gets all header rows
28
+ */
29
+ getHeaderRows(): HTMLElement[];
30
+ /**
31
+ * Gets a specific row by index (0-based)
32
+ */
33
+ getRowByIndex(index: number): HTMLElement | null;
34
+ /**
35
+ * Gets all cells in a specific row
36
+ */
37
+ getCellsInRow(row: HTMLElement): HTMLElement[];
38
+ /**
39
+ * Gets a specific cell by row and column index (0-based)
40
+ */
41
+ getCellByIndex(rowIndex: number, columnIndex: number): HTMLElement | null;
42
+ /**
43
+ * Gets all header cells
44
+ */
45
+ getHeaderCells(): HTMLElement[];
46
+ /**
47
+ * Gets a specific header cell by index (0-based)
48
+ */
49
+ getHeaderCellByIndex(index: number): HTMLElement | null;
50
+ /**
51
+ * Gets the text content of a cell
52
+ */
53
+ getCellText(rowIndex: number, columnIndex: number): string;
54
+ /**
55
+ * Gets the text content of a header cell
56
+ */
57
+ getHeaderCellText(columnIndex: number): string;
58
+ /**
59
+ * Gets the number of rows in the table (excluding header)
60
+ */
61
+ getRowCount(): number;
62
+ /**
63
+ * Gets the number of columns in the table
64
+ */
65
+ getColumnCount(): number;
66
+ /**
67
+ * Checks if the table is present in the DOM
68
+ */
69
+ isTablePresent(): boolean;
70
+ /**
71
+ * Gets all column headers as an array of strings
72
+ */
73
+ getColumnHeaders(): string[];
74
+ /**
75
+ * Finds a row that contains specific text
76
+ */
77
+ findRowByText(text: string): HTMLElement | null;
78
+ /**
79
+ * Gets all text content from a specific row
80
+ */
81
+ getRowText(rowIndex: number): string[];
82
+ }
83
+ //# sourceMappingURL=base-table.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-table.page.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/base-table.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,wBAAwB,CAAA;AAElE;;;GAGG;AACH,qBAAa,aAAa;IACxB,SAAS,CAAC,SAAS,EAAE,WAAW,CAAA;IAChC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAA;gBAExB,YAAY,EAAE,YAAY;IAKtC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,YAAY,IAAI,WAAW;IAI3B;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAK7B;;OAEG;IACH,aAAa,IAAI,WAAW,EAAE;IAK9B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAKhD;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE;IAI9C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQzE;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAO/B;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAKvD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAK1D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAK9C;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,cAAc,IAAI,MAAM;IAKxB;;OAEG;IACH,cAAc,IAAI,OAAO;IASzB;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAK/C;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAMvC"}