Skip to content

Commit c13501e

Browse files
authored
TreeList/DataGrid - Columns move to the adaptive row if row dragging (cherry-pick) (#31483)
1 parent f3c009d commit c13501e

File tree

5 files changed

+158
-0
lines changed

5 files changed

+158
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import DataGrid from 'devextreme-testcafe-models/dataGrid';
2+
import url from '../../../helpers/getPageUrl';
3+
import { createWidget } from '../../../helpers/createWidget';
4+
import { safeSizeTest } from '../../../helpers/safeSizeTest';
5+
6+
fixture.disablePageReloads`Adaptive Row`
7+
.page(url(__dirname, '../../container.html'));
8+
9+
safeSizeTest('Should be shown and hidden when the window is resized', async (t) => {
10+
const dataGrid = new DataGrid('#container');
11+
await dataGrid.isReady();
12+
13+
const adaptiveButton = dataGrid.getAdaptiveButton();
14+
await t.expect(adaptiveButton.exists).ok();
15+
await t.click(adaptiveButton);
16+
17+
await t.expect(dataGrid.getAdaptiveRow(0).element.exists).ok();
18+
19+
await t.resizeWindow(1200, 400);
20+
21+
await t.expect(dataGrid.isAdaptiveColumnHidden()).ok();
22+
await t.expect(dataGrid.getAdaptiveRow(0).element.exists).notOk();
23+
}, [400, 400]).before(async () => createWidget('dxDataGrid', {
24+
dataSource: [{
25+
ID: 1,
26+
Head_ID: -1,
27+
Full_Name: 'John Heart',
28+
Prefix: 'Mr.',
29+
Title: 'CEO',
30+
City: 'Los Angeles',
31+
State: 'California',
32+
33+
Skype: 'jheart_DX_skype',
34+
Mobile_Phone: '(213) 555-9392',
35+
Birth_Date: '1964-03-16',
36+
Hire_Date: '1995-01-15',
37+
}],
38+
keyExpr: 'ID',
39+
allowColumnResizing: true,
40+
rowDragging: {
41+
allowDropInsideItem: true,
42+
allowReordering: true,
43+
},
44+
columns: [
45+
{
46+
dataField: 'Title',
47+
caption: 'Position',
48+
hidingPriority: 0,
49+
fixed: true,
50+
},
51+
{ dataField: 'Full_Name', hidingPriority: 1 },
52+
{ dataField: 'City', hidingPriority: 2 },
53+
{ dataField: 'State', hidingPriority: 3 },
54+
{ dataField: 'Mobile_Phone', hidingPriority: 4 },
55+
{ dataField: 'Hire_Date', dataType: 'date', hidingPriority: 5 },
56+
],
57+
}));
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import TreeList from 'devextreme-testcafe-models/treeList';
2+
import url from '../../helpers/getPageUrl';
3+
import { createWidget } from '../../helpers/createWidget';
4+
import { safeSizeTest } from '../../helpers/safeSizeTest';
5+
6+
fixture.disablePageReloads`Adaptive Row`
7+
.page(url(__dirname, '../container.html'));
8+
9+
safeSizeTest('Should be shown and hidden when the window is resized', async (t) => {
10+
const treeList = new TreeList('#container');
11+
await treeList.isReady();
12+
13+
const adaptiveButton = treeList.getAdaptiveButton();
14+
await t.expect(adaptiveButton.exists).ok();
15+
await t.click(adaptiveButton);
16+
17+
await t.expect(treeList.getAdaptiveRow(0).element.exists).ok();
18+
19+
await t.resizeWindow(1200, 400);
20+
21+
await t.expect(treeList.isAdaptiveColumnHidden()).ok();
22+
await t.expect(treeList.getAdaptiveRow(0).element.exists).notOk();
23+
}, [400, 400]).before(async () => createWidget('dxTreeList', {
24+
dataSource: [{
25+
ID: 1,
26+
Head_ID: -1,
27+
Full_Name: 'John Heart',
28+
Prefix: 'Mr.',
29+
Title: 'CEO',
30+
City: 'Los Angeles',
31+
State: 'California',
32+
33+
Skype: 'jheart_DX_skype',
34+
Mobile_Phone: '(213) 555-9392',
35+
Birth_Date: '1964-03-16',
36+
Hire_Date: '1995-01-15',
37+
}],
38+
keyExpr: 'ID',
39+
parentIdExpr: 'Head_ID',
40+
rootValue: -1,
41+
allowColumnResizing: true,
42+
rowDragging: {
43+
allowDropInsideItem: true,
44+
allowReordering: true,
45+
},
46+
columns: [
47+
{
48+
dataField: 'Title',
49+
caption: 'Position',
50+
hidingPriority: 0,
51+
fixed: true,
52+
},
53+
{ dataField: 'Full_Name', hidingPriority: 1 },
54+
{ dataField: 'City', hidingPriority: 2 },
55+
{ dataField: 'State', hidingPriority: 3 },
56+
{ dataField: 'Mobile_Phone', hidingPriority: 4 },
57+
{ dataField: 'Hire_Date', dataType: 'date', hidingPriority: 5 },
58+
],
59+
}));

packages/devextreme/js/__internal/grids/grid_core/adaptivity/m_adaptivity.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,28 @@ export class AdaptiveColumnsController extends modules.ViewController {
504504
}
505505
}
506506

507+
public _toggleGroupAdaptiveRowVisibility(isBestFit: boolean) {
508+
const hasHiddenColumns = this.hasHiddenColumns() || this.getHidingColumnsQueue().length > 0;
509+
510+
if (!hasHiddenColumns) {
511+
return;
512+
}
513+
514+
const rowsView = this.getView(ROWS_VIEW);
515+
const items = this._dataController.items();
516+
517+
if (!items || items.length === 0) {
518+
return;
519+
}
520+
521+
items.forEach((item, index) => {
522+
if (item.rowType === ADAPTIVE_ROW_TYPE) {
523+
const $row = $(rowsView.getRowElement(index));
524+
$row.css('display', isBestFit ? 'none' : '');
525+
}
526+
});
527+
}
528+
507529
private _isCellValid($cell) {
508530
return $cell && $cell.length && !$cell.hasClass(MASTER_DETAIL_CELL_CLASS) && !$cell.hasClass(GROUP_CELL_CLASS);
509531
}
@@ -1294,6 +1316,7 @@ const resizing = (Base: ModuleType<ResizingController>) => class AdaptivityResiz
12941316
}
12951317

12961318
protected _toggleBestFitMode(isBestFit) {
1319+
this._adaptiveColumnsController._toggleGroupAdaptiveRowVisibility(isBestFit);
12971320
isBestFit && this._adaptiveColumnsController._showHiddenColumns();
12981321
super._toggleBestFitMode(isBestFit);
12991322
}

packages/testcafe-models/dataGrid/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ export const CLASS = {
4343
popupEdit: 'edit-popup',
4444
masterDetailRow: 'dx-master-detail-row',
4545
adaptiveDetailRow: 'dx-adaptive-detail-row',
46+
adaptiveCommandCellHidden: 'dx-command-adaptive-hidden',
47+
adaptiveColumnButton: 'dx-datagrid-adaptive-more',
4648
errorRow: 'dx-error-row',
4749

4850
headerRow: 'dx-header-row',
@@ -417,6 +419,18 @@ export default class DataGrid extends Widget {
417419
return this.element.find(`.${this.addWidgetPrefix(CLASS.columnChooserButton)}`);
418420
}
419421

422+
getAdaptiveButtonSelector(): string {
423+
return `.${CLASS.adaptiveColumnButton}`;
424+
}
425+
426+
getAdaptiveButton(nth: number = 0): Selector {
427+
return this.element.find(this.getAdaptiveButtonSelector()).nth(nth);
428+
}
429+
430+
isAdaptiveColumnHidden(): Promise<boolean> {
431+
return this.element.find(`.${CLASS.adaptiveCommandCellHidden}`).exists;
432+
}
433+
420434
apiFilter(filter: any[]): Promise<void> {
421435
const { getInstance } = this;
422436

packages/testcafe-models/treeList/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import DataGrid from '../dataGrid';
33

44
const CLASS = {
55
treeList: 'dx-treelist-container',
6+
adaptiveColumnButton: 'dx-treelist-adaptive-more',
67
}
78

89
export default class TreeList extends DataGrid {
@@ -12,4 +13,8 @@ export default class TreeList extends DataGrid {
1213
getContainer(): Selector {
1314
return this.element.find(`.${CLASS.treeList}`);
1415
}
16+
17+
getAdaptiveButtonSelector(): string {
18+
return `.${CLASS.adaptiveColumnButton}`;
19+
}
1520
}

0 commit comments

Comments
 (0)