4
4
5
5
import { computed , defineComponent , ref , shallowRef , watch } from 'vue' ;
6
6
import VirtualList from '../vc-virtual-list' ;
7
+ import omit from '../_util/omit' ;
8
+ import { useInjectKeysState , useInjectTreeContext } from './contextTypes' ;
7
9
import type { FlattenNode , DataEntity , DataNode , ScrollTo } from './interface' ;
8
10
import MotionTreeNode from './MotionTreeNode' ;
9
11
import type { NodeListProps } from './props' ;
10
12
import { nodeListProps } from './props' ;
11
13
import { findExpandedKeys , getExpandRange } from './utils/diffUtil' ;
12
- import { getTreeNodeProps , getKey } from './utils/treeUtil' ;
14
+ import { getKey } from './utils/treeUtil' ;
13
15
14
16
const HIDDEN_STYLE = {
15
17
width : 0 ,
@@ -97,26 +99,29 @@ export default defineComponent({
97
99
// =============================== Ref ================================
98
100
const listRef = ref ( ) ;
99
101
const indentMeasurerRef = ref ( ) ;
102
+ const { expandedKeys, flattenNodes } = useInjectKeysState ( ) ;
100
103
expose ( {
101
104
scrollTo : scroll => {
102
105
listRef . value . scrollTo ( scroll ) ;
103
106
} ,
104
107
getIndentWidth : ( ) => indentMeasurerRef . value . offsetWidth ,
105
108
} ) ;
106
109
// ============================== Motion ==============================
107
- const transitionData = shallowRef < FlattenNode [ ] > ( props . data ) ;
110
+ const transitionData = shallowRef < FlattenNode [ ] > ( flattenNodes . value ) ;
108
111
const transitionRange = shallowRef ( [ ] ) ;
109
112
const motionType = ref < 'show' | 'hide' | null > ( null ) ;
110
113
111
114
function onMotionEnd ( ) {
112
- transitionData . value = props . data ;
115
+ transitionData . value = flattenNodes . value ;
113
116
transitionRange . value = [ ] ;
114
117
motionType . value = null ;
115
118
116
119
props . onListChangeEnd ( ) ;
117
120
}
121
+
122
+ const context = useInjectTreeContext ( ) ;
118
123
watch (
119
- [ ( ) => [ ... props . expandedKeys ] , ( ) => props . data ] ,
124
+ [ ( ) => expandedKeys . value . slice ( ) , flattenNodes ] ,
120
125
( [ expandedKeys , data ] , [ prevExpandedKeys , prevData ] ) => {
121
126
const diffExpanded = findExpandedKeys ( prevExpandedKeys , expandedKeys ) ;
122
127
if ( diffExpanded . key !== null ) {
@@ -160,7 +165,7 @@ export default defineComponent({
160
165
) ;
161
166
// We should clean up motion if is changed by dragging
162
167
watch (
163
- ( ) => props . dragging ,
168
+ ( ) => context . value . dragging ,
164
169
dragging => {
165
170
if ( ! dragging ) {
166
171
onMotionEnd ( ) ;
@@ -169,27 +174,18 @@ export default defineComponent({
169
174
) ;
170
175
171
176
const mergedData = computed ( ( ) =>
172
- props . motion === undefined ? transitionData . value : props . data ,
177
+ props . motion === undefined ? transitionData . value : flattenNodes . value ,
173
178
) ;
174
-
179
+ const onActiveChange = ( ) => {
180
+ props . onActiveChange ( null ) ;
181
+ } ;
175
182
return ( ) => {
176
183
const {
177
184
prefixCls,
178
- data,
179
185
selectable,
180
186
checkable,
181
- expandedKeys,
182
- selectedKeys,
183
- checkedKeys,
184
- loadedKeys,
185
- loadingKeys,
186
- halfCheckedKeys,
187
- keyEntities,
188
187
disabled,
189
188
190
- dragging,
191
- dragOverNodeKey,
192
- dropPosition,
193
189
motion,
194
190
195
191
height,
@@ -204,25 +200,12 @@ export default defineComponent({
204
200
onKeydown,
205
201
onFocus,
206
202
onBlur,
207
- onActiveChange,
208
203
209
204
onListChangeStart,
210
205
onListChangeEnd,
211
206
212
207
...domProps
213
208
} = { ...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
- } ;
226
209
return (
227
210
< >
228
211
{ focused && activeItem && (
@@ -262,7 +245,7 @@ export default defineComponent({
262
245
</ div >
263
246
264
247
< VirtualList
265
- { ...domProps }
248
+ { ...omit ( domProps , [ 'onActiveChange' ] ) }
266
249
data = { mergedData . value }
267
250
itemKey = { itemKey as any }
268
251
height = { height }
@@ -293,15 +276,12 @@ export default defineComponent({
293
276
const mergedKey = getKey ( key , pos ) ;
294
277
delete restProps . key ;
295
278
delete restProps . children ;
296
-
297
- const treeNodeProps = getTreeNodeProps ( mergedKey , treeNodeRequiredProps ) ;
298
279
return (
299
280
< MotionTreeNode
300
281
{ ...restProps }
301
- { ... treeNodeProps }
282
+ eventKey = { mergedKey }
302
283
title = { title }
303
284
active = { ! ! activeItem && key === activeItem . key }
304
- pos = { pos }
305
285
data = { treeNode . data }
306
286
isStart = { isStart }
307
287
isEnd = { isEnd }
@@ -310,10 +290,7 @@ export default defineComponent({
310
290
motionType = { motionType . value }
311
291
onMotionStart = { onListChangeStart }
312
292
onMotionEnd = { onMotionEnd }
313
- treeNodeRequiredProps = { treeNodeRequiredProps }
314
- onMousemove = { ( ) => {
315
- onActiveChange ( null ) ;
316
- } }
293
+ onMousemove = { onActiveChange }
317
294
/>
318
295
) ;
319
296
} ,
0 commit comments