11import TransBtn from '../TransBtn' ;
22import type { DisplayValueType , Mode , RenderNode } from '../interface' ;
3- import React from 'react' ;
3+ import React , { useMemo } from 'react' ;
4+
5+ export interface AllowClearConfig {
6+ allowClear : boolean ;
7+ clearIcon : React . ReactNode ;
8+ }
49
510export const useAllowClear = (
611 prefixCls : string ,
@@ -11,38 +16,45 @@ export const useAllowClear = (
1116 disabled : boolean = false ,
1217 mergedSearchValue ?: string ,
1318 mode ?: Mode ,
14- ) => {
15- const mergedClearIcon = React . useMemo ( ( ) => {
16- if ( typeof allowClear === 'object' ) {
17- return allowClear . clearIcon ;
19+ ) : AllowClearConfig => {
20+ // Convert boolean to object first
21+ const allowClearConfig = useMemo < Partial < AllowClearConfig > > ( ( ) => {
22+ if ( typeof allowClear === 'boolean' ) {
23+ return { allowClear } ;
1824 }
19- if ( clearIcon ) {
20- return clearIcon ;
25+ if ( allowClear && typeof allowClear === 'object' ) {
26+ return allowClear ;
2127 }
22- } , [ allowClear , clearIcon ] ) ;
28+ return { allowClear : false } ;
29+ } , [ allowClear ] ) ;
2330
24- const mergedAllowClear = React . useMemo < boolean > ( ( ) => {
25- if (
31+ return useMemo ( ( ) => {
32+ const mergedAllowClear =
2633 ! disabled &&
27- ! ! allowClear &&
34+ allowClearConfig . allowClear !== false &&
2835 ( displayValues . length || mergedSearchValue ) &&
29- ! ( mode === 'combobox' && mergedSearchValue === '' )
30- ) {
31- return true ;
32- }
33- return false ;
34- } , [ allowClear , disabled , displayValues . length , mergedSearchValue , mode ] ) ;
36+ ! ( mode === 'combobox' && mergedSearchValue === '' ) ;
3537
36- return {
37- allowClear : mergedAllowClear ,
38- clearIcon : (
39- < TransBtn
40- className = { `${ prefixCls } -clear` }
41- onMouseDown = { onClearMouseDown }
42- customizeIcon = { mergedClearIcon }
43- >
44- ×
45- </ TransBtn >
46- ) ,
47- } ;
38+ return {
39+ allowClear : mergedAllowClear ,
40+ clearIcon : mergedAllowClear ? (
41+ < TransBtn
42+ className = { `${ prefixCls } -clear` }
43+ onMouseDown = { onClearMouseDown }
44+ customizeIcon = { allowClearConfig . clearIcon || clearIcon }
45+ >
46+ ×
47+ </ TransBtn >
48+ ) : null ,
49+ } ;
50+ } , [
51+ allowClearConfig ,
52+ clearIcon ,
53+ disabled ,
54+ displayValues . length ,
55+ mergedSearchValue ,
56+ mode ,
57+ onClearMouseDown ,
58+ prefixCls ,
59+ ] ) ;
4860} ;
0 commit comments