Skip to content

Commit 6267ea9

Browse files
authored
Merge branch 'master' into ddincheva/collapsibleGroups
2 parents 621bd4b + 214cfb5 commit 6267ea9

File tree

7 files changed

+67
-4
lines changed

7 files changed

+67
-4
lines changed

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {
1212
EventEmitter,
1313
} from '@angular/core';
1414
import { notifyChanges } from '../watch-changes';
15+
import { WatchColumnChanges } from '../watch-changes';
16+
import { IgxRowIslandAPIService } from '../hierarchical-grid/row-island-api.service';
1517
import { DataType } from '../../data-operations/data-util';
1618
import { DeprecateProperty } from '../../core/deprecateDecorators';
1719
import {
@@ -82,6 +84,7 @@ export class IgxColumnComponent implements AfterContentInit {
8284
* @memberof IgxColumnComponent
8385
*/
8486
@notifyChanges()
87+
@WatchColumnChanges()
8588
@Input()
8689
public header = '';
8790
/**
@@ -95,6 +98,7 @@ export class IgxColumnComponent implements AfterContentInit {
9598
* ```
9699
* @memberof IgxColumnComponent
97100
*/
101+
@WatchColumnChanges()
98102
@Input()
99103
public sortable = false;
100104
/**
@@ -109,6 +113,7 @@ export class IgxColumnComponent implements AfterContentInit {
109113
* @memberof IgxColumnComponent
110114
*/
111115
@notifyChanges(true)
116+
@WatchColumnChanges()
112117
@Input()
113118
groupable = false;
114119
/**
@@ -119,6 +124,7 @@ export class IgxColumnComponent implements AfterContentInit {
119124
* ```
120125
* @memberof IgxColumnComponent
121126
*/
127+
@WatchColumnChanges()
122128
@Input()
123129
get editable(): boolean {
124130
// Updating the primary key when grid has transactions (incl. row edit)
@@ -161,6 +167,7 @@ export class IgxColumnComponent implements AfterContentInit {
161167
* @memberof IgxColumnComponent
162168
*/
163169
@notifyChanges()
170+
@WatchColumnChanges()
164171
@Input()
165172
public filterable = true;
166173
/**
@@ -174,6 +181,7 @@ export class IgxColumnComponent implements AfterContentInit {
174181
* ```
175182
* @memberof IgxColumnComponent
176183
*/
184+
@WatchColumnChanges()
177185
@Input()
178186
public resizable = false;
179187
/**
@@ -184,6 +192,7 @@ export class IgxColumnComponent implements AfterContentInit {
184192
* @memberof IgxColumnComponent
185193
*/
186194
@notifyChanges(true)
195+
@WatchColumnChanges()
187196
@Input()
188197
get hasSummary() {
189198
return this._hasSummary;
@@ -211,6 +220,7 @@ export class IgxColumnComponent implements AfterContentInit {
211220
*@memberof IgxColumnComponent
212221
*/
213222
@notifyChanges(true)
223+
@WatchColumnChanges()
214224
@Input()
215225
get hidden(): boolean {
216226
return this._hidden;
@@ -270,6 +280,7 @@ export class IgxColumnComponent implements AfterContentInit {
270280
* @memberof IgxColumnComponent
271281
*/
272282
@notifyChanges()
283+
@WatchColumnChanges()
273284
@Input()
274285
disableHiding = false;
275286
/**
@@ -280,6 +291,7 @@ export class IgxColumnComponent implements AfterContentInit {
280291
* @memberof IgxColumnComponent
281292
*/
282293
@notifyChanges()
294+
@WatchColumnChanges()
283295
@Input()
284296
disablePinning = false;
285297
/**
@@ -293,6 +305,7 @@ export class IgxColumnComponent implements AfterContentInit {
293305
* ```
294306
* @memberof IgxColumnComponent
295307
*/
308+
@WatchColumnChanges()
296309
@notifyChanges()
297310
@Input()
298311
public movable = false;
@@ -304,6 +317,7 @@ export class IgxColumnComponent implements AfterContentInit {
304317
* @memberof IgxColumnComponent
305318
*/
306319
@notifyChanges(true)
320+
@WatchColumnChanges()
307321
@Input()
308322
public get width(): string {
309323
return this.widthSetByUser ? this._width : this.defaultWidth;
@@ -364,6 +378,7 @@ export class IgxColumnComponent implements AfterContentInit {
364378
* ```
365379
* @memberof IgxColumnComponent
366380
*/
381+
@WatchColumnChanges()
367382
@Input()
368383
public maxWidth: string;
369384
/**
@@ -378,6 +393,7 @@ export class IgxColumnComponent implements AfterContentInit {
378393
* @memberof IgxColumnComponent
379394
*/
380395
@notifyChanges()
396+
@WatchColumnChanges()
381397
@Input()
382398
public set minWidth(value: string) {
383399
const minVal = parseFloat(value);
@@ -399,6 +415,7 @@ export class IgxColumnComponent implements AfterContentInit {
399415
* @memberof IgxColumnComponent
400416
*/
401417
@notifyChanges()
418+
@WatchColumnChanges()
402419
@Input()
403420
public headerClasses = '';
404421

@@ -413,6 +430,7 @@ export class IgxColumnComponent implements AfterContentInit {
413430
* @memberof IgxColumnComponent
414431
*/
415432
@notifyChanges()
433+
@WatchColumnChanges()
416434
@Input()
417435
public headerGroupClasses = '';
418436
/**
@@ -432,6 +450,7 @@ export class IgxColumnComponent implements AfterContentInit {
432450
* @memberof IgxColumnComponent
433451
*/
434452
@notifyChanges()
453+
@WatchColumnChanges()
435454
@Input()
436455
public cellClasses: any;
437456

@@ -453,6 +472,7 @@ export class IgxColumnComponent implements AfterContentInit {
453472
* @memberof IgxColumnComponent
454473
*/
455474
@notifyChanges()
475+
@WatchColumnChanges()
456476
@Input()
457477
cellStyles = null;
458478
/**
@@ -486,6 +506,7 @@ export class IgxColumnComponent implements AfterContentInit {
486506
* @memberof IgxColumnComponent
487507
*/
488508
@notifyChanges()
509+
@WatchColumnChanges()
489510
@Input()
490511
formatter: (value: any) => any;
491512
/**
@@ -499,6 +520,7 @@ export class IgxColumnComponent implements AfterContentInit {
499520
* ```
500521
* @memberof IgxColumnComponent
501522
*/
523+
@WatchColumnChanges()
502524
@Input()
503525
public filteringIgnoreCase = true;
504526
/**
@@ -512,6 +534,7 @@ export class IgxColumnComponent implements AfterContentInit {
512534
* ```
513535
* @memberof IgxColumnComponent
514536
*/
537+
@WatchColumnChanges()
515538
@Input()
516539
public sortingIgnoreCase = true;
517540
/**
@@ -534,6 +557,7 @@ export class IgxColumnComponent implements AfterContentInit {
534557
* ```
535558
* @memberof IgxColumnComponent
536559
*/
560+
@WatchColumnChanges()
537561
@Input()
538562
public get pinned(): boolean {
539563
return this._pinned;
@@ -592,6 +616,7 @@ export class IgxColumnComponent implements AfterContentInit {
592616
* @memberof IgxColumnComponent
593617
*/
594618
@notifyChanges(true)
619+
@WatchColumnChanges()
595620
@Input()
596621
public get summaries(): any {
597622
return this._summaries;
@@ -624,6 +649,7 @@ export class IgxColumnComponent implements AfterContentInit {
624649
* @memberof IgxColumnComponent
625650
*/
626651
@notifyChanges()
652+
@WatchColumnChanges()
627653
@Input()
628654
public searchable = true;
629655
/**
@@ -727,6 +753,7 @@ export class IgxColumnComponent implements AfterContentInit {
727753
* @memberof IgxColumnComponent
728754
*/
729755
@notifyChanges()
756+
@WatchColumnChanges()
730757
@Input('cellTemplate')
731758
get bodyTemplate(): TemplateRef<any> {
732759
return this._bodyTemplate;
@@ -758,6 +785,7 @@ export class IgxColumnComponent implements AfterContentInit {
758785
* @memberof IgxColumnComponent
759786
*/
760787
@notifyChanges()
788+
@WatchColumnChanges()
761789
@Input()
762790
get headerTemplate(): TemplateRef<any> {
763791
return this._headerTemplate;
@@ -790,6 +818,7 @@ export class IgxColumnComponent implements AfterContentInit {
790818
* @memberof IgxColumnComponent
791819
*/
792820
@notifyChanges()
821+
@WatchColumnChanges()
793822
@Input('cellEditorTemplate')
794823
get inlineEditorTemplate(): TemplateRef<any> {
795824
return this._inlineEditorTemplate;
@@ -819,6 +848,7 @@ export class IgxColumnComponent implements AfterContentInit {
819848
* @memberof IgxColumnComponent
820849
*/
821850
@notifyChanges()
851+
@WatchColumnChanges()
822852
@Input('filterCellTemplate')
823853
get filterCellTemplate(): TemplateRef<any> {
824854
return this._filterCellTemplate;
@@ -1209,7 +1239,8 @@ export class IgxColumnComponent implements AfterContentInit {
12091239
@ContentChild(IgxCollapsibleIndicatorTemplateDirective, { read: IgxCollapsibleIndicatorTemplateDirective, static: false })
12101240
protected collapseIndicatorTemplate: IgxCollapsibleIndicatorTemplateDirective;
12111241

1212-
constructor(public gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>, public cdr: ChangeDetectorRef) { }
1242+
constructor(public gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>, public cdr: ChangeDetectorRef,
1243+
public rowIslandAPI: IgxRowIslandAPIService) { }
12131244

12141245
/**
12151246
* @hidden

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/select
2424
import { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';
2525
import { IgxDragIndicatorIconDirective } from '../row-drag.directive';
2626
import { IgxGridMRLNavigationService } from '../grid-mrl-navigation.service';
27+
import { IgxRowIslandAPIService } from '../hierarchical-grid/row-island-api.service';
2728
import { FilterMode } from '../common/enums';
2829
import { GridType } from '../common/grid.interface';
2930

@@ -64,7 +65,8 @@ export interface IGroupingDoneEventArgs extends IBaseEventArgs {
6465
IgxFilteringService,
6566
IgxColumnResizingService,
6667
IgxForOfSyncService,
67-
IgxForOfScrollSyncService
68+
IgxForOfScrollSyncService,
69+
IgxRowIslandAPIService
6870
],
6971
selector: 'igx-grid',
7072
templateUrl: './grid.component.html'

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
@@ -44,6 +44,7 @@ import { IgxOverlayService } from '../../services/index';
4444
import { IgxColumnResizingService } from '../resizing/resizing.service';
4545
import { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';
4646
import { GridType } from '../common/grid.interface';
47+
import { IgxRowIslandAPIService } from './row-island-api.service';
4748

4849
let NEXT_ID = 0;
4950

@@ -65,7 +66,8 @@ export interface HierarchicalStateRecord {
6566
IgxFilteringService,
6667
IgxHierarchicalGridNavigationService,
6768
IgxForOfSyncService,
68-
IgxForOfScrollSyncService
69+
IgxForOfScrollSyncService,
70+
IgxRowIslandAPIService
6971
]
7072
})
7173
export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { IgxRowIslandComponent } from './row-island.component';
33
import { Subject } from 'rxjs';
44

55
export class IgxRowIslandAPIService {
6+
public rowIsland: IgxRowIslandComponent;
67
public change: Subject<any> = new Subject<any>();
78
protected state: Map<string, IgxRowIslandComponent> = new Map<string, IgxRowIslandComponent>();
89
protected destroyMap: Map<string, Subject<boolean>> = new Map<string, Subject<boolean>>();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective
235235
*/
236236
ngOnInit() {
237237
this.rootGrid = this.hgridAPI.grid;
238+
this.rowIslandAPI.rowIsland = this;
238239
}
239240

240241
/**

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { IgxDragIndicatorIconDirective } from '../row-drag.directive';
3333
import { IgxGridNavigationService } from '../grid-navigation.service';
3434
import { GridType } from '../common/grid.interface';
3535
import { IgxColumnComponent } from '../columns/column.component';
36+
import { IgxRowIslandAPIService } from '../hierarchical-grid/row-island-api.service';
3637

3738
let NEXT_ID = 0;
3839

@@ -66,7 +67,8 @@ let NEXT_ID = 0;
6667
{ provide: IgxGridBaseDirective, useExisting: forwardRef(() => IgxTreeGridComponent) },
6768
IgxFilteringService,
6869
IgxForOfSyncService,
69-
IgxForOfScrollSyncService
70+
IgxForOfScrollSyncService,
71+
IgxRowIslandAPIService
7072
]
7173
})
7274
export class IgxTreeGridComponent extends IgxGridBaseDirective implements GridType, OnInit, DoCheck, AfterContentInit {

projects/igniteui-angular/src/lib/grids/watch-changes.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,30 @@ export function WatchChanges(): PropertyDecorator {
3131
};
3232
}
3333

34+
export function WatchColumnChanges(): PropertyDecorator {
35+
return (target: any, key: string, propDesc?: PropertyDescriptor) => {
36+
const privateKey = '_' + key.toString();
37+
propDesc = propDesc || {
38+
configurable: true,
39+
enumerable: true,
40+
};
41+
propDesc.get = propDesc.get || (function (this: any) { return this[privateKey]; });
42+
const originalSetter = propDesc.set || (function (this: any, val: any) { this[privateKey] = val; });
43+
44+
propDesc.set = function (this: any, val: any) {
45+
const init = this._init;
46+
const oldValue = this[key];
47+
originalSetter.call(this, val);
48+
if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {
49+
if (this.rowIslandAPI.rowIsland) {
50+
this.rowIslandAPI.rowIsland.updateColumnList();
51+
}
52+
}
53+
};
54+
return propDesc;
55+
};
56+
}
57+
3458
export function notifyChanges(repaint = false) {
3559
return (_: any, key: string, propDesc?: PropertyDescriptor) => {
3660

0 commit comments

Comments
 (0)