Skip to content

Commit 28db0d6

Browse files
Merge branch '8.1.x' into tzhelev/fix-5238-8.1.x
2 parents 784c5d5 + aa0cb8c commit 28db0d6

File tree

12 files changed

+141
-23
lines changed

12 files changed

+141
-23
lines changed

ROADMAP.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
2. IgxGrid row and cell selection modes [#4989](https://github.com/IgniteUI/igniteui-angular/issues/4989)
99
3. Fluent Theme [#5335](https://github.com/IgniteUI/igniteui-angular/issues/5335)
1010
4. Drag and Drop enhancements [#5319](https://github.com/IgniteUI/igniteui-angular/issues/5319)
11+
5. Multi-View Calendar + Range DatePicker [#4282](https://github.com/IgniteUI/igniteui-angular/issues/4282)
12+
6. Custom grid row selector templates [#4998](https://github.com/IgniteUI/igniteui-angular/issues/4998)
13+
7. Per-column Filtering Strategies [#5323](https://github.com/IgniteUI/igniteui-angular/issues/5323)
1114

1215
## Going down the road
1316

projects/igniteui-angular/src/lib/core/styles/components/list/_list-theme.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@
373373
}
374374

375375
%igx-list__item-lines {
376-
color: --var($theme, 'item-text-color');
376+
color: currentColor;
377377
display: flex;
378378
flex-direction: column;
379379
flex: 1 0 0%;

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -328,13 +328,6 @@ export class GridBaseAPIService <T extends IgxGridBaseComponent & IGridDataBinda
328328
}
329329

330330
public clear_filter(fieldName: string) {
331-
if (fieldName) {
332-
const column = this.get_column_by_name(fieldName);
333-
if (!column) {
334-
return;
335-
}
336-
}
337-
338331
const grid = this.grid;
339332
grid.endEdit(false);
340333
const filteringState = grid.filteringExpressionsTree;
@@ -426,6 +419,9 @@ export class GridBaseAPIService <T extends IgxGridBaseComponent & IGridDataBinda
426419
protected remove_grouping_expression(fieldName) {
427420
}
428421

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

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-search.pipe.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class IgxExcelStyleSearchFilterPipe implements PipeTransform {
1919

2020
searchText = searchText.toLowerCase();
2121
const result = items.filter((it, i) => (i === 0 && it.isSpecial) ||
22-
(it.value || it.value === 0) &&
22+
(it.value !== null && it.value !== undefined) &&
2323
it.value.toString().toLowerCase().indexOf(searchText) > -1);
2424

2525
return result.length > 1 ? result : [];

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,10 @@ export class IgxFilteringService implements OnDestroy {
218218
if (!this.columnToExpressionsMap.has(columnId)) {
219219
const column = this.grid.columns.find((col) => col.field === columnId);
220220
const expressionUIs = new Array<ExpressionUI>();
221-
222-
this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);
223-
this.columnToExpressionsMap.set(columnId, expressionUIs);
224-
221+
if (column) {
222+
this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);
223+
this.columnToExpressionsMap.set(columnId, expressionUIs);
224+
}
225225
return expressionUIs;
226226
}
227227

@@ -322,7 +322,7 @@ export class IgxFilteringService implements OnDestroy {
322322
}
323323

324324
const column = this.grid.columns.find((col) => col.field === columnId);
325-
const isComplex = this.isFilteringTreeComplex(column.filteringExpressionsTree);
325+
const isComplex = column && this.isFilteringTreeComplex(column.filteringExpressionsTree);
326326
if (isComplex) {
327327
this.columnsWithComplexFilter.add(columnId);
328328
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4314,13 +4314,22 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
43144314
diff.forEachRemovedItem((record: IterableChangeRecord<IgxColumnComponent | IgxColumnGroupComponent>) => {
43154315
const isColumnGroup = record.item instanceof IgxColumnGroupComponent;
43164316
if (!isColumnGroup) {
4317+
// Clear Grouping
4318+
this.gridAPI.clear_groupby(record.item.field);
4319+
43174320
// Clear Filtering
43184321
this.gridAPI.clear_filter(record.item.field);
43194322

4323+
// Close filter row
4324+
if ( this.filteringService.isFilterRowVisible
4325+
&& this.filteringService.filteredColumn
4326+
&& this.filteringService.filteredColumn.field === record.item.field) {
4327+
this.filteringRow.close();
4328+
}
4329+
43204330
// Clear Sorting
43214331
this.gridAPI.clear_sort(record.item.field);
43224332
}
4323-
43244333
removed = true;
43254334
});
43264335

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

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import { IgxGridComponent } from './grid.component';
55
import { IgxGridModule } from './index';
66
import { GridTemplateStrings, ColumnDefinitions } from '../../test-utils/template-strings.spec';
77
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
8-
import { ColumnHiddenFromMarkupComponent, ColumnCellFormatterComponent } from '../../test-utils/grid-samples.spec';
8+
import { ColumnHiddenFromMarkupComponent, ColumnCellFormatterComponent, DynamicColumnsComponent } from '../../test-utils/grid-samples.spec';
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, SortingDirection } from 'igniteui-angular';
1213

1314
describe('IgxGrid - Column properties', () => {
1415
configureTestSuite();
@@ -24,7 +25,8 @@ describe('IgxGrid - Column properties', () => {
2425
TemplatedInputColumnsComponent,
2526
ColumnCellFormatterComponent,
2627
ColumnHaederClassesComponent,
27-
ColumnHiddenFromMarkupComponent
28+
ColumnHiddenFromMarkupComponent,
29+
DynamicColumnsComponent
2830
],
2931
imports: [IgxGridModule, NoopAnimationsModule]
3032
})
@@ -301,6 +303,63 @@ describe('IgxGrid - Column properties', () => {
301303
expect(grid.getCellByColumn(i, 'Name').value).toBe(expectedVal[i]);
302304
}
303305
});
306+
307+
it('should clear filter when a columns is removed dynamically', () => {
308+
const fix = TestBed.createComponent(DynamicColumnsComponent);
309+
fix.detectChanges();
310+
311+
const columns = fix.componentInstance.columns;
312+
const grid = fix.componentInstance.grid;
313+
grid.allowFiltering = true;
314+
fix.detectChanges();
315+
316+
expect(grid.columns.length).toBe(7);
317+
318+
grid.filter('CompanyName', 'NoItemsFound', IgxStringFilteringOperand.instance().condition('contains'), true);
319+
fix.detectChanges();
320+
321+
expect(grid.rowList.length).toEqual(0);
322+
323+
expect(() => {
324+
fix.componentInstance.columns = columns.slice(2, columns.length - 1);
325+
fix.detectChanges();
326+
}).not.toThrow();
327+
328+
expect(grid.rowList.length).toBeGreaterThan(10);
329+
expect(grid.columns.length).toBe(4);
330+
});
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+
});
304363
});
305364

306365
@Component({

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4420,6 +4420,26 @@ describe('IgxGrid - Filtering actions - Excel style filtering', () => {
44204420
fix.detectChanges();
44214421
}));
44224422

4423+
it('Should include \'false\' value in results when searching.', fakeAsync(() => {
4424+
// Open excel style custom filtering dialog.
4425+
GridFunctions.clickExcelFilterIcon(fix, 'Released');
4426+
fix.detectChanges();
4427+
4428+
// Type string in search box.
4429+
const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix);
4430+
const inputNativeElement = searchComponent.querySelector('.igx-input-group__input');
4431+
sendInputNativeElement(inputNativeElement, 'false', fix);
4432+
tick(100);
4433+
fix.detectChanges();
4434+
4435+
// Verify that the first item is 'Select All' and the second item is 'false'.
4436+
const listItems = GridFunctions.sortNativeElementsVertically(
4437+
Array.from(searchComponent.querySelectorAll('igx-list-item')));
4438+
expect(listItems.length).toBe(2, 'incorrect rendered list items count');
4439+
expect(listItems[0].innerText).toBe('Select All');
4440+
expect(listItems[1].innerText).toBe('false');
4441+
}));
4442+
44234443
it('should scroll items in search list correctly', (async () => {
44244444
// Add additional rows as prerequisite for the test
44254445
for (let index = 0; index < 30; index++) {

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
/**

0 commit comments

Comments
 (0)