Skip to content

Commit 8412df2

Browse files
MKirovaMKirova
authored andcommitted
chore(*): Fixing issues with two-way bound collections that created copies of arrays in the setter to trigger change detection. Emit change event for them only if object is actually changed.
1 parent 7e5cabd commit 8412df2

File tree

7 files changed

+24
-7
lines changed

7 files changed

+24
-7
lines changed

projects/igniteui-angular/src/lib/grids/grid/grid-api.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export class IgxGridAPIService extends GridBaseAPIService<IgxGridComponent> {
9696
hierarchy: DataUtil.getHierarchy(groupRow)
9797
});
9898
}
99-
this.grid.groupingExpansionState = expansionState;
99+
this.grid.groupingExpansionState = [...expansionState];
100100
if (grid.rowEditable) {
101101
grid.repositionRowEditingOverlay(grid.rowInEditMode);
102102
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,10 @@ export class IgxGridComponent extends IgxGridBaseComponent implements IGridDataB
331331
* @memberof IgxGridComponent
332332
*/
333333
set groupingExpansionState(value) {
334-
this._groupingExpandState = cloneArray(value);
335-
this.groupingExpansionStateChange.emit(this._groupingExpandState);
334+
if (value !== this._groupingExpandState) {
335+
this.groupingExpansionStateChange.emit(value);
336+
}
337+
this._groupingExpandState = value;
336338
if (this.gridAPI.grid) {
337339
this.cdr.detectChanges();
338340
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,16 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseCompone
143143
return this._hierarchicalState;
144144
}
145145
public set hierarchicalState(val) {
146+
if (this._hierarchicalState !== val) {
147+
this.hierarchicalStateChange.emit(val);
148+
}
146149
if (this.hasChildrenKey) {
147150
val = val.filter(item => {
148151
const rec = this.primaryKey ? this.data.find(x => x[this.primaryKey] === item.rowID) : item.rowID;
149152
return rec[this.hasChildrenKey];
150153
});
151154
}
152155
this._hierarchicalState = val;
153-
this.hierarchicalStateChange.emit(this._hierarchicalState);
154156
if (this.parent) {
155157
this.notifyChanges(true);
156158
}

src/app/grid-groupby/grid-groupby.sample.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<div class="density-chooser" style="margin-bottom: 16px">
55
<igx-buttongroup [values]="summaryModes" (onSelect)="selectSummaryMode($event)" style="display: block; width: 500px"></igx-buttongroup>
66
</div>
7-
<igx-grid #grid1 [data]="data" [allowFiltering]="true" [cellSelection]="'single'" [width]="'1200px'" (onGroupingDone)="onGroupingDoneHandler($event)" [hideGroupedColumns]="hideGroupedColumns" [groupingExpressions]='groupingExpressions'
8-
[height]="'700px'" [rowSelectable]='true' [summaryCalculationMode]="summaryMode">
7+
<igx-grid #grid1 [data]="data" [allowFiltering]="true" [cellSelection]="'single'" [width]="'1200px'" (onGroupingDone)="onGroupingDoneHandler($event)" [hideGroupedColumns]="hideGroupedColumns" [(groupingExpressions)]='groupingExpressions'
8+
[height]="'700px'" [(groupingExpansionState)]='expState' [rowSelectable]='true' [summaryCalculationMode]="summaryMode">
99
<igx-column *ngFor="let c of columns" [sortable]="true" [field]="c.field" [header]="c.field" [width]="c.width"
1010
[hidden]='c.hidden' [sortable]='true' [groupable]='c.groupable' [movable]='true' [pinned]='!!c.pinned' [editable]="true" [hasSummary]="true" [dataType]='c.dataType'>
1111
</igx-column>
@@ -20,6 +20,7 @@
2020
<button igxButton="raised" (click)="groupBy('City')">Group/Ungroup 'City'</button>
2121
<button igxButton="raised" (click)="groupBy('PostalCode')">Group/Ungroup 'PostalCode'</button>
2222
<button igxButton="raised" (click)="getRowsList()">Get rowslist'</button>
23+
<button igxButton="raised" (click)="getState()">Get state</button>
2324

2425
<br />
2526
<button igxButton="raised" (click)="groupMultiple()">Group "Contact Title", "Address", "Country"</button>

src/app/grid-groupby/grid-groupby.sample.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export class GridGroupBySampleComponent implements OnInit {
1515
@ViewChild('grid1', { static: true }) public grid1: IgxGridComponent;
1616
public data: Array<any>;
1717
public hideGroupedColumns = false;
18+
expState = [];
1819
public columns: Array<any>;
1920
public groupingExpressions: Array<ISortingExpression>;
2021
public summaryMode = 'rootLevelOnly';
@@ -105,6 +106,11 @@ export class GridGroupBySampleComponent implements OnInit {
105106
console.log(this.grid1.rowList);
106107
}
107108

109+
getState() {
110+
console.log(JSON.stringify(this.expState));
111+
console.log(JSON.stringify(this.groupingExpressions));
112+
}
113+
108114
onGroupingDoneHandler(event){
109115
console.log("onGroupingDone: ");
110116
console.log(event);

src/app/hierarchical-grid/hierarchical-grid.sample.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ <h4 class="sample-title">Sample One</h4>
33
<div class="density-chooser" style="margin-bottom: 16px">
44
<igx-buttongroup [values]="displayDensities" (onSelect)="selectDensity($event)" style="display: block; width: 500px"></igx-buttongroup>
55
</div>
6-
<igx-hierarchical-grid [showExpandAll]='true' [hasChildrenKey]='"hasChild"' class="hgrid" [allowFiltering]='true' #grid1 [data]="localData" [displayDensity]="density" [rowSelectable]="true" [autoGenerate]="false" [allowFiltering]='true' [paging]="true"
6+
<button igxButton="raised" (click)="getState()">Get state</button>
7+
<igx-hierarchical-grid [(hierarchicalState)]="hgridState" [showExpandAll]='true' [hasChildrenKey]='"hasChild"' class="hgrid" [allowFiltering]='true' #grid1 [data]="localData" [displayDensity]="density" [rowSelectable]="true" [autoGenerate]="false" [allowFiltering]='true' [paging]="true"
78
[height]="'600px'" [width]="'800px'" [expandChildren]="rootExpanded" #hGrid>
89
<igx-column field="ID" [resizable]="true" [pinned]="true" [filterable]='true'></igx-column>
910
<igx-column-group header="Information">

src/app/hierarchical-grid/hierarchical-grid.sample.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export class HierarchicalGridSampleComponent {
1919
density = 'comfortable';
2020
displayDensities;
2121
riToggle = true;
22+
hgridState = [];
2223

2324
public columns;
2425
public childColumns;
@@ -75,6 +76,10 @@ export class HierarchicalGridSampleComponent {
7576
return prods;
7677
}
7778

79+
getState() {
80+
console.log(this.hgridState);
81+
}
82+
7883
generateDataUneven(count: number, level: number, parendID: string = null) {
7984
const prods = [];
8085
const currLevel = level;

0 commit comments

Comments
 (0)