Skip to content

Commit 6d148a4

Browse files
MKirovaMKirova
authored andcommitted
chore(*): More optimizations for merged cols eval.
1 parent 0483273 commit 6d148a4

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,13 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
124124
console.warn('Merging is not supported with multi-row layouts.');
125125
return;
126126
}
127-
this._merge = value;
127+
if (value !== this._merge) {
128+
this._merge = value;
129+
if (this.grid) {
130+
this.grid.resetColumnCollections();
131+
this.grid.notifyChanges();
132+
}
133+
}
128134
}
129135

130136
/**

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2828,6 +2828,9 @@ export abstract class IgxGridBaseDirective implements GridType,
28282828
public set sortingExpressions(value: ISortingExpression[]) {
28292829
this._sortingExpressions = cloneArray(value);
28302830
this.sortingExpressionsChange.emit(this._sortingExpressions);
2831+
if (this.cellMergeMode === GridCellMergeMode.onSort) {
2832+
this.resetColumnCollections();
2833+
}
28312834
this.notifyChanges();
28322835
}
28332836

@@ -2951,7 +2954,11 @@ export abstract class IgxGridBaseDirective implements GridType,
29512954
}
29522955

29532956
public set cellMergeMode(value: GridCellMergeMode) {
2954-
this._cellMergeMode = value;
2957+
if (value !== this._cellMergeMode) {
2958+
this._cellMergeMode = value;
2959+
this.resetColumnCollections();
2960+
this.notifyChanges();
2961+
}
29552962
}
29562963

29572964
/**
@@ -3358,7 +3365,6 @@ export abstract class IgxGridBaseDirective implements GridType,
33583365
private _defaultRowHeight = 50;
33593366
private _rowCount: number;
33603367
private _cellMergeMode: GridCellMergeMode = GridCellMergeMode.onSort;
3361-
private _prevColsToMerge: IgxColumnComponent[] = [];
33623368
private _columnsToMerge: IgxColumnComponent[] = [];
33633369

33643370
/**
@@ -4002,14 +4008,22 @@ export abstract class IgxGridBaseDirective implements GridType,
40024008
x => x.merge && (this.cellMergeMode ==='always' ||
40034009
(this.cellMergeMode === 'onSort' && !!this.sortingExpressions.find( y => y.fieldName === x.field)))
40044010
);
4005-
if (areEqualArrays(cols, this._prevColsToMerge)) {
4006-
return this._prevColsToMerge;
4007-
}
40084011
this._columnsToMerge = cols;
4009-
this._prevColsToMerge = [...cols];
40104012
return this._columnsToMerge;
40114013
}
40124014

4015+
protected allowResetOfColumnsToMerge() {
4016+
const cols = this.visibleColumns.filter(
4017+
x => x.merge && (this.cellMergeMode ==='always' ||
4018+
(this.cellMergeMode === 'onSort' && !!this.sortingExpressions.find( y => y.fieldName === x.field)))
4019+
);
4020+
if (areEqualArrays(cols, this._columnsToMerge)) {
4021+
return false;
4022+
} else {
4023+
return true
4024+
}
4025+
}
4026+
40134027
protected get mergedDataInView() {
40144028
return this._mergedDataInView;
40154029
}
@@ -4025,7 +4039,9 @@ export abstract class IgxGridBaseDirective implements GridType,
40254039
this._visibleColumns.length = 0;
40264040
this._pinnedVisible.length = 0;
40274041
this._unpinnedVisible.length = 0;
4028-
this._columnsToMerge.length = 0;
4042+
if (this.allowResetOfColumnsToMerge()) {
4043+
this._columnsToMerge.length = 0;
4044+
}
40294045
}
40304046

40314047
/**

src/app/grid-cellMerging/grid-cellMerging.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ <h4 class="sample-title">Grid with cell merge</h4>
4444
</igx-input-group>
4545
</div>
4646
<igx-grid [data]="data" width="800px" height="550px" [moving]="true" #grid1
47-
[cellMergeMode]="'onSort'" [rowSelection]="'single'">
47+
[cellMergeMode]="'always'" [rowSelection]="'single'">
4848
<igx-column field="OrderID" header="Order ID">
4949
<ng-template igxCell let-cell="cell" let-val>
5050
Value: {{val}},Index: {{cell.row.index}}

0 commit comments

Comments
 (0)