Skip to content

Commit 4f3e66e

Browse files
authored
Merge pull request #8295 from IgniteUI/mkirova/refactor-grid-actions
chore(igxGridActions): Refactor and change expected Input to be the g…
2 parents e60fd7a + 438abbd commit 4f3e66e

File tree

5 files changed

+52
-50
lines changed

5 files changed

+52
-50
lines changed

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

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@ import {
44
Input,
55
ViewChildren,
66
QueryList,
7-
DoCheck,
8-
KeyValueDiffers,
97
EventEmitter,
10-
Output
8+
Output,
9+
IterableDiffers,
10+
IterableDiffer,
11+
DoCheck
1112
} from '@angular/core';
1213
import { IgxColumnComponent } from '../columns/column.component';
1314
import { ColumnDisplayOrder } from '../common/enums';
1415
import { IgxColumnActionsBaseDirective } from './column-actions-base.directive';
1516
import { IgxCheckboxComponent, IChangeCheckboxEventArgs } from '../../checkbox/checkbox.component';
1617
import { IColumnToggledEventArgs } from '../common/events';
18+
import { IgxGridBaseDirective } from '../grid-base.directive';
19+
import { DeprecateProperty } from '../../core/deprecateDecorators';
1720

1821
let NEXT_ID = 0;
1922
/**
@@ -27,13 +30,11 @@ let NEXT_ID = 0;
2730
templateUrl: './column-actions.component.html'
2831
})
2932
export class IgxColumnActionsComponent implements DoCheck {
33+
protected _differ: IterableDiffer<any> | null = null;
3034

31-
32-
/* todo
33-
<!-- (onColumnVisibilityChanged)="onVisibilityChanged($event)" -->
34-
*/
35-
36-
private _columnDifferMap = new Map<IgxColumnComponent, any>();
35+
constructor (private differs: IterableDiffers) {
36+
this._differ = this.differs.find([]).create(this.trackChanges);
37+
}
3738

3839
/**
3940
* @hidden @internal
@@ -45,36 +46,23 @@ export class IgxColumnActionsComponent implements DoCheck {
4546
*/
4647
public filteredColumns: IgxColumnComponent[] = [];
4748

48-
/**
49-
* @hidden @internal
50-
*/
51-
private _columns: IgxColumnComponent[] = [];
5249
/**
5350
* Gets the grid columns to provide an action for.
51+
* @deprecated
5452
* @example
5553
* ```typescript
5654
* let gridColumns = this.columnActions.columns;
5755
* ```
5856
*/
57+
@DeprecateProperty(`Deprecated. Use 'grid' input instead.`)
5958
@Input()
6059
public get columns() {
61-
return this._columns;
60+
return this.grid?.columns;
6261
}
63-
/**
64-
* Sets the grid columns to provide an action for.
65-
* @example
66-
* ```html
67-
* <igx-column-actions [columns]="grid.columns"></igx-column-actions>
68-
* ```
69-
*/
70-
public set columns(value: IgxColumnComponent[]) {
71-
if (value) {
72-
this._columns = value;
73-
this._columnDifferMap.clear();
74-
this._columns.forEach(col => {
75-
this._columnDifferMap.set(col, this._differs.find(col).create());
76-
});
77-
this._pipeTrigger++;
62+
63+
public set columns(value) {
64+
if (value && value.length > 0) {
65+
this.grid = value[0].grid;
7866
}
7967
}
8068

@@ -328,11 +316,14 @@ export class IgxColumnActionsComponent implements DoCheck {
328316
}
329317

330318
/**
331-
* @hidden @internal
319+
* Gets/Sets the grid to provide column actions for.
320+
* @example
321+
* ```typescript
322+
* let grid = this.columnActions.grid;
323+
* ```
332324
*/
333-
public get grid() {
334-
return this.actionableColumns[0]?.grid ?? null;
335-
}
325+
@Input()
326+
public grid: IgxGridBaseDirective;
336327

337328
/**
338329
* @hidden @internal
@@ -365,19 +356,24 @@ export class IgxColumnActionsComponent implements DoCheck {
365356
}
366357

367358
/**
368-
* @hidden
359+
* @hidden @internal
369360
*/
370-
ngDoCheck() {
371-
for (const [col, colDiffer] of this._columnDifferMap) {
372-
const colDiffers = colDiffer.diff(col);
373-
if (colDiffers) {
361+
public trackChanges = (index, col) => {
362+
return col.field + '_' + this.actionsDirective.actionEnabledColumnsFilter(col, index, []);
363+
}
364+
365+
/**
366+
* @hidden @internal
367+
*/
368+
public ngDoCheck() {
369+
if (this._differ) {
370+
const changes = this._differ.diff(this.columns);
371+
if (changes) {
374372
this._pipeTrigger++;
375373
}
376374
}
377375
}
378376

379-
constructor(private _differs: KeyValueDiffers) { }
380-
381377
/**
382378
* Unchecks all columns and performs the appropriate action.
383379
* @example

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ export class IgxColumnActionEnabledPipe implements PipeTransform {
262262
actionFilter: (value: IgxColumnComponent, index: number, array: IgxColumnComponent[]) => boolean,
263263
pipeTrigger: number
264264
): IgxColumnComponent[] {
265+
if (!collection) {
266+
return collection;
267+
}
265268
let copy = collection.slice(0);
266269
if (copy.length && copy[0].grid.hasColumnLayouts) {
267270
copy = copy.filter(c => c.columnLayout);
@@ -284,6 +287,9 @@ export class IgxFilterActionColumnsPipe implements PipeTransform {
284287
constructor(@Inject(IgxColumnActionsComponent) protected columnActions: IgxColumnActionsComponent) { }
285288

286289
public transform(collection: IgxColumnComponent[], filterCriteria: string, pipeTrigger: number): IgxColumnComponent[] {
290+
if (!collection) {
291+
return collection;
292+
}
287293
let copy = collection.slice(0);
288294
if (filterCriteria && filterCriteria.length > 0) {
289295
const filterFunc = (c) => {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<igx-drop-down #columnHidingDropdown (onClosing)="onClosingColumnHiding($event)">
3535
<igx-column-actions
3636
igxColumnHiding
37-
[columns]="grid.columns"
37+
[grid]="grid"
3838
[title]="grid.columnHidingTitle"
3939
[filterColumnsPrompt]="filterColumnsPrompt"
4040
[columnsAreaMaxHeight]="defaultDropDownsMaxHeight">
@@ -56,7 +56,7 @@
5656
<igx-drop-down #columnPinningDropdown (onClosing)="onClosingColumnPinning($event)">
5757
<igx-column-actions
5858
igxColumnPinning
59-
[columns]="grid.columns"
59+
[grid]="grid"
6060
[title]="grid.columnPinningTitle"
6161
[filterColumnsPrompt]="filterColumnsPrompt"
6262
[columnsAreaMaxHeight]="defaultDropDownsMaxHeight">

projects/igniteui-angular/src/lib/test-utils/grid-base-components.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export class GridWithToolbarComponent extends GridWithSizeComponent {
120120

121121
@Component({
122122
template: `<div>
123-
<igx-column-actions igxColumnHiding [columns]="grid.columns" *ngIf="showInline" [hideFilter]="hideFilter"></igx-column-actions>
123+
<igx-column-actions igxColumnHiding [grid]="grid" *ngIf="showInline" [hideFilter]="hideFilter"></igx-column-actions>
124124
${ GridTemplateStrings.declareGrid(` #grid [height]="height" [width]="width"`, ``, ColumnDefinitions.productHidable) }
125125
</div>`
126126
})
@@ -150,7 +150,7 @@ export class ColumnHidingTestComponent extends GridWithSizeComponent implements
150150

151151
@Component({
152152
template: `<div>
153-
<igx-column-actions igxColumnHiding [columns]="grid.columns" *ngIf="showInline"></igx-column-actions>
153+
<igx-column-actions igxColumnHiding [grid]="grid" *ngIf="showInline"></igx-column-actions>
154154
${ GridTemplateStrings.declareGrid(` #grid [height]="height" [width]="width"`, ``, ColumnDefinitions.contactInfoGroupableColumns) }
155155
</div>`
156156
})
@@ -162,7 +162,7 @@ export class ColumnGroupsHidingTestComponent extends ColumnHidingTestComponent {
162162

163163
@Component({
164164
template: `<div>
165-
<igx-column-actions igxColumnPinning [columns]="grid.columns" *ngIf="showInline" [hideFilter]="hideFilter"></igx-column-actions>
165+
<igx-column-actions igxColumnPinning [grid]="grid" *ngIf="showInline" [hideFilter]="hideFilter"></igx-column-actions>
166166
${GridTemplateStrings.declareGrid(`#grid [height]="height" [width]="width"`, ``, ColumnDefinitions.productFilterable)}
167167
</div>`
168168
})
@@ -210,7 +210,7 @@ export class ColumnPinningWithTemplateTestComponent extends ColumnPinningTestCom
210210

211211
@Component({
212212
template: `<div>
213-
<igx-column-actions igxColumnPinning [columns]="grid.columns" *ngIf="showInline"></igx-column-actions>
213+
<igx-column-actions igxColumnPinning [grid]="grid" *ngIf="showInline"></igx-column-actions>
214214
${ GridTemplateStrings.declareGrid(` #grid [height]="height" `, ``, ColumnDefinitions.contactInfoGroupableColumns) }
215215
</div>`
216216
})

src/app/grid-column-actions/grid-column-actions.sample.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div class="wrapper">
2-
<igx-grid #grid1 [data]="data" [width]="'800px'" [height]="'500px'">
2+
<igx-grid #grid1 [data]="data" [width]="'800px'" [height]="'500px'" [showToolbar]="true" [columnHiding] = "true">
33
<igx-column-group header="General Information" title="General Company Information" >
44
<igx-column [field]='"Missing"' [groupable]='true'></igx-column>
55
</igx-column-group>
@@ -14,7 +14,7 @@ <h4>Hiding Action</h4>
1414
<div class="button-sample">
1515
<igx-column-actions
1616
igxColumnHiding
17-
[columns]="grid1.columns"
17+
[grid]="grid1"
1818
[title]="grid1.columnHidingTitle"
1919
(onColumnToggled)="columnToggled($event)">
2020
</igx-column-actions>
@@ -26,7 +26,7 @@ <h4>Pinning Action</h4>
2626
<div class="button-sample">
2727
<igx-column-actions
2828
igxColumnPinning
29-
[columns]="grid1.columns">
29+
[grid]="grid1">
3030
</igx-column-actions>
3131
</div>
3232
</article>
@@ -37,7 +37,7 @@ <h4>Custom Group Action</h4>
3737
<igx-column-actions
3838
appColumnGrouping
3939
[indentation]='100'
40-
[columns]="grid1.columns"
40+
[grid]="grid1"
4141
>
4242
</igx-column-actions>
4343
</div>

0 commit comments

Comments
 (0)