Skip to content

Commit b8d1602

Browse files
committed
fix(grid): Clear grouping and close filter row when remove a column #5494
1 parent 18039a9 commit b8d1602

File tree

6 files changed

+61
-9
lines changed

6 files changed

+61
-9
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,9 @@ export class GridBaseAPIService <T extends IgxGridBaseComponent & IGridDataBinda
419419
protected remove_grouping_expression(fieldName) {
420420
}
421421

422+
public clear_groupby(name?: string | Array<string>) {
423+
}
424+
422425
public should_apply_number_style(column: IgxColumnComponent): boolean {
423426
return column.dataType === DataType.Number;
424427
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4285,9 +4285,15 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
42854285
});
42864286

42874287
diff.forEachRemovedItem((record: IterableChangeRecord<IgxColumnComponent>) => {
4288+
// Clear Grouping
4289+
this.gridAPI.clear_groupby(record.item.field);
4290+
42884291
// Clear Filtering
42894292
this.gridAPI.clear_filter(record.item.field);
42904293

4294+
// Close filter row
4295+
this.filteringService.isFilterRowVisible = false;
4296+
42914297
// Clear Sorting
42924298
this.gridAPI.clear_sort(record.item.field);
42934299
removed = true;

projects/igniteui-angular/src/lib/grids/grid/column.spec.ts

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ColumnHiddenFromMarkupComponent, ColumnCellFormatterComponent, DynamicC
99
import { wait } from '../../test-utils/ui-interactions.spec';
1010
import { configureTestSuite } from '../../test-utils/configure-suite';
1111
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
12-
import { IgxStringFilteringOperand } from 'igniteui-angular';
12+
import { IgxStringFilteringOperand, SortingDirection } from 'igniteui-angular';
1313

1414
describe('IgxGrid - Column properties', () => {
1515
configureTestSuite();
@@ -304,7 +304,7 @@ describe('IgxGrid - Column properties', () => {
304304
}
305305
});
306306

307-
it('should remove filter when a columns is removed dynamically', () => {
307+
it('should clear filter when a columns is removed dynamically', () => {
308308
const fix = TestBed.createComponent(DynamicColumnsComponent);
309309
fix.detectChanges();
310310

@@ -321,13 +321,45 @@ describe('IgxGrid - Column properties', () => {
321321
expect(grid.rowList.length).toEqual(0);
322322

323323
expect(() => {
324-
fix.componentInstance.columns = columns.slice(2, columns.length - 1);
324+
fix.componentInstance.columns = columns.slice(2, columns.length - 1);
325325
fix.detectChanges();
326326
}).not.toThrow();
327327

328328
expect(grid.rowList.length).toBeGreaterThan(10);
329329
expect(grid.columns.length).toBe(4);
330330
});
331+
332+
it('should clear grouping when a columns is removed dynamically', () => {
333+
const fix = TestBed.createComponent(DynamicColumnsComponent);
334+
fix.detectChanges();
335+
336+
const columns = fix.componentInstance.columns;
337+
const grid = fix.componentInstance.grid;
338+
grid.getColumnByName('CompanyName').groupable = true;
339+
grid.getColumnByName('Address').groupable = true;
340+
grid.getColumnByName('City').groupable = true;
341+
fix.detectChanges();
342+
343+
grid.groupBy({
344+
fieldName: 'CompanyName', dir: SortingDirection.Asc, ignoreCase: false
345+
});
346+
347+
fix.detectChanges();
348+
349+
let groupRows = grid.nativeElement.querySelectorAll('igx-grid-groupby-row');
350+
351+
expect(groupRows.length).toBeGreaterThan(0);
352+
353+
expect(() => {
354+
fix.componentInstance.columns = columns.slice(2, columns.length - 1);
355+
fix.detectChanges();
356+
}).not.toThrow();
357+
358+
groupRows = grid.nativeElement.querySelectorAll('igx-grid-groupby-row');
359+
360+
expect(groupRows.length).toBe(0);
361+
expect(grid.columns.length).toBe(4);
362+
});
331363
});
332364

333365
@Component({

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
<igx-chips-area (onReorder)="chipsOrderChanged($event)" (onMoveEnd)="chipsMovingEnded()">
88
<ng-container *ngFor="let expr of chipsGoupingExpressions; let last = last;">
99
<igx-chip [id]="expr.fieldName" [attr.title]="getGroupByChipTitle(expr)"
10-
[removable]="getColumnByName(expr.fieldName).groupable"
11-
[draggable]="getColumnByName(expr.fieldName).groupable" [displayDensity]="displayDensity"
10+
[removable]="getColumnGroupable(expr.fieldName)"
11+
[draggable]="getColumnGroupable(expr.fieldName)" [displayDensity]="displayDensity"
1212
(onKeyDown)="onChipKeyDown($event)" (onRemove)="onChipRemoved($event)"
13-
(onClick)="getColumnByName(expr.fieldName).groupable ? onChipClicked($event): null"
14-
[disabled]='!getColumnByName(expr.fieldName).groupable'>
13+
(onClick)="getColumnGroupable(expr.fieldName) ? onChipClicked($event): null"
14+
[disabled]='!getColumnGroupable(expr.fieldName)'>
1515
<span>{{ getGroupByChipTitle(expr) }}</span>
1616
<igx-icon igxSuffix>{{ expr.dir == 1 ? 'arrow_upward' : 'arrow_downward' }}</igx-icon>
1717
</igx-chip>

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,16 @@ export class IgxGridComponent extends IgxGridBaseComponent implements IGridDataB
902902
* @hidden
903903
*/
904904
public getGroupByChipTitle(expression: IGroupingExpression): string {
905-
return this.getColumnByName(expression.fieldName).header || expression.fieldName;
905+
const column = this.getColumnByName(expression.fieldName);
906+
return (column && column.header) || expression.fieldName;
907+
}
908+
909+
/**
910+
* @hidden
911+
*/
912+
public getColumnGroupable(fieldName: string): boolean {
913+
const column = this.getColumnByName(fieldName);
914+
return column && column.groupable;
906915
}
907916

908917
/**

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ViewChild,
1010
} from '@angular/core';
1111
import { IGroupByRecord } from '../../data-operations/groupby-record.interface';
12+
import { DataType } from '../../data-operations/data-util';
1213
import { GridBaseAPIService } from '../api.service';
1314
import { IgxGridBaseComponent, IGridDataBindable } from '../grid-base.component';
1415
import { IgxGridSelectionService, ISelectionNode } from '../../core/grid-selection';
@@ -250,7 +251,8 @@ export class IgxGridGroupByRowComponent {
250251
* @hidden
251252
*/
252253
get dataType(): any {
253-
return this.grid.getColumnByName(this.groupRow.expression.fieldName).dataType;
254+
const column = this.grid.getColumnByName(this.groupRow.expression.fieldName);
255+
return (column && column.dataType) || DataType.String;
254256
}
255257

256258
private handleTabKey(shift: boolean, activeNode: ISelectionNode) {

0 commit comments

Comments
 (0)