@@ -94,10 +94,10 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
9494 private _dataSubscription : Subscription | null ;
9595
9696 /** Level of nodes */
97- private _levels : Map < T , number > = new Map < T , number > ( ) ;
97+ private _levels : Map < K , number > = new Map < K , number > ( ) ;
9898
9999 /** The immediate parents for a node. This is `null` if there is no parent. */
100- private _parents : Map < T , T | null > = new Map < T , T | null > ( ) ;
100+ private _parents : Map < K , T | null > = new Map < K , T | null > ( ) ;
101101
102102 /**
103103 * The internal node groupings for each node; we use this, primarily for flattened trees, to
@@ -204,9 +204,6 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
204204 new Map < K , CdkTreeNode < T , K > > ( ) ,
205205 ) ;
206206
207- /** The mapping between data nodes and the parent node. `null` if no parent. */
208- private _parents : Map < K , T | null > = new Map < K , T | null > ( ) ;
209-
210207 constructor ( private _differs : IterableDiffers , private _changeDetectorRef : ChangeDetectorRef ) { }
211208
212209 ngOnInit ( ) {
@@ -354,8 +351,8 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
354351 } else if ( currentIndex == null ) {
355352 viewContainer . remove ( adjustedPreviousIndex ! ) ;
356353 const group = this . _getNodeGroup ( item . item ) ;
357- this . _levels . delete ( item . item ) ;
358- this . _parents . delete ( item . item ) ;
354+ this . _levels . delete ( this . _getExpansionKey ( item . item ) ) ;
355+ this . _parents . delete ( this . _getExpansionKey ( item . item ) ) ;
359356 group . splice ( group . indexOf ( item . item ) , 1 ) ;
360357 } else {
361358 const view = viewContainer . get ( adjustedPreviousIndex ! ) ;
@@ -404,21 +401,24 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
404401 const levelAccessor = this . _getLevelAccessor ( ) ;
405402 if ( levelAccessor ) {
406403 context . level = levelAccessor ( nodeData ) ;
407- } else if ( typeof parentData !== 'undefined' && this . _levels . has ( parentData ) ) {
408- context . level = this . _levels . get ( parentData ) ! + 1 ;
404+ } else if (
405+ typeof parentData !== 'undefined' &&
406+ this . _levels . has ( this . _getExpansionKey ( parentData ) )
407+ ) {
408+ context . level = this . _levels . get ( this . _getExpansionKey ( parentData ) ) ! + 1 ;
409409 } else {
410410 context . level = 0 ;
411411 }
412- this . _levels . set ( nodeData , context . level ) ;
412+ this . _levels . set ( this . _getExpansionKey ( nodeData ) , context . level ) ;
413413 const parent = parentData ?? this . _findParentForNode ( nodeData , index ) ;
414- this . _parents . set ( nodeData , parent ) ;
414+ this . _parents . set ( this . _getExpansionKey ( nodeData ) , parent ) ;
415415
416416 // Determine where to insert this new node into the group, then insert it.
417417 // We do this by looking at the previous node in our flattened node list. If it's in the same
418418 // group, we place the current node after. Otherwise, we place it at the start of the group.
419419 const currentGroup = this . _groups . get ( context . level ) ?? new Map < T | null , T [ ] > ( ) ;
420420 const group = currentGroup . get ( parent ) ?? [ ] ;
421- const previousNode = this . _dataNodes ?. [ index - 1 ] ;
421+ const previousNode = this . _dataNodes . value ?. [ index - 1 ] ;
422422 const groupInsertionIndex = ( previousNode && group . indexOf ( previousNode ) + 1 ) ?? 0 ;
423423 group . splice ( groupInsertionIndex , 0 , nodeData ) ;
424424 currentGroup . set ( parent , group ) ;
@@ -627,13 +627,13 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
627627 this . _nodes . next ( this . _nodes . value ) ;
628628 }
629629
630+ /**
631+ * For the given node, determine the level where this node appears in the tree.
632+ *
633+ * This is intended to be used for `aria-level` but is 0-indexed.
634+ */
630635 _getLevel ( node : T ) {
631- return this . _levels . get ( node ) ;
632- }
633-
634- _getPositionInSet ( dataNode : T ) {
635- const group = this . _getNodeGroup ( dataNode ) ;
636- return group . indexOf ( dataNode ) + 1 ;
636+ return this . _levels . get ( this . _getExpansionKey ( node ) ) ;
637637 }
638638
639639 /**
@@ -752,8 +752,8 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
752752 }
753753
754754 private _getNodeGroup ( node : T ) {
755- const level = this . _levels . get ( node ) ;
756- const parent = this . _parents . get ( node ) ;
755+ const level = this . _levels . get ( this . _getExpansionKey ( node ) ) ;
756+ const parent = this . _parents . get ( this . _getExpansionKey ( node ) ) ;
757757 const group = this . _groups . get ( level ?? 0 ) ?. get ( parent ?? null ) ;
758758 return group ?? [ node ] ;
759759 }
@@ -765,10 +765,10 @@ export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer,
765765 if ( ! this . _dataNodes ) {
766766 return null ;
767767 }
768- const currentLevel = this . _levels . get ( node ) ?? 0 ;
768+ const currentLevel = this . _levels . get ( this . _getExpansionKey ( node ) ) ?? 0 ;
769769 for ( let parentIndex = index ; parentIndex >= 0 ; parentIndex -- ) {
770- const parentNode = this . _dataNodes [ parentIndex ] ;
771- const parentLevel = this . _levels . get ( parentNode ) ?? 0 ;
770+ const parentNode = this . _dataNodes . value [ parentIndex ] ;
771+ const parentLevel = this . _levels . get ( this . _getExpansionKey ( parentNode ) ) ?? 0 ;
772772
773773 if ( parentLevel < currentLevel ) {
774774 return parentNode ;
0 commit comments