Skip to content

Commit 17b0ea3

Browse files
authored
fix(module:cascader): hide placeholder when trigger compositionstart event (#8641)
* fix(module:cascader): hide placeholder when trigger compositionstart * refactor(module:cascader): rename test unit fake event name
1 parent 7f39cd3 commit 17b0ea3

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

components/cascader/cascader.component.ts

+17-3
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ const defaultDisplayRender = (labels: string[]): string => labels.join(' / ');
9595
[(ngModel)]="inputValue"
9696
(blur)="handleInputBlur()"
9797
(focus)="handleInputFocus()"
98+
(compositionstart)="handleInputCompositionstart()"
99+
(compositionend)="handleInputCompositionend()"
98100
/>
99101
</span>
100102
@if (showLabelRender) {
@@ -109,9 +111,11 @@ const defaultDisplayRender = (labels: string[]): string => labels.join(' / ');
109111
}
110112
</span>
111113
} @else {
112-
<span class="ant-select-selection-placeholder" [style.visibility]="!inputValue ? 'visible' : 'hidden'">{{
113-
showPlaceholder ? nzPlaceHolder || locale?.placeholder : null
114-
}}</span>
114+
<span
115+
class="ant-select-selection-placeholder"
116+
[style.visibility]="isComposing || inputValue ? 'hidden' : 'visible'"
117+
>{{ showPlaceholder ? nzPlaceHolder || locale?.placeholder : null }}</span
118+
>
115119
}
116120
</div>
117121
@if (nzShowArrow) {
@@ -340,6 +344,8 @@ export class NzCascaderComponent
340344
locale!: NzCascaderI18nInterface;
341345
dir: Direction = 'ltr';
342346

347+
isComposing = false;
348+
343349
private inputString = '';
344350
private isOpening = false;
345351
private delayMenuTimer?: ReturnType<typeof setTimeout>;
@@ -596,6 +602,14 @@ export class NzCascaderComponent
596602
this.focus();
597603
}
598604

605+
handleInputCompositionstart(): void {
606+
this.isComposing = true;
607+
}
608+
609+
handleInputCompositionend(): void {
610+
this.isComposing = false;
611+
}
612+
599613
@HostListener('click')
600614
onTriggerClick(): void {
601615
if (this.nzDisabled) {

components/cascader/cascader.spec.ts

+16
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,22 @@ describe('cascader', () => {
146146
expect(getPlaceholder()).toBe(placeholder);
147147
});
148148

149+
it('should show/hide placeholder when trigger compositionstart/compositionend event', () => {
150+
testComponent.nzPlaceHolder = 'placeholder test';
151+
fixture.detectChanges();
152+
153+
const placeholderElement = cascader.nativeElement.querySelector('.ant-select-selection-placeholder');
154+
const fakeCompositionstartEvent = createFakeEvent('compositionstart', true, true);
155+
getInputEl().dispatchEvent(fakeCompositionstartEvent);
156+
fixture.detectChanges();
157+
expect(placeholderElement.style.visibility).toBe('hidden');
158+
159+
const fakeCompositionendEvent = createFakeEvent('compositionend', true, true);
160+
getInputEl().dispatchEvent(fakeCompositionendEvent);
161+
fixture.detectChanges();
162+
expect(placeholderElement.style.visibility).toBe('visible');
163+
});
164+
149165
it('should size work', () => {
150166
testComponent.nzSize = 'small';
151167
fixture.detectChanges();

0 commit comments

Comments
 (0)