Skip to content

Commit 0ffd22f

Browse files
committed
Merge branch '19.2.x' of https://github.com/IgniteUI/igniteui-angular into mkirkova/feat-combo-toggle-button-19.2.x
2 parents 8c3cdb2 + c46b339 commit 0ffd22f

File tree

7 files changed

+74
-12
lines changed

7 files changed

+74
-12
lines changed

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

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

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,6 +2290,21 @@ describe('igxCombo', () => {
22902290
expect(combo.toggle).toHaveBeenCalledTimes(2);
22912291
expect(combo.collapsed).toEqual(true);
22922292
}));
2293+
it('should clear the selection on Enter of the focused clear icon', () => {
2294+
const selectedItem_1 = combo.dropdown.items[1];
2295+
combo.toggle();
2296+
fixture.detectChanges();
2297+
simulateComboItemClick(1);
2298+
expect(combo.selection[0]).toEqual(selectedItem_1.value);
2299+
expect(combo.value[0]).toEqual(selectedItem_1.value[combo.valueKey]);
2300+
2301+
const clearBtn = fixture.debugElement.query(By.css(`.${CSS_CLASS_CLEARBUTTON}`));
2302+
UIInteractions.triggerEventHandlerKeyDown('Enter', clearBtn);
2303+
fixture.detectChanges();
2304+
expect(input.nativeElement.value).toEqual('');
2305+
expect(combo.selection.length).toEqual(0);
2306+
expect(combo.value.length).toEqual(0);
2307+
});
22932308
it('should not be able to select group header', () => {
22942309
spyOn(combo.selectionChanging, 'emit').and.callThrough();
22952310
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
@@ -264,10 +264,7 @@ export class IgxComboComponent extends IgxComboBaseDirective implements AfterVie
264264
/**
265265
* @hidden @internal
266266
*/
267-
public handleClearItems(event: Event): void {
268-
if (this.disabled) {
269-
return;
270-
}
267+
public clearInput(event: Event): void {
271268
this.deselectAllItems(true, event);
272269
if (this.collapsed) {
273270
this.getEditElement().focus();
@@ -277,6 +274,26 @@ export class IgxComboComponent extends IgxComboBaseDirective implements AfterVie
277274
event.stopPropagation();
278275
}
279276

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

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
@@ -285,6 +285,10 @@
285285
%igx-combo__clear-button {
286286
color: var-get($theme, 'clear-button-foreground-focus');
287287
background: var-get($theme, 'clear-button-background-focus');
288+
289+
&:focus {
290+
color: color($color: 'secondary');
291+
}
288292
}
289293
}
290294

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
@@ -27,7 +27,7 @@
2727

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

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
@@ -1252,6 +1252,19 @@ describe('IgxSimpleCombo', () => {
12521252
expect(combo.collapsed).toEqual(true);
12531253
}));
12541254

1255+
it('should clear the selection on Enter of the focused clear icon', () => {
1256+
combo.select(combo.data[2][combo.valueKey]);
1257+
fixture.detectChanges();
1258+
expect(combo.selection).toBeDefined()
1259+
expect(input.nativeElement.value).toEqual('Massachusetts');
1260+
1261+
const clearBtn = fixture.debugElement.query(By.css(`.${CSS_CLASS_CLEARBUTTON}`));
1262+
UIInteractions.triggerEventHandlerKeyDown('Enter', clearBtn);
1263+
fixture.detectChanges();
1264+
expect(input.nativeElement.value.length).toEqual(0);
1265+
expect(combo.selection).not.toBeDefined();
1266+
});
1267+
12551268
it('should not filter the data when disableFiltering is true', () => {
12561269
combo.disableFiltering = true;
12571270
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
@@ -425,15 +425,11 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective implements Co
425425
}
426426

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

436-
if(!this.collapsed){
432+
if (!this.collapsed) {
437433
this.focusSearchInput(true);
438434
}
439435
event.stopPropagation();
@@ -447,6 +443,23 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective implements Co
447443
this.comboInput.focus();
448444
}
449445

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

0 commit comments

Comments
 (0)