* Create the embedded view for the data node template and place it in the correct index location * within the data node view container.
(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T)
| 593 | * within the data node view container. |
| 594 | */ |
| 595 | insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T) { |
| 596 | const levelAccessor = this._getLevelAccessor(); |
| 597 | |
| 598 | const node = this._getNodeDef(nodeData, index); |
| 599 | const key = this._getExpansionKey(nodeData); |
| 600 | |
| 601 | // Node context that will be provided to created embedded view |
| 602 | const context = new CdkTreeNodeOutletContext<T>(nodeData); |
| 603 | context.index = index; |
| 604 | |
| 605 | parentData ??= this._parents.get(key) ?? undefined; |
| 606 | // If the tree is flat tree, then use the `getLevel` function in flat tree control |
| 607 | // Otherwise, use the level of parent node. |
| 608 | if (levelAccessor) { |
| 609 | context.level = levelAccessor(nodeData); |
| 610 | } else if (parentData !== undefined && this._levels.has(this._getExpansionKey(parentData))) { |
| 611 | context.level = this._levels.get(this._getExpansionKey(parentData))! + 1; |
| 612 | } else { |
| 613 | context.level = 0; |
| 614 | } |
| 615 | this._levels.set(key, context.level); |
| 616 | |
| 617 | // Use default tree nodeOutlet, or nested node's nodeOutlet |
| 618 | const container = viewContainer ? viewContainer : this._nodeOutlet.viewContainer; |
| 619 | container.createEmbeddedView(node.template, context, index); |
| 620 | |
| 621 | // Set the data to just created `CdkTreeNode`. |
| 622 | // The `CdkTreeNode` created from `createEmbeddedView` will be saved in static variable |
| 623 | // `mostRecentTreeNode`. We get it from static variable and pass the node data to it. |
| 624 | if (CdkTreeNode.mostRecentTreeNode) { |
| 625 | CdkTreeNode.mostRecentTreeNode.data = nodeData; |
| 626 | } |
| 627 | } |
| 628 | |
| 629 | /** Whether the data node is expanded or collapsed. Returns true if it's expanded. */ |
| 630 | isExpanded(dataNode: T): boolean { |
no test coverage detected