@@ -20,14 +20,15 @@ export interface CascaderProps extends IProps, DropdownProps {
20
20
placeholder ?: string ;
21
21
disabled ?: boolean ;
22
22
inputProps ?: HTMLInputProps ;
23
+ expandTrigger : 'click' | 'hover' ;
23
24
}
24
25
25
26
function Cascader ( props : CascaderProps ) {
26
27
const {
27
28
value,
28
29
onChange,
29
30
onSearch,
30
-
31
+ expandTrigger = 'click' ,
31
32
size,
32
33
disabled,
33
34
allowClear,
@@ -110,6 +111,7 @@ function Cascader(props: CascaderProps) {
110
111
111
112
const handleItemClick = ( optionsItem : OptionType , level : number ) => {
112
113
selectedValue . splice ( level , selectedValue . length - level , optionsItem ) ;
114
+ if ( ! optionsItem . children ) setInnerIsOpen ( false ) ;
113
115
114
116
handelChange ( true , selectedValue ) ;
115
117
} ;
@@ -139,6 +141,21 @@ function Cascader(props: CascaderProps) {
139
141
140
142
const widths = ( style ?. width as number ) * 0.7 || undefined ;
141
143
144
+ const trigger = useMemo ( ( ) => {
145
+ return ( cb : Function , click ?: boolean ) => {
146
+ const triggers : Record < 'onClick' | 'onMouseOver' , ( ) => void > = { onClick : ( ) => { } , onMouseOver : ( ) => { } } ;
147
+ const callback = ( ) => {
148
+ cb ( ) ;
149
+ } ;
150
+ if ( expandTrigger === 'click' || click ) {
151
+ triggers . onClick = callback ;
152
+ } else if ( expandTrigger === 'hover' ) {
153
+ triggers . onMouseOver = callback ;
154
+ }
155
+ return triggers ;
156
+ } ;
157
+ } , [ ] ) ;
158
+
142
159
const OptionIter = ( option : Array < OptionType > , level : number = 0 ) => {
143
160
if ( ! option ) return ;
144
161
@@ -164,7 +181,9 @@ function Cascader(props: CascaderProps) {
164
181
key = { index }
165
182
text = { opt . label }
166
183
addonAfter = { opt . children ? < Icon type = "right" /> : undefined }
167
- onClick = { ( ) => handleItemClick ( opt , level ) }
184
+ { ...trigger ( ( ) => {
185
+ handleItemClick ( opt , level ) ;
186
+ } , ! opt . children ?. length ) }
168
187
/>
169
188
) ;
170
189
} )
@@ -215,13 +234,7 @@ function Cascader(props: CascaderProps) {
215
234
searchOption
216
235
. filter ( ( opt ) => opt . label . includes ( searchText . trim ( ) ) )
217
236
. map ( ( opt , index ) => {
218
- return (
219
- < Menu . Item
220
- key = { index }
221
- text = { opt . label }
222
- onClick = { ( ) => searchItemClick ( opt . options ) } //
223
- />
224
- ) ;
237
+ return < Menu . Item key = { index } text = { opt . label } onClick = { ( ) => searchItemClick ( opt . options ) } /> ;
225
238
} )
226
239
) }
227
240
</ Menu >
0 commit comments