Skip to content

Commit fefcb68

Browse files
authored
fix(module:select): input clear when nzAutoClear (#8167)
1 parent e37eab2 commit fefcb68

File tree

3 files changed

+73
-5
lines changed

3 files changed

+73
-5
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,5 @@ report.*.json
5858
Thumbs.db
5959

6060
monospace.json
61+
62+
.nx

components/select/select.component.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,9 @@ export class NzSelectComponent implements ControlValueAccessor, OnInit, AfterCon
500500

501501
onOpenChange(): void {
502502
this.updateCdkConnectedOverlayStatus();
503-
this.clearInput();
503+
if (this.nzAutoClearSearchValue) {
504+
this.clearInput();
505+
}
504506
}
505507

506508
onInputValueChange(value: string): void {

components/select/select.spec.ts

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { BACKSPACE, DOWN_ARROW, ENTER, ESCAPE, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
22
import { OverlayContainer } from '@angular/cdk/overlay';
33
import { ApplicationRef, Component, TemplateRef, ViewChild } from '@angular/core';
4-
import { ComponentFixture, TestBed, fakeAsync, flush, inject, tick } from '@angular/core/testing';
4+
import { ComponentFixture, fakeAsync, flush, inject, TestBed, tick } from '@angular/core/testing';
55
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
66
import { By } from '@angular/platform-browser';
77

88
import {
9-
ɵComponentBed as ComponentBed,
10-
ɵcreateComponentBed as createComponentBed,
119
dispatchFakeEvent,
1210
dispatchKeyboardEvent,
13-
dispatchMouseEvent
11+
dispatchMouseEvent,
12+
ɵComponentBed as ComponentBed,
13+
ɵcreateComponentBed as createComponentBed
1414
} from 'ng-zorro-antd/core/testing';
1515
import { NzSafeAny, NzStatus } from 'ng-zorro-antd/core/types';
1616
import { NzFormControlStatusType, NzFormModule } from 'ng-zorro-antd/form';
@@ -586,13 +586,16 @@ describe('select', () => {
586586
let component: TestSelectTemplateMultipleComponent;
587587
let fixture: ComponentFixture<TestSelectTemplateMultipleComponent>;
588588
let selectElement!: HTMLElement;
589+
let overlayContainerElement: HTMLElement;
590+
589591
beforeEach(() => {
590592
testBed = createComponentBed(TestSelectTemplateMultipleComponent, {
591593
imports: [NzSelectModule, NzIconTestModule, FormsModule]
592594
});
593595
component = testBed.component;
594596
fixture = testBed.fixture;
595597
selectElement = testBed.debugElement.query(By.directive(NzSelectComponent)).nativeElement;
598+
overlayContainerElement = TestBed.inject(OverlayContainer).getContainerElement();
596599
});
597600
it('should classname correct', () => {
598601
expect(selectElement.classList).toContain('ant-select-multiple');
@@ -773,6 +776,35 @@ describe('select', () => {
773776
flushRefresh();
774777
expect(inputElement.value).toBe('test');
775778
}));
779+
it('should nzAutoClearSearchValue work when cdkOverlay send emit close', fakeAsync(() => {
780+
const flushRefresh = (): void => {
781+
fixture.detectChanges();
782+
flush();
783+
fixture.detectChanges();
784+
};
785+
component.nzOpen = true;
786+
component.listOfOption = [
787+
{ nzValue: 'test_01', nzLabel: 'test_01' },
788+
{ nzValue: 'test_02', nzLabel: 'test_02' }
789+
];
790+
flushRefresh();
791+
const listOfContainerItem = document.querySelectorAll('nz-option-item');
792+
const inputElement = selectElement.querySelector('input')!;
793+
inputElement.value = 'test';
794+
dispatchFakeEvent(inputElement, 'input');
795+
dispatchMouseEvent(listOfContainerItem[0], 'click');
796+
flushRefresh();
797+
expect(inputElement.value).toBe('');
798+
component.nzAutoClearSearchValue = false;
799+
flushRefresh();
800+
inputElement.value = 'test';
801+
dispatchFakeEvent(inputElement, 'input');
802+
dispatchKeyboardEvent(overlayContainerElement, 'keydown', ESCAPE, overlayContainerElement);
803+
fixture.detectChanges();
804+
flushRefresh();
805+
fixture.detectChanges();
806+
expect(inputElement.value).toBe('test');
807+
}));
776808
});
777809
describe('tags template mode', () => {
778810
let testBed: ComponentBed<TestSelectTemplateTagsComponent>;
@@ -1079,13 +1111,16 @@ describe('select', () => {
10791111
let component: TestSelectReactiveMultipleComponent;
10801112
let fixture: ComponentFixture<TestSelectReactiveMultipleComponent>;
10811113
let selectElement!: HTMLElement;
1114+
let overlayContainerElement: HTMLElement;
1115+
10821116
beforeEach(() => {
10831117
testBed = createComponentBed(TestSelectReactiveMultipleComponent, {
10841118
imports: [NzSelectModule, NzIconTestModule, FormsModule]
10851119
});
10861120
component = testBed.component;
10871121
fixture = testBed.fixture;
10881122
selectElement = testBed.debugElement.query(By.directive(NzSelectComponent)).nativeElement;
1123+
overlayContainerElement = TestBed.inject(OverlayContainer).getContainerElement();
10891124
});
10901125
it('should ngModel works', fakeAsync(() => {
10911126
component.listOfOption = [
@@ -1263,6 +1298,35 @@ describe('select', () => {
12631298
flushRefresh();
12641299
expect(inputElement.value).toBe('test');
12651300
}));
1301+
it('should nzAutoClearSearchValue work when cdkOverlay send emit close', fakeAsync(() => {
1302+
const flushRefresh = (): void => {
1303+
fixture.detectChanges();
1304+
flush();
1305+
fixture.detectChanges();
1306+
};
1307+
component.nzOpen = true;
1308+
component.listOfOption = [
1309+
{ value: 'test_01', label: 'test_01' },
1310+
{ value: 'test_02', label: 'test_02' }
1311+
];
1312+
flushRefresh();
1313+
const listOfContainerItem = document.querySelectorAll('nz-option-item');
1314+
const inputElement = selectElement.querySelector('input')!;
1315+
inputElement.value = 'test';
1316+
dispatchFakeEvent(inputElement, 'input');
1317+
dispatchMouseEvent(listOfContainerItem[0], 'click');
1318+
flushRefresh();
1319+
expect(inputElement.value).toBe('');
1320+
component.nzAutoClearSearchValue = false;
1321+
flushRefresh();
1322+
inputElement.value = 'test';
1323+
dispatchFakeEvent(inputElement, 'input');
1324+
dispatchKeyboardEvent(overlayContainerElement, 'keydown', ESCAPE, overlayContainerElement);
1325+
fixture.detectChanges();
1326+
flushRefresh();
1327+
fixture.detectChanges();
1328+
expect(inputElement.value).toBe('test');
1329+
}));
12661330
});
12671331
describe('tags reactive mode', () => {
12681332
let testBed: ComponentBed<TestSelectReactiveTagsComponent>;

0 commit comments

Comments
 (0)