Skip to content

Commit 2af98f4

Browse files
authoredApr 1, 2020
Merge branch 'master' into ibarakov/fix-6965-9.1.x
2 parents 2ca28be + 795e8a7 commit 2af98f4

15 files changed

+106
-20
lines changed
 

‎projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-component.scss

+5
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,11 @@
508508
@extend %igx-grid__filtering-cell !optional;
509509
}
510510

511+
@include e(filtering-cell, $m: 'selected') {
512+
@extend %igx-grid__filtering-cell !optional;
513+
@extend %igx-grid__filtering-cell--selected !optional;
514+
}
515+
511516
@include e(filtering-cell-indicator) {
512517
@extend %igx-grid__filtering-cell-indicator !optional;
513518
}

‎projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss

+6-1
Original file line numberDiff line numberDiff line change
@@ -1074,7 +1074,7 @@
10741074
border-bottom: none;
10751075
}
10761076

1077-
%igx-grid__tr--pinned {
1077+
%igx-grid__tr--pinned {
10781078
position: relative;
10791079
background: inherit;
10801080
z-index: 10000;
@@ -2207,6 +2207,11 @@
22072207
}
22082208
}
22092209

2210+
%igx-grid__filtering-cell--selected {
2211+
color: --var($theme, 'row-selected-text-color');
2212+
background: --var($theme, 'row-selected-cell-background');
2213+
}
2214+
22102215
%igx-grid__filtering-cell-indicator {
22112216
position: relative;
22122217
display: flex;

‎projects/igniteui-angular/src/lib/core/styles/themes/schemas/light/_tooltip.scss

+4-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ $_fluent-tooltip: extend(
4646
$_fluent-shape-tooltip,
4747
(
4848
background: (
49-
igx-color: 'surface'
49+
igx-color: ('grays', 900)
50+
),
51+
text-color: (
52+
igx-contrast-color: ('grays', 900)
5053
)
5154
)
5255
);

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
TemplateRef,
1111
Output,
1212
EventEmitter,
13+
ElementRef,
1314
} from '@angular/core';
1415
import { notifyChanges } from '../watch-changes';
1516
import { WatchColumnChanges } from '../watch-changes';
@@ -1319,7 +1320,7 @@ export class IgxColumnComponent implements AfterContentInit {
13191320
protected collapseIndicatorTemplate: IgxCollapsibleIndicatorTemplateDirective;
13201321

13211322
constructor(public gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>, public cdr: ChangeDetectorRef,
1322-
public rowIslandAPI: IgxRowIslandAPIService) { }
1323+
public rowIslandAPI: IgxRowIslandAPIService, public elementRef: ElementRef) { }
13231324

13241325
/**
13251326
* @hidden

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,15 @@ export class IgxGridFilteringCellComponent implements AfterViewInit, OnInit, DoC
5959
@ViewChild('complexChip', { read: IgxChipComponent })
6060
protected complexChip: IgxChipComponent;
6161

62-
@HostBinding('class.igx-grid__filtering-cell')
63-
public cssClass = 'igx-grid__filtering-cell';
62+
63+
@HostBinding('class')
64+
get styleClasses(): string {
65+
if (this.column && this.column.selected) {
66+
return 'igx-grid__filtering-cell--selected';
67+
}
68+
69+
return 'igx-grid__filtering-cell';
70+
}
6471

6572
constructor(public cdr: ChangeDetectorRef, public filteringService: IgxFilteringService) {
6673
this.filteringService.subscribeToEvents();

‎projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,14 @@ <h4>{{ column.header || column.field }}</h4>
104104

105105
<section class="igx-excel-filter__actions">
106106

107-
<div *ngIf="column.selectable && grid.displayDensity==='comfortable'">
108-
<ng-container *ngTemplateOutlet="selectingTemplate"></ng-container>
109-
</div>
110-
111107
<div *ngIf="column.movable">
112108
<ng-container *ngTemplateOutlet="movingTemplate"></ng-container>
113109
</div>
114110

111+
<div *ngIf="column.selectable && grid.displayDensity==='comfortable'">
112+
<ng-container *ngTemplateOutlet="selectingTemplate"></ng-container>
113+
</div>
114+
115115
<div *ngIf="!column.disablePinning && grid.displayDensity==='comfortable'">
116116
<ng-container *ngTemplateOutlet="pinningTemplate"></ng-container>
117117
</div>

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

+17
Original file line numberDiff line numberDiff line change
@@ -1573,6 +1573,23 @@ describe('IgxGrid - multi-column headers #grid', () => {
15731573

15741574
expect(grid.columnList.length).toEqual(10);
15751575
});
1576+
1577+
it('should set title attribute on column group header spans', () => {
1578+
const fixture = TestBed.createComponent(ColumnGroupTestComponent);
1579+
fixture.detectChanges();
1580+
1581+
const grid = fixture.componentInstance.grid;
1582+
const generalGroup = grid.columnList.find(c => c.header === 'General Information');
1583+
generalGroup.elementRef.nativeElement.title = 'General Information Title';
1584+
fixture.detectChanges();
1585+
1586+
const headers = fixture.debugElement.queryAll(By.css('.' + GRID_COL_GROUP_THEAD_TITLE_CLASS));
1587+
const generalHeader = headers.find(h => h.nativeElement.textContent === 'General Information');
1588+
const addressHeader = headers.find(h => h.nativeElement.textContent === 'Address Information');
1589+
1590+
expect(generalHeader.nativeElement.firstElementChild.title).toBe('General Information Title');
1591+
expect(addressHeader.nativeElement.firstElementChild.title).toBe('Address Information');
1592+
});
15761593
});
15771594

15781595
@Component({

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import { ɵɵsetComponentScope } from '@angular/core';
1212

1313
const SELECTED_COLUMN_CLASS = 'igx-grid__th--selected';
1414
const SELECTED_COLUMN_CELL_CLASS = 'igx-grid__td--column-selected';
15+
const SELECTED_FILTER_CELL_CLASS = 'igx-grid__filtering-cell--selected';
16+
1517
function selectedData() {
1618
return [{ ProductID: 1, ProductName: 'Chai' },
1719
{ ProductID: 2, ProductName: 'Aniseed Syrup' },
@@ -766,11 +768,15 @@ describe('IgxGrid - Column Selection #grid', () => {
766768

767769
it('Filtering: Verify column selection when filter row is opened ', fakeAsync(() => {
768770
grid.allowFiltering = true;
771+
fix.detectChanges();
772+
const filterCell = GridFunctions.getFilterCell(fix , 'ProductID');
773+
expect(filterCell.nativeElement.classList.contains(SELECTED_FILTER_CELL_CLASS)).toBeFalsy();
769774
const colInStock = grid.getColumnByName('InStock');
770775
colProductID.selected = true;
771776
fix.detectChanges();
772777

773-
GridFunctions.clickFilterCellChipUI(fix, 'ProductName'); // Name column contains nested object as a value
778+
expect(filterCell.nativeElement.classList.contains(SELECTED_FILTER_CELL_CLASS)).toBeTruthy();
779+
GridFunctions.clickFilterCellChipUI(fix, 'InStock'); // Name column contains nested object as a value
774780
tick(150);
775781
fix.detectChanges();
776782

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

+23
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,29 @@ describe('IgxGrid - Column properties #grid', () => {
375375
const row = grid.getRowByIndex(0);
376376
row.cells.forEach(cell => expect(cell.nativeElement.getAttribute('style')).toMatch('background: black'));
377377
});
378+
379+
it('should set title attribute on column header spans', () => {
380+
const fix = TestBed.createComponent(ColumnsFromIterableComponent);
381+
fix.detectChanges();
382+
383+
const grid = fix.componentInstance.instance;
384+
const idColumn = grid.getColumnByName('ID');
385+
const nameColumn = grid.getColumnByName('Name');
386+
387+
idColumn.header = 'ID Header';
388+
idColumn.elementRef.nativeElement.title = 'ID Title';
389+
nameColumn.header = 'Name Header';
390+
fix.detectChanges();
391+
392+
const headers = fix.debugElement.queryAll(By.css(COLUMN_HEADER_CLASS));
393+
const idHeader = headers[0].nativeElement;
394+
const nameHeader = headers[1].nativeElement;
395+
expect(idHeader.textContent).toBe('ID Header');
396+
expect(idHeader.firstElementChild.firstElementChild.title).toBe('ID Title');
397+
expect(nameHeader.textContent).toBe('Name Header');
398+
expect(nameHeader.firstElementChild.firstElementChild.title).toBe('Name Header');
399+
});
400+
378401
});
379402

380403
@Component({

‎projects/igniteui-angular/src/lib/grids/headers/grid-header-group.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626

2727
<ng-template #defaultColumn>
28-
<span class="igx-grid__th-group-title" [attr.title]="column.header">{{column.header}}</span>
28+
<span class="igx-grid__th-group-title" [attr.title]="columnTitle">{{column.header}}</span>
2929
</ng-template>
3030

3131
<ng-template #defaultCollapseIndicator>

‎projects/igniteui-angular/src/lib/grids/headers/grid-header-group.component.ts

+7
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,13 @@ export class IgxGridHeaderGroupComponent implements DoCheck {
236236
return this.element.nativeElement.getBoundingClientRect().height;
237237
}
238238

239+
/**
240+
* @hidden
241+
*/
242+
get columnTitle() {
243+
return this.column.elementRef.nativeElement.getAttribute('title') || this.column.header;
244+
}
245+
239246
/**
240247
* @hidden
241248
*/

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<ng-template #defaultColumn>
2-
<span [attr.title]="column.header || column.field">{{ column.header || column.field }}</span>
2+
<span [attr.title]="columnTitle">{{ column.header || column.field }}</span>
33
</ng-template>
44

55
<span class="igx-grid__th-title">

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

+5
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ export class IgxGridHeaderComponent implements DoCheck, OnInit, OnDestroy {
130130
&& (!this.grid.filteringService.isFilterRowVisible || this.grid.filteringService.filteredColumn !== this.column);
131131
}
132132

133+
get columnTitle() {
134+
return this.column.elementRef.nativeElement.getAttribute('title') ||
135+
this.column.header || this.column.field;
136+
}
137+
133138
@HostBinding('attr.role')
134139
public hostRole = 'columnheader';
135140

‎projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.selection.spec.ts

+13-6
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,15 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
4949
rowIsland2 = fix.componentInstance.rowIsland2;
5050
}));
5151

52-
it('should allow only one cell to be selected in the whole hierarchical grid.', () => {
52+
it('should allow only one cell to be selected in the whole hierarchical grid.', fakeAsync(() => {
5353
hierarchicalGrid.height = '500px';
5454
hierarchicalGrid.reflow();
5555
fix.detectChanges();
5656

5757
let firstRow = hierarchicalGrid.getRowByIndex(0) as IgxHierarchicalRowComponent;
5858
firstRow.toggle();
5959
fix.detectChanges();
60+
tick(100);
6061
expect(firstRow.expanded).toBeTruthy();
6162

6263
let fCell = firstRow.cells.toArray()[0];
@@ -85,7 +86,8 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
8586
fix.detectChanges();
8687
expect(fChildCell.selected).toBeFalsy();
8788
expect(fCell.selected).toBeTruthy();
88-
});
89+
}));
90+
8991
});
9092

9193
describe('Row Selection', () => {
@@ -97,10 +99,12 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
9799
rowIsland2 = fix.componentInstance.rowIsland2;
98100
}));
99101

100-
it('should have checkboxes on each row', () => {
102+
it('should have checkboxes on each row', fakeAsync(() => {
101103
hierarchicalGrid.expandChildren = true;
104+
tick(100);
102105
fix.detectChanges();
103106
rowIsland1.expandChildren = true;
107+
tick(100);
104108
fix.detectChanges();
105109

106110
expect(hierarchicalGrid.rowSelection).toEqual(GridSelectionMode.multiple);
@@ -127,7 +131,7 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
127131
for (const r of childGrid.dataRowList.toArray()) {
128132
GridSelectionFunctions.verifyRowHasCheckbox(r.nativeElement, false, false);
129133
}
130-
});
134+
}));
131135

132136
it('should able to change rowSelection at runtime', () => {
133137
hierarchicalGrid.expandChildren = true;
@@ -556,13 +560,14 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
556560
GridSelectionFunctions.verifyRowsArraySelected(childGrid.dataRowList.toArray());
557561
});
558562

559-
it('should not be able to select deleted row', () => {
563+
it('should not be able to select deleted row', fakeAsync(() => {
560564
// Expand first row
561565
const firstRow = hierarchicalGrid.getRowByIndex(0) as IgxHierarchicalRowComponent;
562566
firstRow.toggle();
563567
fix.detectChanges();
564568

565569
firstRow.onClick(UIInteractions.getMouseEvent('click'));
570+
tick();
566571
fix.detectChanges();
567572

568573
GridSelectionFunctions.verifyRowSelected(firstRow);
@@ -578,6 +583,7 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
578583

579584
// Click on deleted row
580585
firstRow.onClick(UIInteractions.getMouseEvent('click'));
586+
tick();
581587
fix.detectChanges();
582588

583589
GridSelectionFunctions.verifyRowSelected(firstRow, false);
@@ -606,13 +612,14 @@ describe('IgxHierarchicalGrid selection #hGrid', () => {
606612

607613
const childGridFirstRow = childGrid.getRowByIndex(0);
608614
childGridFirstRow.onClick(UIInteractions.getMouseEvent('click', false, false, true));
615+
tick();
609616
fix.detectChanges();
610617

611618
GridSelectionFunctions.verifyRowSelected(firstRow, false);
612619
GridSelectionFunctions.verifyHeaderRowCheckboxState(fix, true);
613620
expect(hierarchicalGrid.selectedRows()).toEqual(['1', '2', '3', '4']);
614621
expect(childGrid.selectedRows()).toEqual(['00']);
615-
});
622+
}));
616623

617624
it('should be able to select added row', () => {
618625
// Set multiple selection to first row island

‎src/app/grid-column-groups/grid-column-groups.sample.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
</ng-template>
77
<igx-grid [allowFiltering]="true" [pinning]="{columns: 1}" [rowSelectable]="false" #grid [data]="data" displayDensity="compact" [showToolbar]="true" [allowAdvancedFiltering]="true" [columnHiding]="true" [columnPinning]='true'>
88
<igx-column [movable]="true" [resizable]="true" [pinned]="true" field="Missing"></igx-column>
9-
<igx-column-group [movable]="true" header="General Information" [collapsible]="true" [expanded]="true" [hidden]="true">
10-
<igx-column [movable]="true" [filterable]="false" [hidden]="true" sortable="true" resizable="true" field="CompanyName" width="200px" [visibleWhenCollapsed]="false"></igx-column>
9+
<igx-column-group [movable]="true" header="General Information" title="General Company Information" [collapsible]="true" [expanded]="true" [hidden]="true">
10+
<igx-column [movable]="true" [filterable]="false" [hidden]="true" sortable="true" resizable="true" field="CompanyName" title="Company Name" width="200px" [visibleWhenCollapsed]="false"></igx-column>
1111
<igx-column field="Missing"></igx-column>
1212
<igx-column-group [movable]="true" header="Person Details" [collapsible]="true" [expanded]="false" [visibleWhenCollapsed]="true">
1313
<igx-column [movable]="true" [visibleWhenCollapsed]="false" [hidden]="true" filterable="true" sortable="true" resizable="true" field="ContactName"></igx-column>

0 commit comments

Comments
 (0)
Please sign in to comment.