Skip to content

Commit 8d7f91f

Browse files
authored
TreeList: Fix row alternation when repaintChangesOnly is enabled (T1291705) (DevExpress#30386)
Co-authored-by: Alyar <>
1 parent d3131b3 commit 8d7f91f

File tree

5 files changed

+67
-1
lines changed

5 files changed

+67
-1
lines changed
10.4 KB
Loading
Loading

e2e/testcafe-devextreme/tests/treeList/markup.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,62 @@ const tasksT1223168 = [{
159159
await changeTheme(Themes.genericLight);
160160
});
161161
});
162+
163+
// T1291705
164+
test('The shading should alternate correctly after expanding the node when repaintChangesOnly is enabled', async (t) => {
165+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
166+
const treeList = new TreeList('#container');
167+
168+
await treeList.apiExpandRow(4);
169+
await treeList.apiExpandRow(2);
170+
171+
await takeScreenshot('T1291705-row-alternation-after-expanding-node-when-repaintChangesOnly=true', treeList.element);
172+
173+
await t
174+
.expect(compareResults.isValid())
175+
.ok(compareResults.errorMessages());
176+
}).before(async () => createWidget('dxTreeList', {
177+
dataSource: [
178+
{ id: 1, parentId: 0, text: 'item 1' },
179+
{ id: 2, parentId: 0, text: 'item 2' },
180+
{ id: 3, parentId: 2, text: 'item 3' },
181+
{ id: 4, parentId: 0, text: 'item 4' },
182+
{ id: 5, parentId: 4, text: 'item 5' },
183+
{ id: 6, parentId: 0, text: 'item 6' },
184+
],
185+
keyExpr: 'id',
186+
parentIdExpr: 'parentId',
187+
rowAlternationEnabled: true,
188+
repaintChangesOnly: true,
189+
}));
190+
191+
test('The shading should alternate correctly after expanding the node when repaintChangesOnly and old fixed columns are enabled', async (t) => {
192+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
193+
const treeList = new TreeList('#container');
194+
195+
await treeList.apiExpandRow(4);
196+
await treeList.apiExpandRow(2);
197+
198+
await takeScreenshot('T1291705-row-alternation-after-expanding-node-when-there-is-fixed-column-and-repaintChangesOnly=true', treeList.element);
199+
200+
await t
201+
.expect(compareResults.isValid())
202+
.ok(compareResults.errorMessages());
203+
}).before(async () => createWidget('dxTreeList', {
204+
dataSource: [
205+
{ id: 1, parentId: 0, text: 'item 1' },
206+
{ id: 2, parentId: 0, text: 'item 2' },
207+
{ id: 3, parentId: 2, text: 'item 3' },
208+
{ id: 4, parentId: 0, text: 'item 4' },
209+
{ id: 5, parentId: 4, text: 'item 5' },
210+
{ id: 6, parentId: 0, text: 'item 6' },
211+
],
212+
keyExpr: 'id',
213+
parentIdExpr: 'parentId',
214+
rowAlternationEnabled: true,
215+
repaintChangesOnly: true,
216+
columnFixing: {
217+
legacyMode: true,
218+
},
219+
columns: [{ dataField: 'id', fixed: true }, 'text'],
220+
}));

packages/devextreme/js/__internal/grids/grid_core/data_controller/m_data_controller.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,10 @@ export class DataController extends DataHelperMixin(modules.Controller) {
15481548
return gridCoreUtils.getIndexByKey(key, this.items(byLoaded));
15491549
}
15501550

1551+
public getRowByKey(key: unknown): Item | undefined {
1552+
return this.items()?.[this.getRowIndexByKey(key)];
1553+
}
1554+
15511555
public keyOf(data) {
15521556
const store = this.store();
15531557
if (store) {

packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,10 @@ export class RowsView extends ColumnsView {
279279
setWatcher({
280280
element: $row.get(0),
281281
watch: rowOptions.watch,
282-
getter: () => this._isAltRow(row),
282+
getter: () => this._isAltRow(
283+
// The row needs to be obtained again because the current row is out of date.
284+
this._dataController.getRowByKey(row.key),
285+
),
283286
callBack: (value) => {
284287
$row.toggleClass(ROW_ALTERNATION_CLASS, value);
285288
},

0 commit comments

Comments
 (0)