Skip to content

Commit 6be4fb7

Browse files
author
Alyar
committed
Add DataCellModel
1 parent c011ac3 commit 6be4fb7

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export class DataCellModel {
2+
constructor(protected readonly root: HTMLElement | null) {}
3+
4+
public getElement(): HTMLElement | null {
5+
return this.root;
6+
}
7+
8+
public getText(): string {
9+
return this.root?.textContent ?? '';
10+
}
11+
}

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ToastModel } from '@ts/ui/__tests__/__mock__/model/toast';
77

88
import { AIPromptEditorModel } from './ai_prompt_editor';
99
import { AIHeaderCellModel } from './cell/ai_header_cell';
10+
import { DataCellModel } from './cell/data_cell';
1011
import { HeaderCellModel } from './cell/header_cell';
1112

1213
const SELECTORS = {
@@ -38,8 +39,16 @@ export abstract class GridCoreModel<TInstance extends GridBase = GridBase> {
3839
);
3940
}
4041

41-
public getCellElement(rowIndex: number, columnIndex: number): HTMLElement {
42-
return this.root.querySelectorAll(`.${SELECTORS.dataRowClass}`)[rowIndex]?.querySelectorAll('td')[columnIndex] as HTMLElement;
42+
public getDataRows(): NodeListOf<HTMLElement> {
43+
return this.root.querySelectorAll(`.${SELECTORS.dataRowClass}`);
44+
}
45+
46+
public getDataCells(rowIndex: number): NodeListOf<HTMLElement> {
47+
return this.root.querySelectorAll(`.${SELECTORS.dataRowClass}:nth-child(${rowIndex + 1}) > td`);
48+
}
49+
50+
public getDataCell(rowIndex: number, columnIndex: number): DataCellModel {
51+
return new DataCellModel(this.getDataCells(rowIndex)[columnIndex]);
4352
}
4453

4554
public getGroupRows(): NodeListOf<HTMLElement> {

packages/devextreme/js/__internal/grids/grid_core/ai_column/ai_column.integration.test.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ describe('Options', () => {
8282
],
8383
});
8484

85-
expect($(component.getCellElement(0, 3)).css('text-align')).toBe('left');
85+
expect($(component.getDataCell(0, 3).getElement()).css('text-align')).toBe('left');
8686
});
8787
});
8888

@@ -105,7 +105,7 @@ describe('Options', () => {
105105
],
106106
});
107107

108-
expect($(component.getCellElement(0, 3)).css('text-align')).toBe('right');
108+
expect($(component.getDataCell(0, 3).getElement()).css('text-align')).toBe('right');
109109
});
110110
});
111111

@@ -128,7 +128,7 @@ describe('Options', () => {
128128
],
129129
});
130130

131-
expect($(component.getCellElement(0, 3)).css('text-align')).toBe('center');
131+
expect($(component.getDataCell(0, 3).getElement()).css('text-align')).toBe('center');
132132
});
133133
});
134134

@@ -151,7 +151,7 @@ describe('Options', () => {
151151
],
152152
});
153153

154-
expect($(component.getCellElement(0, 3)).hasClass('custom-class')).toBe(true);
154+
expect($(component.getDataCell(0, 3).getElement()).hasClass('custom-class')).toBe(true);
155155
});
156156
});
157157

@@ -334,11 +334,11 @@ describe('Options', () => {
334334
],
335335
});
336336

337-
const dataCell = component.getCellElement(0, 3);
337+
const dataCell = component.getDataCell(0, 3).getElement();
338338

339339
expect(cellTemplate).toHaveBeenCalledTimes(1);
340-
expect(dataCell.querySelectorAll('.template-class').length).toBe(1);
341-
expect(dataCell.textContent).toBe('Template');
340+
expect(dataCell?.querySelectorAll('.template-class').length).toBe(1);
341+
expect(dataCell?.textContent).toBe('Template');
342342
});
343343
});
344344

@@ -443,11 +443,11 @@ describe('columnOption', () => {
443443
],
444444
});
445445

446-
expect($(component.getCellElement(0, 3)).hasClass('custom-class')).toBe(false);
446+
expect($(component.getDataCell(0, 3).getElement()).hasClass('custom-class')).toBe(false);
447447

448448
component.apiColumnOption('myColumn', 'cssClass', 'custom-class');
449449

450-
expect($(component.getCellElement(0, 3)).hasClass('custom-class')).toBe(true);
450+
expect($(component.getDataCell(0, 3).getElement()).hasClass('custom-class')).toBe(true);
451451
});
452452

453453
it('should apply headerCellTemplate to AI column', async () => {
@@ -513,11 +513,11 @@ describe('columnOption', () => {
513513

514514
component.apiColumnOption('myColumn', 'cellTemplate', cellTemplate);
515515

516-
const dataCell = component.getCellElement(0, 3);
516+
const dataCell = component.getDataCell(0, 3).getElement();
517517

518518
expect(cellTemplate).toHaveBeenCalledTimes(1);
519-
expect(dataCell.querySelectorAll('.template-class').length).toBe(1);
520-
expect(dataCell.textContent).toBe('Template');
519+
expect(dataCell?.querySelectorAll('.template-class').length).toBe(1);
520+
expect(dataCell?.textContent).toBe('Template');
521521
});
522522

523523
it('should apply alignment', async () => {
@@ -537,11 +537,11 @@ describe('columnOption', () => {
537537
],
538538
});
539539

540-
expect($(component.getCellElement(0, 3)).css('text-align')).toBe('left');
540+
expect($(component.getDataCell(0, 3).getElement()).css('text-align')).toBe('left');
541541

542542
component.apiColumnOption('myColumn', 'alignment', 'right');
543543

544-
expect($(component.getCellElement(0, 3)).css('text-align')).toBe('right');
544+
expect($(component.getDataCell(0, 3).getElement()).css('text-align')).toBe('right');
545545
});
546546

547547
it('should apply visibleIndex to AI column', async () => {

0 commit comments

Comments
 (0)