Skip to content

Commit bab4325

Browse files
Merge branch '10.2.x' into simeonoff/dock-mgr-drop-shadow
2 parents 5ee931f + 0c1bd8c commit bab4325

File tree

12 files changed

+97
-23
lines changed

12 files changed

+97
-23
lines changed

.github/workflows/nodejs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ name: Node.js CI
55

66
on:
77
push:
8-
branches: [ master, 9.1.x, 10.0.x, 10.1.x ]
8+
branches: [ master, '[0-9]+.[0-9]+.x' ]
99
pull_request:
10-
branches: [ master, 9.1.x, 10.0.x, 10.1.x ]
10+
branches: [ master, '[0-9]+.[0-9]+.x' ]
1111

1212
jobs:
1313
build:

angular.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
"with": "src/environments/environment.hmr.ts"
7070
}
7171
]
72+
},
73+
"es5": {
74+
"tsConfig": "src/tsconfig-es5.app.json"
7275
}
7376
}
7477
},
@@ -85,6 +88,9 @@
8588
"hmr": true,
8689
"hmrWarning": false,
8790
"browserTarget": "igniteui-dev-demos:build:hmr"
91+
},
92+
"es5": {
93+
"browserTarget": "igniteui-dev-demos:build:es5"
8894
}
8995
}
9096
},

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"scripts": {
55
"ng": "ng",
66
"start": "ng serve --open --configuration hmr",
7+
"start-es5": "ng serve --configuration es5 -o",
78
"build": "ng build",
89
"test": "ng test",
910
"lint": "ng lint",

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ describe('igxGridEditingActions #grid ', () => {
139139
actionStrip = fixture.componentInstance.actionStrip;
140140
grid = fixture.componentInstance.grid;
141141
}));
142-
it('should auto-show on mouse over of row.', () => {
142+
it('should auto-show on mouse enter of row.', () => {
143143
const row = grid.getRowByIndex(0);
144144
const rowElem = row.nativeElement;
145-
UIInteractions.simulateMouseEvent('mouseover', rowElem, 0, 0);
145+
UIInteractions.simulateMouseEvent('mouseenter', rowElem, 0, 0);
146146
fixture.detectChanges();
147147

148148
expect(actionStrip.context).toBe(row);
@@ -171,18 +171,18 @@ describe('igxGridEditingActions #grid ', () => {
171171
hierarchicalGrid = fixture.componentInstance.hgrid;
172172
}));
173173

174-
it('should auto-show root actionStrip on mouse over of root row.', () => {
174+
it('should auto-show root actionStrip on mouse enter of root row.', () => {
175175
const row = hierarchicalGrid.getRowByIndex(0);
176176
const rowElem = row.nativeElement;
177-
UIInteractions.simulateMouseEvent('mouseover', rowElem, 0, 0);
177+
UIInteractions.simulateMouseEvent('mouseenter', rowElem, 0, 0);
178178
fixture.detectChanges();
179179

180180
expect(actionStripRoot.context).toBe(row);
181181
expect(actionStripRoot.hidden).toBeFalse();
182182
expect(actionStripChild.context).toBeUndefined();
183183
});
184184

185-
it('should auto-show row island actionStrip on mouse over of child row.', () => {
185+
it('should auto-show row island actionStrip on mouse enter of child row.', () => {
186186
const row = hierarchicalGrid.getRowByIndex(0) as IgxHierarchicalRowComponent;
187187
row.toggle();
188188
fixture.detectChanges();
@@ -191,7 +191,7 @@ describe('igxGridEditingActions #grid ', () => {
191191

192192
const childRow = childGrid.getRowByIndex(0);
193193
const rowElem = childRow.nativeElement;
194-
UIInteractions.simulateMouseEvent('mouseover', rowElem, 0, 0);
194+
UIInteractions.simulateMouseEvent('mouseenter', rowElem, 0, 0);
195195
fixture.detectChanges();
196196

197197
expect(actionStripChild.context).toBe(childRow);

projects/igniteui-angular/src/lib/core/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export const NAVIGATION_KEYS = new Set([
328328
]);
329329
export const ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));
330330
export const ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));
331-
export const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup', '+']);
331+
export const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup', '+', 'add']);
332332
export const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc' , 'l']);
333333

334334
/**

projects/igniteui-angular/src/lib/date-picker/date-picker.component.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ export class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor
426426
private _moduleRef: NgModuleRef<any>,
427427
private _injector: Injector,
428428
private _renderer: Renderer2) {
429-
}
429+
}
430430

431431

432432
/**
@@ -827,7 +827,7 @@ export class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor
827827
return this._inputGroup || this._inputGroupUserTemplate || null;
828828
}
829829

830-
/** @hidden @internal */
830+
/** @hidden @internal */
831831
public get inputDirective(): IgxInputDirective {
832832
return this._inputDirective || this._inputDirectiveUserTemplates.first || null;
833833
}
@@ -922,7 +922,7 @@ export class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor
922922

923923
this._inputDirectiveUserTemplates.changes.subscribe(() => {
924924
this.attachTemplateBlur();
925-
});
925+
});
926926
this.attachTemplateBlur();
927927
}
928928

@@ -938,8 +938,8 @@ export class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor
938938
this.rawDateString = (res.target as HTMLInputElement).value;
939939
this.onBlur(res, false);
940940
});
941-
// TODO: Refactor custom template handling.
942-
// Revise blur handling when custom template is passed
941+
// TODO: Refactor custom template handling.
942+
// Revise blur handling when custom template is passed
943943
}
944944
}
945945

@@ -1178,6 +1178,12 @@ export class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor
11781178

11791179
/** @hidden @internal */
11801180
public onInput(event) {
1181+
/**
1182+
* Fix for #8165 until refactoring (#6483).
1183+
* The IgxDateTimeEditor will be used to handle all inputs, i.e. this handler will be removed.
1184+
* It extends the IgxMaskDirective which contains logic that handles this issue.
1185+
*/
1186+
if (isIE() && !this._isInEditMode && !this.inputGroup.isFocused) { return; }
11811187
const targetValue = event.target.value;
11821188
const cursorPosition = this._getCursorPosition();
11831189
const checkInput = DatePickerUtil.checkForCompleteDateInput(this.dateFormatParts, targetValue);

projects/igniteui-angular/src/lib/directives/mask/mask.directive.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export class IgxMaskDirective implements OnInit, AfterViewChecked, ControlValueA
154154
/** @hidden */
155155
public ngOnInit(): void {
156156
if (!this.nativeElement.placeholder) {
157-
this.renderer.setAttribute(this.nativeElement, 'placeholder', this.maskOptions.format);
157+
this.renderer.setAttribute(this.nativeElement, 'placeholder', this.maskOptions.format);
158158
}
159159
}
160160

@@ -188,7 +188,15 @@ export class IgxMaskDirective implements OnInit, AfterViewChecked, ControlValueA
188188
/** @hidden */
189189
@HostListener('input')
190190
public onInputChanged(): void {
191-
if (isIE() && this._stopPropagation) {
191+
/**
192+
* '!this._focused' is a fix for #8165
193+
* On page load IE triggers input events before focus events and
194+
* it does so for every single input on the page.
195+
* The mask needs to be prevented from doing anything while this is happening because
196+
* the end user will be unable to blur the input.
197+
* https://stackoverflow.com/questions/21406138/input-event-triggered-on-internet-explorer-when-placeholder-changed
198+
*/
199+
if (isIE() && (this._stopPropagation || !this._focused)) {
192200
this._stopPropagation = false;
193201
return;
194202
}

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,19 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
250250
* @hidden @internal
251251
*/
252252
public onInputKeyDown(event): void {
253-
if (event.key === KEYS.ENTER) {
254-
event.preventDefault();
255-
this.applyFilter();
253+
switch (event.key) {
254+
case KEYS.ENTER:
255+
event.preventDefault();
256+
this.applyFilter();
257+
258+
return;
259+
case KEYS.ESCAPE || KEYS.ESCAPE_IE:
260+
if (this.searchValue) {
261+
event.stopPropagation();
262+
this.clearInput();
263+
}
264+
265+
return;
256266
}
257267
}
258268

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export class IgxGridNavigationService {
5151
!this.grid.crudService.rowEditingBlocked && !this.grid.rowInEditMode) { return; }
5252
const shift = event.shiftKey;
5353
const ctrl = event.ctrlKey;
54-
const alt = event.altKey;
5554
if (NAVIGATION_KEYS.has(key) && this.pendingNavigation) { event.preventDefault(); return; }
5655

5756
const type = this.isDataRow(this.activeNode.row) ? 'dataCell' :
@@ -631,6 +630,6 @@ export class IgxGridNavigationService {
631630
}
632631

633632
private isAddKey(key: string): boolean {
634-
return key === '+';
633+
return key === '+' || key === 'add'; // add is for IE and Edge
635634
}
636635
}

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

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4587,6 +4587,11 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
45874587
// Open excel style filtering dialog.
45884588
GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads');
45894589

4590+
let excelMenu = GridFunctions.getExcelStyleFilteringComponent(fix);
4591+
4592+
// Verify ESF is visible.
4593+
expect(excelMenu).not.toBeNull();
4594+
45904595
// Type string in search box.
45914596
const searchComponent = GridFunctions.getExcelStyleSearchComponent(fix);
45924597
const inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix, searchComponent);
@@ -4609,10 +4614,43 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
46094614
.sort();
46104615

46114616
// Verify that excel style filtering dialog is closed and data is filtered.
4612-
expect(fix.debugElement.query(By.css(FILTER_UI_ROW))).toBeNull();
4617+
excelMenu = GridFunctions.getExcelStyleFilteringComponent(fix);
4618+
expect(excelMenu).toBeNull();
46134619
expect(gridCellValues.length).toEqual(4);
46144620
expect(gridCellValues).toEqual(listItems);
46154621
}));
4622+
4623+
it('Should clear input if there is text and \'Escape\' is pressed.', fakeAsync(() => {
4624+
// Open excel style filtering dialog.
4625+
GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads');
4626+
4627+
let inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix);
4628+
let excelMenu = GridFunctions.getExcelStyleFilteringComponent(fix);
4629+
4630+
// Verify ESF is visible.
4631+
expect(excelMenu).not.toBeNull();
4632+
4633+
// Verify that the dialog is closed on pressing Escape.
4634+
inputNativeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
4635+
excelMenu = GridFunctions.getExcelStyleFilteringComponent(fix);
4636+
expect(excelMenu).toBeNull();
4637+
4638+
// Open excel style filtering dialog again and type in the input.
4639+
GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads');
4640+
inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix);
4641+
4642+
UIInteractions.clickAndSendInputElementValue(inputNativeElement, '2', fix);
4643+
4644+
// Press Escape again and verify that ESF menu is still visible and the input is empty
4645+
inputNativeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
4646+
inputNativeElement = GridFunctions.getExcelStyleSearchComponentInput(fix);
4647+
fix.detectChanges();
4648+
flush();
4649+
4650+
excelMenu = GridFunctions.getExcelStyleFilteringComponent(fix);
4651+
expect(excelMenu).not.toBeNull();
4652+
expect(inputNativeElement.value).toBe('', 'input isn\'t cleared correctly');
4653+
}));
46164654
});
46174655

46184656
describe('Templates: ', () => {

0 commit comments

Comments
 (0)