Skip to content

Commit 870e7f6

Browse files
MKirovaMKirova
authored andcommitted
chore(*): Implement with rows that are retained outside the virt.frame.
1 parent f42bb3c commit 870e7f6

File tree

6 files changed

+34
-13
lines changed

6 files changed

+34
-13
lines changed

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3652,6 +3652,11 @@ export abstract class IgxGridBaseDirective implements GridType,
36523652
return rec.cellMergeMeta;
36533653
}
36543654

3655+
public getMergeCellOffset(rec) {
3656+
const index = this.verticalScrollContainer.igxForOf.indexOf(rec);
3657+
return -(this.verticalScrollContainer.scrollPosition - this.verticalScrollContainer.getScrollForIndex(index));
3658+
}
3659+
36553660
/**
36563661
* @hidden
36573662
* @internal

projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@
199199
[style.max-width]="col.resolvedWidth"
200200
[style.flex-basis]="col.resolvedWidth"
201201
[width]="col.getCellWidth()"
202-
[style.background]="'white'"
203202
#cell>
204203
</igx-grid-cell>
205204
</ng-template>

projects/igniteui-angular/src/lib/grids/grid/grid.component.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@
4747
}
4848
<ng-container *ngTemplateOutlet="hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null">
4949
</ng-container>
50+
51+
52+
@for (rowData of mergedData; track rowData; let rowIndex = $index) {
53+
<igx-grid-row [style.background]="'red'" [style.position]="'absolute'" [gridID]="id" [index]="rowIndex" [data]="rowData" [style.top.px]="getMergeCellOffset(rowData)"
54+
[ngClass]="rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger"
55+
[ngStyle]="rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger" #row>
56+
</igx-grid-row>
57+
}
5058
<ng-template #pinnedRecordsTemplate>
5159
@if (data
5260
| gridTransaction:id:pipeTrigger

projects/igniteui-angular/src/lib/grids/grid/grid.component.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,17 @@ export class IgxGridComponent extends IgxGridBaseDirective implements GridType,
389389
private _groupByRowSelectorTemplate: TemplateRef<IgxGroupByRowSelectorTemplateContext>;
390390
private _detailTemplate;
391391

392+
public get mergedData() {
393+
const startIndex = this.verticalScrollContainer.state.startIndex;
394+
const chunkSize = this.verticalScrollContainer.state.chunkSize;
395+
const mergeRecs = this.verticalScrollContainer.igxForOf?.filter((x, index) => {
396+
if (!x.cellMergeMeta) { return false;}
397+
const maxSpan = Math.max(...x.cellMergeMeta.values().toArray().map(x => x.rowSpan));
398+
return startIndex > index && startIndex <= (index + maxSpan) && startIndex + chunkSize >= (index + maxSpan);
399+
});
400+
return mergeRecs;
401+
}
402+
392403

393404
/**
394405
* Gets/Sets the array of data that populates the component.

projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,15 @@ export class IgxGridCellMergePipe implements PipeTransform {
9999
//TODO condition can be a strategy or some callback that the user can set.
100100
//TODO can also be limited to only sorted columns
101101
if ( prev && prev.recordRef[col.field] === rec[col.field]) {
102-
// const root = prev.cellMergeMeta.get(col.field)?.root ?? prev;
103-
// root.cellMergeMeta.get(col.field).rowSpan += 1;
104-
// recData.cellMergeMeta.get(col.field).root = root;
105-
recData.cellMergeMeta.get(col.field).prev = prev;
106-
let curr = prev;
107-
while(curr) {
108-
curr.cellMergeMeta.get(col.field).rowSpan += 1;
109-
curr = curr.cellMergeMeta.get(col.field).prev;
110-
}
102+
const root = prev.cellMergeMeta.get(col.field)?.root ?? prev;
103+
root.cellMergeMeta.get(col.field).rowSpan += 1;
104+
recData.cellMergeMeta.get(col.field).root = root;
105+
// recData.cellMergeMeta.get(col.field).prev = prev;
106+
// let curr = prev;
107+
// while(curr) {
108+
// curr.cellMergeMeta.get(col.field).rowSpan += 1;
109+
// curr = curr.cellMergeMeta.get(col.field).prev;
110+
// }
111111
}
112112
}
113113
prev = recData;
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h4 class="sample-title">Grid with cell merge</h4>
2-
<igx-grid [data]="data" width="800px" height="550px" [moving]="true" [cellMergeMode]="'always'">
2+
<igx-grid [data]="data" width="800px" height="550px" [moving]="true" [cellMergeMode]="'always'" >
33
<igx-column field="ProductID" header="Product ID" width="200px">
44
</igx-column>
55
<igx-column field="ReorderLevel" width="200px">
@@ -10,6 +10,4 @@ <h4 class="sample-title">Grid with cell merge</h4>
1010
</igx-column>
1111
<igx-column field="OrderDate" width="200px">
1212
</igx-column>
13-
<igx-column field="Discontinued" header="Discontinued">
14-
</igx-column>
1513
</igx-grid>

0 commit comments

Comments
 (0)