Skip to content

Commit 6d236e6

Browse files
dmlvrCopilot
andauthored
TreeList/DataGrid - Columns move to the adaptive row if row dragging (cherry-pick) (#31482)
Signed-off-by: Dmitry Lavrinovich <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent 2a55690 commit 6d236e6

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
@@ -505,6 +505,28 @@ export class AdaptiveColumnsController extends modules.ViewController {
505505
}
506506
}
507507

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

13001322
protected _toggleBestFitMode(isBestFit) {
1323+
this._adaptiveColumnsController._toggleGroupAdaptiveRowVisibility(isBestFit);
13011324
isBestFit && this._adaptiveColumnsController._showHiddenColumns();
13021325
super._toggleBestFitMode(isBestFit);
13031326
}

packages/testcafe-models/dataGrid/index.ts

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

4749
headerRow: 'dx-header-row',
@@ -403,6 +405,18 @@ export default class DataGrid extends GridCore {
403405
return this.element.find(`.${this.addWidgetPrefix(CLASS.columnChooserButton)}`);
404406
}
405407

408+
getAdaptiveButtonSelector(): string {
409+
return `.${CLASS.adaptiveColumnButton}`;
410+
}
411+
412+
getAdaptiveButton(nth: number = 0): Selector {
413+
return this.element.find(this.getAdaptiveButtonSelector()).nth(nth);
414+
}
415+
416+
isAdaptiveColumnHidden(): Promise<boolean> {
417+
return this.element.find(`.${CLASS.adaptiveCommandCellHidden}`).exists;
418+
}
419+
406420
apiAddRow(): Promise<void> {
407421
const { getInstance } = this;
408422

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)