44
55import { computed , defineComponent , ref , shallowRef , watch } from 'vue' ;
66import VirtualList from '../vc-virtual-list' ;
7+ import omit from '../_util/omit' ;
8+ import { useInjectKeysState , useInjectTreeContext } from './contextTypes' ;
79import type { FlattenNode , DataEntity , DataNode , ScrollTo } from './interface' ;
810import MotionTreeNode from './MotionTreeNode' ;
911import type { NodeListProps } from './props' ;
1012import { nodeListProps } from './props' ;
1113import { findExpandedKeys , getExpandRange } from './utils/diffUtil' ;
12- import { getTreeNodeProps , getKey } from './utils/treeUtil' ;
14+ import { getKey } from './utils/treeUtil' ;
1315
1416const HIDDEN_STYLE = {
1517 width : 0 ,
@@ -97,26 +99,29 @@ export default defineComponent({
9799 // =============================== Ref ================================
98100 const listRef = ref ( ) ;
99101 const indentMeasurerRef = ref ( ) ;
102+ const { expandedKeys, flattenNodes } = useInjectKeysState ( ) ;
100103 expose ( {
101104 scrollTo : scroll => {
102105 listRef . value . scrollTo ( scroll ) ;
103106 } ,
104107 getIndentWidth : ( ) => indentMeasurerRef . value . offsetWidth ,
105108 } ) ;
106109 // ============================== Motion ==============================
107- const transitionData = shallowRef < FlattenNode [ ] > ( props . data ) ;
110+ const transitionData = shallowRef < FlattenNode [ ] > ( flattenNodes . value ) ;
108111 const transitionRange = shallowRef ( [ ] ) ;
109112 const motionType = ref < 'show' | 'hide' | null > ( null ) ;
110113
111114 function onMotionEnd ( ) {
112- transitionData . value = props . data ;
115+ transitionData . value = flattenNodes . value ;
113116 transitionRange . value = [ ] ;
114117 motionType . value = null ;
115118
116119 props . onListChangeEnd ( ) ;
117120 }
121+
122+ const context = useInjectTreeContext ( ) ;
118123 watch (
119- [ ( ) => [ ... props . expandedKeys ] , ( ) => props . data ] ,
124+ [ ( ) => expandedKeys . value . slice ( ) , flattenNodes ] ,
120125 ( [ expandedKeys , data ] , [ prevExpandedKeys , prevData ] ) => {
121126 const diffExpanded = findExpandedKeys ( prevExpandedKeys , expandedKeys ) ;
122127 if ( diffExpanded . key !== null ) {
@@ -160,7 +165,7 @@ export default defineComponent({
160165 ) ;
161166 // We should clean up motion if is changed by dragging
162167 watch (
163- ( ) => props . dragging ,
168+ ( ) => context . value . dragging ,
164169 dragging => {
165170 if ( ! dragging ) {
166171 onMotionEnd ( ) ;
@@ -169,27 +174,18 @@ export default defineComponent({
169174 ) ;
170175
171176 const mergedData = computed ( ( ) =>
172- props . motion === undefined ? transitionData . value : props . data ,
177+ props . motion === undefined ? transitionData . value : flattenNodes . value ,
173178 ) ;
174-
179+ const onActiveChange = ( ) => {
180+ props . onActiveChange ( null ) ;
181+ } ;
175182 return ( ) => {
176183 const {
177184 prefixCls,
178- data,
179185 selectable,
180186 checkable,
181- expandedKeys,
182- selectedKeys,
183- checkedKeys,
184- loadedKeys,
185- loadingKeys,
186- halfCheckedKeys,
187- keyEntities,
188187 disabled,
189188
190- dragging,
191- dragOverNodeKey,
192- dropPosition,
193189 motion,
194190
195191 height,
@@ -204,25 +200,12 @@ export default defineComponent({
204200 onKeydown,
205201 onFocus,
206202 onBlur,
207- onActiveChange,
208203
209204 onListChangeStart,
210205 onListChangeEnd,
211206
212207 ...domProps
213208 } = { ...props , ...attrs } as NodeListProps ;
214-
215- const treeNodeRequiredProps = {
216- expandedKeys,
217- selectedKeys,
218- loadedKeys,
219- loadingKeys,
220- checkedKeys,
221- halfCheckedKeys,
222- dragOverNodeKey,
223- dropPosition,
224- keyEntities,
225- } ;
226209 return (
227210 < >
228211 { focused && activeItem && (
@@ -262,7 +245,7 @@ export default defineComponent({
262245 </ div >
263246
264247 < VirtualList
265- { ...domProps }
248+ { ...omit ( domProps , [ 'onActiveChange' ] ) }
266249 data = { mergedData . value }
267250 itemKey = { itemKey as any }
268251 height = { height }
@@ -293,15 +276,12 @@ export default defineComponent({
293276 const mergedKey = getKey ( key , pos ) ;
294277 delete restProps . key ;
295278 delete restProps . children ;
296-
297- const treeNodeProps = getTreeNodeProps ( mergedKey , treeNodeRequiredProps ) ;
298279 return (
299280 < MotionTreeNode
300281 { ...restProps }
301- { ... treeNodeProps }
282+ eventKey = { mergedKey }
302283 title = { title }
303284 active = { ! ! activeItem && key === activeItem . key }
304- pos = { pos }
305285 data = { treeNode . data }
306286 isStart = { isStart }
307287 isEnd = { isEnd }
@@ -310,10 +290,7 @@ export default defineComponent({
310290 motionType = { motionType . value }
311291 onMotionStart = { onListChangeStart }
312292 onMotionEnd = { onMotionEnd }
313- treeNodeRequiredProps = { treeNodeRequiredProps }
314- onMousemove = { ( ) => {
315- onActiveChange ( null ) ;
316- } }
293+ onMousemove = { onActiveChange }
317294 />
318295 ) ;
319296 } ,
0 commit comments