@@ -20,14 +20,15 @@ export interface CascaderProps extends IProps, DropdownProps {
2020 placeholder ?: string ;
2121 disabled ?: boolean ;
2222 inputProps ?: HTMLInputProps ;
23+ expandTrigger : 'click' | 'hover' ;
2324}
2425
2526function Cascader ( props : CascaderProps ) {
2627 const {
2728 value,
2829 onChange,
2930 onSearch,
30-
31+ expandTrigger = 'click' ,
3132 size,
3233 disabled,
3334 allowClear,
@@ -110,6 +111,7 @@ function Cascader(props: CascaderProps) {
110111
111112 const handleItemClick = ( optionsItem : OptionType , level : number ) => {
112113 selectedValue . splice ( level , selectedValue . length - level , optionsItem ) ;
114+ if ( ! optionsItem . children ) setInnerIsOpen ( false ) ;
113115
114116 handelChange ( true , selectedValue ) ;
115117 } ;
@@ -139,6 +141,21 @@ function Cascader(props: CascaderProps) {
139141
140142 const widths = ( style ?. width as number ) * 0.7 || undefined ;
141143
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+
142159 const OptionIter = ( option : Array < OptionType > , level : number = 0 ) => {
143160 if ( ! option ) return ;
144161
@@ -164,7 +181,9 @@ function Cascader(props: CascaderProps) {
164181 key = { index }
165182 text = { opt . label }
166183 addonAfter = { opt . children ? < Icon type = "right" /> : undefined }
167- onClick = { ( ) => handleItemClick ( opt , level ) }
184+ { ...trigger ( ( ) => {
185+ handleItemClick ( opt , level ) ;
186+ } , ! opt . children ?. length ) }
168187 />
169188 ) ;
170189 } )
@@ -215,13 +234,7 @@ function Cascader(props: CascaderProps) {
215234 searchOption
216235 . filter ( ( opt ) => opt . label . includes ( searchText . trim ( ) ) )
217236 . 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 ) } /> ;
225238 } )
226239 ) }
227240 </ Menu >
0 commit comments