Skip to content

Commit eb86e1e

Browse files
Merge branch '20.0.x' into mkirkova/feat-combo-close-on-blur-15838-master
2 parents f8efc1d + 94bd3b3 commit eb86e1e

File tree

10 files changed

+81
-19
lines changed

10 files changed

+81
-19
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ name: "CodeQL"
1313

1414
on:
1515
push:
16-
branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
16+
branches: [ master, '[0-9]+.[0-9]+.x' ]
1717
pull_request:
1818
# The branches below must be a subset of the branches above
19-
branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ]
19+
branches: [ master, '[0-9]+.[0-9]+.x' ]
2020
schedule:
2121
- cron: '33 4 * * 4'
2222

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
"hammerjs": "^2.0.8",
120120
"ig-typedoc-theme": "^6.0.0",
121121
"igniteui-dockmanager": "^1.16.1",
122-
"igniteui-sassdoc-theme": "^2.0.0",
122+
"igniteui-sassdoc-theme": "^2.0.1",
123123
"igniteui-webcomponents": "6.1.1",
124124
"jasmine": "^5.6.0",
125125
"jasmine-core": "^5.6.0",

projects/igniteui-angular/src/lib/combo/combo.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
</ng-container>
2020
@if (displayValue) {
2121
<igx-suffix [attr.aria-label]="resourceStrings.igx_combo_clearItems_placeholder" class="igx-combo__clear-button"
22-
(click)="handleClearItems($event)">
22+
(click)="handleClearItems($event)" (keydown)="handleClearKeyDown($event)" [tabindex]="disabled ? -1 : 0" role="button">
2323
@if (clearIconTemplate) {
2424
<ng-container *ngTemplateOutlet="clearIconTemplate"></ng-container>
2525
}

projects/igniteui-angular/src/lib/combo/combo.component.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2279,6 +2279,21 @@ describe('igxCombo', () => {
22792279
cancel: false
22802280
});
22812281
});
2282+
it('should clear the selection on Enter of the focused clear icon', () => {
2283+
const selectedItem_1 = combo.dropdown.items[1];
2284+
combo.toggle();
2285+
fixture.detectChanges();
2286+
simulateComboItemClick(1);
2287+
expect(combo.selection[0]).toEqual(selectedItem_1.value);
2288+
expect(combo.value[0]).toEqual(selectedItem_1.value[combo.valueKey]);
2289+
2290+
const clearBtn = fixture.debugElement.query(By.css(`.${CSS_CLASS_CLEARBUTTON}`));
2291+
UIInteractions.triggerEventHandlerKeyDown('Enter', clearBtn);
2292+
fixture.detectChanges();
2293+
expect(input.nativeElement.value).toEqual('');
2294+
expect(combo.selection.length).toEqual(0);
2295+
expect(combo.value.length).toEqual(0);
2296+
});
22822297
it('should not be able to select group header', () => {
22832298
spyOn(combo.selectionChanging, 'emit').and.callThrough();
22842299
combo.toggle();

projects/igniteui-angular/src/lib/combo/combo.component.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,7 @@ export class IgxComboComponent extends IgxComboBaseDirective implements AfterVie
265265
/**
266266
* @hidden @internal
267267
*/
268-
public handleClearItems(event: Event): void {
269-
if (this.disabled) {
270-
return;
271-
}
268+
public clearInput(event: Event): void {
272269
this.deselectAllItems(true, event);
273270
if (this.collapsed) {
274271
this.getEditElement().focus();
@@ -278,6 +275,26 @@ export class IgxComboComponent extends IgxComboBaseDirective implements AfterVie
278275
event.stopPropagation();
279276
}
280277

278+
/**
279+
* @hidden @internal
280+
*/
281+
public handleClearItems(event: Event): void {
282+
if (this.disabled) {
283+
return;
284+
}
285+
this.clearInput(event);
286+
}
287+
288+
/**
289+
* @hidden @internal
290+
*/
291+
public handleClearKeyDown(eventArgs: KeyboardEvent) {
292+
if (eventArgs.key === 'Enter' || eventArgs.key === ' ') {
293+
eventArgs.preventDefault();
294+
this.clearInput(eventArgs);
295+
}
296+
}
297+
281298
/**
282299
* Select defined items
283300
*

projects/igniteui-angular/src/lib/core/styles/components/combo/_combo-theme.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,10 @@
319319
%igx-combo__clear-button {
320320
color: var-get($theme, 'clear-button-foreground-focus');
321321
background: var-get($theme, 'clear-button-background-focus');
322+
323+
&:focus {
324+
color: color($color: 'secondary');
325+
}
322326
}
323327
}
324328

projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
@if (hasSelectedItem) {
2828
<igx-suffix [attr.aria-label]="resourceStrings.igx_combo_clearItems_placeholder" class="igx-combo__clear-button"
29-
(click)="handleClear($event)">
29+
(click)="handleClear($event)" (keydown)="handleClearKeyDown($event)" [tabindex]="disabled ? -1 : 0" role="button">
3030
@if (clearIconTemplate) {
3131
<ng-container *ngTemplateOutlet="clearIconTemplate"></ng-container>
3232
}

projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,19 @@ describe('IgxSimpleCombo', () => {
12411241
expect(combo.displayValue).toEqual('Wisconsin');
12421242
});
12431243

1244+
it('should clear the selection on Enter of the focused clear icon', () => {
1245+
combo.select(combo.data[2][combo.valueKey]);
1246+
fixture.detectChanges();
1247+
expect(combo.selection).toBeDefined()
1248+
expect(input.nativeElement.value).toEqual('Massachusetts');
1249+
1250+
const clearBtn = fixture.debugElement.query(By.css(`.${CSS_CLASS_CLEARBUTTON}`));
1251+
UIInteractions.triggerEventHandlerKeyDown('Enter', clearBtn);
1252+
fixture.detectChanges();
1253+
expect(input.nativeElement.value.length).toEqual(0);
1254+
expect(combo.selection).not.toBeDefined();
1255+
});
1256+
12441257
it('should not filter the data when disableFiltering is true', () => {
12451258
combo.disableFiltering = true;
12461259
fixture.detectChanges();

projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -424,15 +424,11 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective implements Co
424424
}
425425

426426
/** @hidden @internal */
427-
public handleClear(event: Event): void {
428-
if (this.disabled) {
429-
return;
430-
}
431-
427+
public clearInput(event: Event): void {
432428
const oldSelection = this.selection;
433429
this.clearSelection(true);
434430

435-
if(!this.collapsed){
431+
if (!this.collapsed) {
436432
this.focusSearchInput(true);
437433
}
438434
event.stopPropagation();
@@ -446,6 +442,23 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective implements Co
446442
this.comboInput.focus();
447443
}
448444

445+
/** @hidden @internal */
446+
public handleClear(event: Event): void {
447+
if (this.disabled) {
448+
return;
449+
}
450+
451+
this.clearInput(event);
452+
}
453+
454+
/** @hidden @internal */
455+
public handleClearKeyDown(event: KeyboardEvent): void {
456+
if (event.key === 'Enter' || event.key === ' ') {
457+
event.preventDefault();
458+
this.clearInput(event);
459+
}
460+
}
461+
449462
/** @hidden @internal */
450463
public handleOpened(): void {
451464
this.triggerCheck();

0 commit comments

Comments
 (0)