Skip to content

Commit 618b430

Browse files
authored
DataGrid - AI Column: Implement the DropDownButton Menu (#31542)
Co-authored-by: Alyar <>
1 parent b22a30c commit 618b430

File tree

61 files changed

+1032
-317
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1032
-317
lines changed

e2e/testcafe-devextreme/tests/dataGrid/common/aiColumn/columnResizing.functional.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import DataGrid from 'devextreme-testcafe-models/dataGrid';
22
import url from '../../../../helpers/getPageUrl';
33
import { createWidget } from '../../../../helpers/createWidget';
44

5-
fixture.disablePageReloads`Ai Column.ColumnResizing`
5+
fixture.disablePageReloads`Ai Column.ColumnResizing.Functional`
66
.page(url(__dirname, '../../../container.html'));
77

88
const DATA_GRID_SELECTOR = '#container';
@@ -40,6 +40,7 @@ const DATA_GRID_SELECTOR = '#container';
4040
{
4141
type: 'ai',
4242
caption: 'AI Column',
43+
name: 'myAIColumn',
4344
},
4445
{ dataField: 'id', caption: 'ID' },
4546
{ dataField: 'name', caption: 'Name' },
@@ -80,6 +81,7 @@ const DATA_GRID_SELECTOR = '#container';
8081
type: 'ai',
8182
caption: 'AI Column',
8283
allowResizing: true,
84+
name: 'myAIColumn',
8385
},
8486
{
8587
dataField: 'id',
@@ -124,6 +126,7 @@ const DATA_GRID_SELECTOR = '#container';
124126
{
125127
type: 'ai',
126128
caption: 'AI Column',
129+
name: 'myAIColumn',
127130
allowResizing: false,
128131
},
129132
{ dataField: 'id', caption: 'ID' },
@@ -165,10 +168,53 @@ const DATA_GRID_SELECTOR = '#container';
165168
type: 'ai',
166169
caption: 'AI Column',
167170
minWidth: 75,
171+
name: 'myAIColumn',
168172
},
169173
{ dataField: 'id', caption: 'ID' },
170174
{ dataField: 'name', caption: 'Name' },
171175
{ dataField: 'value', caption: 'Value' },
172176
],
173177
}));
174178
});
179+
180+
test('DropDownButton should be hidden during resizing', async (t) => {
181+
// arrange
182+
const dataGrid = new DataGrid(DATA_GRID_SELECTOR);
183+
const aiDropDownButton = dataGrid
184+
.getHeaders()
185+
.getHeaderRow(0)
186+
.getCommandCell(0)
187+
.getAIDropDownButton();
188+
189+
await t.expect(dataGrid.isReady()).ok();
190+
191+
// act
192+
await t.click(aiDropDownButton.element);
193+
194+
// assert
195+
await t.expect(await aiDropDownButton.isOpened()).ok();
196+
197+
// act
198+
await dataGrid.resizeHeader(1, 50);
199+
200+
// assert
201+
await t.expect(await aiDropDownButton.isOpened()).notOk();
202+
}).before(async () => createWidget('dxDataGrid', {
203+
dataSource: [
204+
{ id: 1, name: 'Name 1', value: 10 },
205+
{ id: 2, name: 'Name 2', value: 20 },
206+
{ id: 3, name: 'Name 3', value: 30 },
207+
],
208+
allowColumnResizing: true,
209+
columnWidth: 150,
210+
columns: [
211+
{
212+
type: 'ai',
213+
caption: 'AI Column',
214+
name: 'myAIColumn',
215+
},
216+
{ dataField: 'id', caption: 'ID' },
217+
{ dataField: 'name', caption: 'Name' },
218+
{ dataField: 'value', caption: 'Value' },
219+
],
220+
}));
Loading
Loading
Loading
Loading
Loading
Loading

e2e/testcafe-devextreme/tests/dataGrid/common/aiColumn/keyboardNavigation.visual.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ test('Check keyboard navigation for AI column', async (t) => {
2222
await t.pressKey('tab');
2323

2424
// assert
25-
await t.expect(headerRow.getHeaderCell(1).isFocused).ok();
25+
await t.expect(headerRow.getCommandCell(1).element.focused).ok();
2626

2727
// act
2828
await t.pressKey('tab');
2929

3030
// assert
31-
await t.expect(headerRow.getHeaderCell(1).getAIDropDownButton().isFocused).ok();
31+
await t.expect(headerRow.getCommandCell(1).getAIDropDownButton().isFocused).ok();
3232

3333
await testScreenshot(t, takeScreenshot, 'datagrid__ai-column__focused-dropdown-button.png', { element: dataGrid.element });
3434

e2e/testcafe-devextreme/tests/dataGrid/common/aiColumn/visual.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ test('Default render', async (t) => {
3535
{
3636
type: 'ai',
3737
caption: 'AI Column',
38+
name: 'myAiColumn',
3839
},
3940
],
4041
}));
@@ -67,6 +68,47 @@ test('Default render', async (t) => {
6768
{
6869
type: 'ai',
6970
caption: 'AI Column',
71+
name: 'myAiColumn',
72+
alignment,
73+
},
74+
],
75+
rtlEnabled,
76+
}));
77+
78+
test(`AI Column: DropDownButton Menu - ${alignment} alignment, RTL ${rtlEnabled}`, async (t) => {
79+
// arrange
80+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
81+
const dataGrid = new DataGrid(DATA_GRID_SELECTOR);
82+
const headerRow = dataGrid.getHeaders().getHeaderRow(0);
83+
const aiDropDownButton = headerRow.getCommandCell(3).getAIDropDownButton();
84+
85+
await t.expect(dataGrid.isReady()).ok();
86+
87+
// act
88+
await t.click(aiDropDownButton.element);
89+
90+
// assert
91+
await t.expect(await aiDropDownButton.isOpened()).ok();
92+
93+
await takeScreenshot(`datagrid__ai-column_dropdown-button-menu(alignment=${alignment}_rtlEnabled=${rtlEnabled}).png`, dataGrid.element);
94+
95+
await t
96+
.expect(compareResults.isValid())
97+
.ok(compareResults.errorMessages());
98+
}).before(async () => createWidget('dxDataGrid', {
99+
dataSource: [
100+
{ id: 1, name: 'Name 1', value: 10 },
101+
{ id: 2, name: 'Name 2', value: 20 },
102+
{ id: 3, name: 'Name 3', value: 30 },
103+
],
104+
columns: [
105+
{ dataField: 'id', caption: 'ID' },
106+
{ dataField: 'name', caption: 'Name' },
107+
{ dataField: 'value', caption: 'Value' },
108+
{
109+
type: 'ai',
110+
caption: 'AI Column',
111+
name: 'myAiColumn',
70112
alignment,
71113
},
72114
],

packages/devextreme/js/__internal/grids/data_grid/__tests__/__mock__/model/data_grid.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import DataGrid from '@js/ui/data_grid';
44
import { GridCoreModel } from '../../../../grid_core/__tests__/__mock__/model/grid_core';
55

66
export class DataGridModel extends GridCoreModel<DataGrid> {
7+
protected NAME = 'dxDataGrid';
8+
79
public getInstance(): DataGrid {
810
return DataGrid.getInstance(this.root) as DataGrid;
911
}

0 commit comments

Comments
 (0)