@@ -2,10 +2,10 @@ import type { DId, DNestedChildren, DSize } from '../../utils/global';
22import type { DDropdownItem } from '../dropdown' ;
33import type { DFormControl } from '../form' ;
44import type { DSelectItem } from '../select' ;
5- import type { AbstractTreeNode } from '../tree' ;
5+ import type { AbstractTreeNode } from '../tree/node ' ;
66
77import { isNull } from 'lodash' ;
8- import React , { useCallback , useState , useId , useMemo } from 'react' ;
8+ import React , { useCallback , useState , useId , useMemo , useRef } from 'react' ;
99
1010import { usePrefixConfig , useComponentConfig , useGeneralContext , useDValue , useEventNotify } from '../../hooks' ;
1111import { LoadingOutlined } from '../../icons' ;
@@ -14,7 +14,7 @@ import { DSelectbox } from '../_selectbox';
1414import { DDropdown } from '../dropdown' ;
1515import { useFormControl } from '../form' ;
1616import { DTag } from '../tag' ;
17- import { MultipleTreeNode , SingleTreeNode } from '../tree' ;
17+ import { MultipleTreeNode , SingleTreeNode } from '../tree/node ' ;
1818import { DList } from './List' ;
1919import { DSearchList } from './SearchList' ;
2020import { getText , TREE_NODE_KEY } from './utils' ;
@@ -34,8 +34,8 @@ export interface DCascaderItem<V extends DId> {
3434
3535export interface DCascaderProps < V extends DId , T extends DCascaderItem < V > > extends React . HTMLAttributes < HTMLDivElement > {
3636 dFormControl ?: DFormControl ;
37- dModel ?: V | null | V [ ] ;
3837 dList : DNestedChildren < T > [ ] ;
38+ dModel ?: V | null | V [ ] ;
3939 dVisible ?: boolean ;
4040 dPlaceholder ?: string ;
4141 dSize ?: DSize ;
@@ -59,7 +59,7 @@ export interface DCascaderProps<V extends DId, T extends DCascaderItem<V>> exten
5959 afterVisibleChange ?: ( visible : boolean ) => void ;
6060 onSearch ?: ( value : string ) => void ;
6161 onClear ?: ( ) => void ;
62- onFocusChange ?: ( value : V , item : DNestedChildren < T > ) => void ;
62+ onFirstFocus ?: ( value : V , item : DNestedChildren < T > ) => void ;
6363}
6464
6565const { COMPONENT_NAME } = registerComponentMate ( { COMPONENT_NAME : 'DCascader' } ) ;
@@ -69,8 +69,8 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
6969) : JSX . Element | null {
7070 const {
7171 dFormControl,
72- dModel,
7372 dList,
73+ dModel,
7474 dVisible,
7575 dPlaceholder,
7676 dSize,
@@ -91,7 +91,7 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
9191 afterVisibleChange,
9292 onSearch,
9393 onClear,
94- onFocusChange ,
94+ onFirstFocus ,
9595
9696 ...restProps
9797 } = useComponentConfig ( COMPONENT_NAME , props ) ;
@@ -101,6 +101,10 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
101101 const { gSize, gDisabled } = useGeneralContext ( ) ;
102102 //#endregion
103103
104+ const dataRef = useRef < {
105+ focusList : Set < V > ;
106+ } > ( { focusList : new Set ( ) } ) ;
107+
104108 const onKeyDown$ = useEventNotify < React . KeyboardEvent < HTMLInputElement > > ( ) ;
105109
106110 const uniqueId = useId ( ) ;
@@ -220,7 +224,7 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
220224 }
221225
222226 if ( hasSelected ) {
223- return findNested ( renderNodes as AbstractTreeNode < V , T > [ ] , ( node ) => node . enabled && node . checked ) ;
227+ return findNested ( renderNodes , ( node ) => node . enabled && node . checked ) ;
224228 }
225229 } ) ( ) ;
226230
@@ -393,7 +397,10 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
393397 changeVisible ( false ) ;
394398 } }
395399 onFocusChange = { ( item ) => {
396- onFocusChange ?.( item . value , item [ TREE_NODE_KEY ] . origin ) ;
400+ if ( ! dataRef . current . focusList . has ( item . value ) ) {
401+ dataRef . current . focusList . add ( item . value ) ;
402+ onFirstFocus ?.( item . value , item [ TREE_NODE_KEY ] . origin ) ;
403+ }
397404
398405 setSearchFocusItem ( item ) ;
399406 } }
@@ -416,7 +423,10 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
416423 changeVisible ( false ) ;
417424 } }
418425 onFocusChange = { ( node ) => {
419- onFocusChange ?.( node . id , node . origin ) ;
426+ if ( ! dataRef . current . focusList . has ( node . id ) ) {
427+ dataRef . current . focusList . add ( node . id ) ;
428+ onFirstFocus ?.( node . id , node . origin ) ;
429+ }
420430
421431 setNoSearchFocusNode ( node ) ;
422432 } }
0 commit comments