@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.
- package/README.md +12 -0
- package/dist/src/table/components/default-fns/default-cell-on-save.d.ts +11 -0
- package/dist/src/table/components/default-fns/default-cell-on-save.d.ts.map +1 -0
- package/dist/src/table/components/default-fns/default-cell-on-save.js +18 -0
- package/dist/src/table/components/default-fns/default-cell-on-save.js.map +1 -0
- package/dist/src/table/table/object-set-table.d.ts.map +1 -1
- package/dist/src/table/table/object-set-table.js +2 -11
- package/dist/src/table/table/object-set-table.js.map +1 -1
- package/dist/src/table/tests/basic-rendering.test.d.ts +2 -0
- package/dist/src/table/tests/basic-rendering.test.d.ts.map +1 -0
- package/dist/src/table/tests/basic-rendering.test.js +332 -0
- package/dist/src/table/tests/basic-rendering.test.js.map +1 -0
- package/dist/src/table/tests/cell-selection.test.d.ts +2 -0
- package/dist/src/table/tests/cell-selection.test.d.ts.map +1 -0
- package/dist/src/table/tests/cell-selection.test.js +346 -0
- package/dist/src/table/tests/cell-selection.test.js.map +1 -0
- package/dist/src/table/tests/helpers/test-utils.d.ts +28 -0
- package/dist/src/table/tests/helpers/test-utils.d.ts.map +1 -0
- package/dist/src/table/tests/helpers/test-utils.js +85 -0
- package/dist/src/table/tests/helpers/test-utils.js.map +1 -0
- package/dist/src/table/tests/page-objects/base-table.page.d.ts +83 -0
- package/dist/src/table/tests/page-objects/base-table.page.d.ts.map +1 -0
- package/dist/src/table/tests/page-objects/base-table.page.js +146 -0
- package/dist/src/table/tests/page-objects/base-table.page.js.map +1 -0
- package/dist/src/table/tests/page-objects/table-cell.page.d.ts +58 -0
- package/dist/src/table/tests/page-objects/table-cell.page.d.ts.map +1 -0
- package/dist/src/table/tests/page-objects/table-cell.page.js +163 -0
- package/dist/src/table/tests/page-objects/table-cell.page.js.map +1 -0
- package/dist/src/table/tests/page-objects/table-header.page.d.ts +66 -0
- package/dist/src/table/tests/page-objects/table-header.page.d.ts.map +1 -0
- package/dist/src/table/tests/page-objects/table-header.page.js +156 -0
- package/dist/src/table/tests/page-objects/table-header.page.js.map +1 -0
- package/dist/src/table/tests/page-objects/table-row.page.d.ts +98 -0
- package/dist/src/table/tests/page-objects/table-row.page.d.ts.map +1 -0
- package/dist/src/table/tests/page-objects/table-row.page.js +240 -0
- package/dist/src/table/tests/page-objects/table-row.page.js.map +1 -0
- package/dist/src/table/tests/page-objects/table.page.d.ts +36 -0
- package/dist/src/table/tests/page-objects/table.page.d.ts.map +1 -0
- package/dist/src/table/tests/page-objects/table.page.js +46 -0
- package/dist/src/table/tests/page-objects/table.page.js.map +1 -0
- package/dist/src/table/tests/row-actions.test.d.ts +2 -0
- package/dist/src/table/tests/row-actions.test.d.ts.map +1 -0
- package/dist/src/table/tests/row-actions.test.js +601 -0
- package/dist/src/table/tests/row-actions.test.js.map +1 -0
- package/dist/src/table/tests/row-selection.test.d.ts +2 -0
- package/dist/src/table/tests/row-selection.test.d.ts.map +1 -0
- package/dist/src/table/tests/row-selection.test.js +272 -0
- package/dist/src/table/tests/row-selection.test.js.map +1 -0
- package/dist/src/table/tests/sorting.test.d.ts +2 -0
- package/dist/src/table/tests/sorting.test.d.ts.map +1 -0
- package/dist/src/table/tests/sorting.test.js +793 -0
- package/dist/src/table/tests/sorting.test.js.map +1 -0
- package/dist/src/ui/components/data-entry/date-picker/date-picker.js +1 -1
- package/dist/src/ui/components/data-entry/date-picker/date-picker.js.map +1 -1
- package/dist/style.css +4 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { BaseTablePage } from './base-table.page.js';
|
|
2
|
+
import type { RenderResult } from '@testing-library/react';
|
|
3
|
+
/**
|
|
4
|
+
* Page object for row-specific interactions
|
|
5
|
+
* Extends BaseTablePage with row-focused methods
|
|
6
|
+
*/
|
|
7
|
+
export declare class TableRowPage extends BaseTablePage {
|
|
8
|
+
constructor(renderResult: RenderResult);
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a row is selected
|
|
11
|
+
*/
|
|
12
|
+
isRowSelected(rowIndex: number): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the row number (if showRowNumbers is enabled)
|
|
15
|
+
*/
|
|
16
|
+
getRowNumber(rowIndex: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Gets all data from a specific row as an array of strings
|
|
19
|
+
*/
|
|
20
|
+
getRowData(rowIndex: number): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Gets the row data as a key-value object (requires column headers)
|
|
23
|
+
*/
|
|
24
|
+
getRowDataAsObject(rowIndex: number): Record<string, string>;
|
|
25
|
+
/**
|
|
26
|
+
* Finds the index of a row that contains specific text
|
|
27
|
+
*/
|
|
28
|
+
findRowIndexByText(text: string): number;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a row contains specific text
|
|
31
|
+
*/
|
|
32
|
+
rowContains(rowIndex: number, text: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Gets the CSS classes of a row
|
|
35
|
+
*/
|
|
36
|
+
getRowClasses(rowIndex: number): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Checks if a row has a specific CSS class
|
|
39
|
+
*/
|
|
40
|
+
rowHasClass(rowIndex: number, className: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Checks if a row is hovered (has hover styles)
|
|
43
|
+
*/
|
|
44
|
+
isRowHovered(rowIndex: number): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Gets the row actions (if any) for a specific row
|
|
47
|
+
*/
|
|
48
|
+
getRowActions(rowIndex: number): HTMLElement[];
|
|
49
|
+
/**
|
|
50
|
+
* Checks if a row has actions available
|
|
51
|
+
*/
|
|
52
|
+
hasRowActions(rowIndex: number): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Gets the height of a row in pixels
|
|
55
|
+
*/
|
|
56
|
+
getRowHeight(rowIndex: number): number;
|
|
57
|
+
/**
|
|
58
|
+
* Checks if a row is visible in the viewport
|
|
59
|
+
*/
|
|
60
|
+
isRowVisible(rowIndex: number): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Gets all action buttons in a row (from the portal)
|
|
63
|
+
*/
|
|
64
|
+
getRowActionButtons(_rowIndex: number): HTMLElement[];
|
|
65
|
+
/**
|
|
66
|
+
* Gets the primary action button for a row
|
|
67
|
+
*/
|
|
68
|
+
getPrimaryActionButton(_rowIndex: number): HTMLElement | null;
|
|
69
|
+
/**
|
|
70
|
+
* Gets the secondary actions dropdown trigger button
|
|
71
|
+
*/
|
|
72
|
+
getSecondaryActionsButton(_rowIndex: number): HTMLElement | null;
|
|
73
|
+
/**
|
|
74
|
+
* Checks if row actions are visible (in the DOM)
|
|
75
|
+
*/
|
|
76
|
+
isRowActionsVisible(_rowIndex: number): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Clicks the primary action button for a row
|
|
79
|
+
*/
|
|
80
|
+
clickPrimaryAction(rowIndex: number): void;
|
|
81
|
+
/**
|
|
82
|
+
* Clicks the secondary actions dropdown trigger
|
|
83
|
+
*/
|
|
84
|
+
clickSecondaryActionsButton(rowIndex: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* Gets all items in the secondary actions dropdown menu
|
|
87
|
+
*/
|
|
88
|
+
getSecondaryActionItems(): HTMLElement[];
|
|
89
|
+
/**
|
|
90
|
+
* Clicks a specific secondary action by label
|
|
91
|
+
*/
|
|
92
|
+
clickSecondaryAction(actionLabel: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Checks if the secondary actions dropdown is open
|
|
95
|
+
*/
|
|
96
|
+
isSecondaryActionsDropdownOpen(): boolean;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=table-row.page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-row.page.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-row.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;GAGG;AACH,qBAAa,YAAa,SAAQ,aAAa;gBACjC,YAAY,EAAE,YAAY;IAItC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWxC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAStC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY5D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKxC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAOpD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAOzC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAKzD;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKvC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAQ9C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOtC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQvC;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAarD;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAyB7D;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAuBhE;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAO/C;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO1C;;OAEG;IACH,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnD;;OAEG;IACH,uBAAuB,IAAI,WAAW,EAAE;IAQxC;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS/C;;OAEG;IACH,8BAA8B,IAAI,OAAO;CAI1C"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { BaseTablePage } from './base-table.page.js';
|
|
2
|
+
/**
|
|
3
|
+
* Page object for row-specific interactions
|
|
4
|
+
* Extends BaseTablePage with row-focused methods
|
|
5
|
+
*/
|
|
6
|
+
export class TableRowPage extends BaseTablePage {
|
|
7
|
+
constructor(renderResult) {
|
|
8
|
+
super(renderResult);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Checks if a row is selected
|
|
12
|
+
*/
|
|
13
|
+
isRowSelected(rowIndex) {
|
|
14
|
+
const row = this.getRowByIndex(rowIndex);
|
|
15
|
+
if (!row)
|
|
16
|
+
return false;
|
|
17
|
+
// Check for selection indicators based on actual table implementation
|
|
18
|
+
const hasSelectedAttribute = row.getAttribute('data-selected') === 'true';
|
|
19
|
+
const hasSelectedClass = row.classList.contains('bg-blue-50');
|
|
20
|
+
return hasSelectedAttribute || hasSelectedClass;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Gets the row number (if showRowNumbers is enabled)
|
|
24
|
+
*/
|
|
25
|
+
getRowNumber(rowIndex) {
|
|
26
|
+
const row = this.getRowByIndex(rowIndex);
|
|
27
|
+
if (!row)
|
|
28
|
+
return '';
|
|
29
|
+
// First cell is typically the row number
|
|
30
|
+
const firstCell = this.getCellsInRow(row)[0];
|
|
31
|
+
return (firstCell.textContent || '').trim();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets all data from a specific row as an array of strings
|
|
35
|
+
*/
|
|
36
|
+
getRowData(rowIndex) {
|
|
37
|
+
return this.getRowText(rowIndex);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Gets the row data as a key-value object (requires column headers)
|
|
41
|
+
*/
|
|
42
|
+
getRowDataAsObject(rowIndex) {
|
|
43
|
+
const headers = this.getColumnHeaders();
|
|
44
|
+
const rowData = this.getRowData(rowIndex);
|
|
45
|
+
const result = {};
|
|
46
|
+
headers.forEach((header, index) => {
|
|
47
|
+
result[header] = rowData[index] ?? '';
|
|
48
|
+
});
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Finds the index of a row that contains specific text
|
|
53
|
+
*/
|
|
54
|
+
findRowIndexByText(text) {
|
|
55
|
+
const rows = this.getTableRows();
|
|
56
|
+
return rows.findIndex((row) => (row.textContent || '').includes(text));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks if a row contains specific text
|
|
60
|
+
*/
|
|
61
|
+
rowContains(rowIndex, text) {
|
|
62
|
+
const row = this.getRowByIndex(rowIndex);
|
|
63
|
+
if (!row)
|
|
64
|
+
return false;
|
|
65
|
+
return (row.textContent || '').includes(text);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Gets the CSS classes of a row
|
|
69
|
+
*/
|
|
70
|
+
getRowClasses(rowIndex) {
|
|
71
|
+
const row = this.getRowByIndex(rowIndex);
|
|
72
|
+
if (!row)
|
|
73
|
+
return [];
|
|
74
|
+
return Array.from(row.classList);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Checks if a row has a specific CSS class
|
|
78
|
+
*/
|
|
79
|
+
rowHasClass(rowIndex, className) {
|
|
80
|
+
const classes = this.getRowClasses(rowIndex);
|
|
81
|
+
return classes.includes(className);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Checks if a row is hovered (has hover styles)
|
|
85
|
+
*/
|
|
86
|
+
isRowHovered(rowIndex) {
|
|
87
|
+
const classes = this.getRowClasses(rowIndex);
|
|
88
|
+
return classes.some((cls) => cls.includes('hover') || cls.includes('group'));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets the row actions (if any) for a specific row
|
|
92
|
+
*/
|
|
93
|
+
getRowActions(rowIndex) {
|
|
94
|
+
const row = this.getRowByIndex(rowIndex);
|
|
95
|
+
if (!row)
|
|
96
|
+
return [];
|
|
97
|
+
// Look for action buttons or menus
|
|
98
|
+
return Array.from(row.querySelectorAll('button, [role="button"], .action, .row-actions button'));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Checks if a row has actions available
|
|
102
|
+
*/
|
|
103
|
+
hasRowActions(rowIndex) {
|
|
104
|
+
return this.getRowActions(rowIndex).length > 0;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Gets the height of a row in pixels
|
|
108
|
+
*/
|
|
109
|
+
getRowHeight(rowIndex) {
|
|
110
|
+
const row = this.getRowByIndex(rowIndex);
|
|
111
|
+
if (!row)
|
|
112
|
+
return 0;
|
|
113
|
+
return row.getBoundingClientRect().height;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Checks if a row is visible in the viewport
|
|
117
|
+
*/
|
|
118
|
+
isRowVisible(rowIndex) {
|
|
119
|
+
const row = this.getRowByIndex(rowIndex);
|
|
120
|
+
if (!row)
|
|
121
|
+
return false;
|
|
122
|
+
const rect = row.getBoundingClientRect();
|
|
123
|
+
return rect.top >= 0 && rect.bottom <= window.innerHeight;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Gets all action buttons in a row (from the portal)
|
|
127
|
+
*/
|
|
128
|
+
getRowActionButtons(_rowIndex) {
|
|
129
|
+
// Actions are rendered in a portal, so we need to look in the document body
|
|
130
|
+
const actionContainers = document.querySelectorAll('.fixed.z-5');
|
|
131
|
+
const buttons = [];
|
|
132
|
+
actionContainers.forEach((container) => {
|
|
133
|
+
const actionButtons = container.querySelectorAll('.cursor-pointer');
|
|
134
|
+
buttons.push(...Array.from(actionButtons));
|
|
135
|
+
});
|
|
136
|
+
return buttons;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Gets the primary action button for a row
|
|
140
|
+
*/
|
|
141
|
+
getPrimaryActionButton(_rowIndex) {
|
|
142
|
+
// Look for the cursor-pointer element that is NOT a dropdown trigger
|
|
143
|
+
const portalElements = document.querySelectorAll('.fixed.z-5');
|
|
144
|
+
for (const portal of portalElements) {
|
|
145
|
+
// Only look in visible portals (the one that's currently hovered)
|
|
146
|
+
if (portal.classList.contains('hidden')) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const buttons = portal.querySelectorAll('.cursor-pointer');
|
|
150
|
+
for (const button of buttons) {
|
|
151
|
+
// Skip dropdown trigger buttons - look for the one that's not the dropdown trigger
|
|
152
|
+
if (button.getAttribute('data-slot') === 'dropdown-menu-trigger' ||
|
|
153
|
+
button.getAttribute('aria-haspopup') === 'menu') {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// This should be the primary action button
|
|
157
|
+
return button;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Gets the secondary actions dropdown trigger button
|
|
164
|
+
*/
|
|
165
|
+
getSecondaryActionsButton(_rowIndex) {
|
|
166
|
+
// Look for the cursor-pointer element that has a dropdown trigger or vertical dots icon
|
|
167
|
+
const portalElements = document.querySelectorAll('.fixed.z-5');
|
|
168
|
+
for (const portal of portalElements) {
|
|
169
|
+
// Only look in visible portals (the one that's currently hovered)
|
|
170
|
+
if (portal.classList.contains('hidden')) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const buttons = portal.querySelectorAll('.cursor-pointer');
|
|
174
|
+
for (const button of buttons) {
|
|
175
|
+
// Check if this button has dropdown attributes or vertical dots icon
|
|
176
|
+
if (button.getAttribute('data-slot') === 'dropdown-menu-trigger' ||
|
|
177
|
+
button.getAttribute('aria-haspopup') === 'menu') {
|
|
178
|
+
return button;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Checks if row actions are visible (in the DOM)
|
|
186
|
+
*/
|
|
187
|
+
isRowActionsVisible(_rowIndex) {
|
|
188
|
+
// Actions are rendered in portals, so we need to check if any portal elements exist
|
|
189
|
+
// For now, we'll check if any portal elements exist since we can't easily distinguish between rows
|
|
190
|
+
const portalElements = document.querySelectorAll('.fixed.z-5');
|
|
191
|
+
return portalElements.length > 0;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Clicks the primary action button for a row
|
|
195
|
+
*/
|
|
196
|
+
clickPrimaryAction(rowIndex) {
|
|
197
|
+
const primaryButton = this.getPrimaryActionButton(rowIndex);
|
|
198
|
+
if (primaryButton) {
|
|
199
|
+
primaryButton.click();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Clicks the secondary actions dropdown trigger
|
|
204
|
+
*/
|
|
205
|
+
clickSecondaryActionsButton(rowIndex) {
|
|
206
|
+
const secondaryButton = this.getSecondaryActionsButton(rowIndex);
|
|
207
|
+
if (secondaryButton) {
|
|
208
|
+
secondaryButton.click();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Gets all items in the secondary actions dropdown menu
|
|
213
|
+
*/
|
|
214
|
+
getSecondaryActionItems() {
|
|
215
|
+
const dropdownMenu = document.querySelector('[role="menu"]');
|
|
216
|
+
if (!dropdownMenu)
|
|
217
|
+
return [];
|
|
218
|
+
const menuItems = dropdownMenu.querySelectorAll('[role="menuitem"]');
|
|
219
|
+
return Array.from(menuItems);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Clicks a specific secondary action by label
|
|
223
|
+
*/
|
|
224
|
+
clickSecondaryAction(actionLabel) {
|
|
225
|
+
const menuItems = this.getSecondaryActionItems();
|
|
226
|
+
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
|
|
227
|
+
const targetItem = menuItems.find((item) => item.textContent && item.textContent.includes(actionLabel));
|
|
228
|
+
if (targetItem) {
|
|
229
|
+
targetItem.click();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Checks if the secondary actions dropdown is open
|
|
234
|
+
*/
|
|
235
|
+
isSecondaryActionsDropdownOpen() {
|
|
236
|
+
const dropdownMenu = document.querySelector('[role="menu"]');
|
|
237
|
+
return dropdownMenu !== null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=table-row.page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-row.page.js","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-row.page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseTablePage } from './base-table.page.js';
|
|
2
|
+
import { TableCellPage } from './table-cell.page.js';
|
|
3
|
+
import { TableRowPage } from './table-row.page.js';
|
|
4
|
+
import { TableHeaderPage } from './table-header.page.js';
|
|
5
|
+
/**
|
|
6
|
+
* Unified table page object that provides access to all table functionality
|
|
7
|
+
* through a single object with specialized sub-objects
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const table = new TablePage(renderResult)
|
|
11
|
+
* table.getRowCount() // Base functionality
|
|
12
|
+
* table.cell.getCellValue(0, 1) // Cell functionality
|
|
13
|
+
* table.row.isRowSelected(0) // Row functionality
|
|
14
|
+
* table.header.getColumnTitle(0) // Header functionality
|
|
15
|
+
*/
|
|
16
|
+
export declare class TablePage extends BaseTablePage {
|
|
17
|
+
private _cell?;
|
|
18
|
+
private _row?;
|
|
19
|
+
private _header?;
|
|
20
|
+
/**
|
|
21
|
+
* Access to cell-specific page object methods
|
|
22
|
+
* Usage: table.cell.getCellValue(0, 1)
|
|
23
|
+
*/
|
|
24
|
+
get cell(): TableCellPage;
|
|
25
|
+
/**
|
|
26
|
+
* Access to row-specific page object methods
|
|
27
|
+
* Usage: table.row.isRowSelected(0)
|
|
28
|
+
*/
|
|
29
|
+
get row(): TableRowPage;
|
|
30
|
+
/**
|
|
31
|
+
* Access to header-specific page object methods
|
|
32
|
+
* Usage: table.header.getColumnTitle(0)
|
|
33
|
+
*/
|
|
34
|
+
get header(): TableHeaderPage;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=table.page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.page.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAE1C,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAiB;IAEjC;;;OAGG;IACH,IAAI,IAAI,IAAI,aAAa,CAGxB;IAED;;;OAGG;IACH,IAAI,GAAG,IAAI,YAAY,CAGtB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,eAAe,CAG5B;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseTablePage } from './base-table.page.js';
|
|
2
|
+
import { TableCellPage } from './table-cell.page.js';
|
|
3
|
+
import { TableRowPage } from './table-row.page.js';
|
|
4
|
+
import { TableHeaderPage } from './table-header.page.js';
|
|
5
|
+
/**
|
|
6
|
+
* Unified table page object that provides access to all table functionality
|
|
7
|
+
* through a single object with specialized sub-objects
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const table = new TablePage(renderResult)
|
|
11
|
+
* table.getRowCount() // Base functionality
|
|
12
|
+
* table.cell.getCellValue(0, 1) // Cell functionality
|
|
13
|
+
* table.row.isRowSelected(0) // Row functionality
|
|
14
|
+
* table.header.getColumnTitle(0) // Header functionality
|
|
15
|
+
*/
|
|
16
|
+
export class TablePage extends BaseTablePage {
|
|
17
|
+
// Lazy-loaded specialized page objects
|
|
18
|
+
_cell;
|
|
19
|
+
_row;
|
|
20
|
+
_header;
|
|
21
|
+
/**
|
|
22
|
+
* Access to cell-specific page object methods
|
|
23
|
+
* Usage: table.cell.getCellValue(0, 1)
|
|
24
|
+
*/
|
|
25
|
+
get cell() {
|
|
26
|
+
this._cell ??= new TableCellPage(this.renderResult);
|
|
27
|
+
return this._cell;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Access to row-specific page object methods
|
|
31
|
+
* Usage: table.row.isRowSelected(0)
|
|
32
|
+
*/
|
|
33
|
+
get row() {
|
|
34
|
+
this._row ??= new TableRowPage(this.renderResult);
|
|
35
|
+
return this._row;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Access to header-specific page object methods
|
|
39
|
+
* Usage: table.header.getColumnTitle(0)
|
|
40
|
+
*/
|
|
41
|
+
get header() {
|
|
42
|
+
this._header ??= new TableHeaderPage(this.renderResult);
|
|
43
|
+
return this._header;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=table.page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.page.js","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C,uCAAuC;IAC/B,KAAK,CAAgB;IACrB,IAAI,CAAe;IACnB,OAAO,CAAkB;IAEjC;;;OAGG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,KAAK,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACnD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;OAGG;IACH,IAAI,GAAG;QACL,IAAI,CAAC,IAAI,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACR,IAAI,CAAC,OAAO,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACvD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-actions.test.d.ts","sourceRoot":"","sources":["../../../../src/table/tests/row-actions.test.tsx"],"names":[],"mappings":""}
|