ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
913 lines (896 loc) • 32.9 kB
JavaScript
import { Directionality, BidiModule } from '@angular/cdk/bidi';
import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
import { CommonModule } from '@angular/common';
import { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, IterableDiffers, ChangeDetectorRef, Host, Optional, ElementRef, Renderer2, Directive, ViewContainerRef, Inject, ViewEncapsulation, ViewChild, NgModule } from '@angular/core';
import { NzNoAnimationDirective, NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation';
import { __decorate, __metadata } from 'tslib';
import { InputBoolean } from 'ng-zorro-antd/core/util';
import { Subject, animationFrameScheduler, asapScheduler, merge, BehaviorSubject } from 'rxjs';
import { takeUntil, auditTime, take, map } from 'rxjs/operators';
import { CdkTree, CdkTreeNode, CdkTreeNodeDef, CdkTreeNodeOutlet, CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTreeNodeOutletContext } from '@angular/cdk/tree';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { treeCollapseMotion } from 'ng-zorro-antd/core/animation';
import { warnDeprecation } from 'ng-zorro-antd/core/logger';
import { DataSource } from '@angular/cdk/collections';
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodeCheckboxComponent {
constructor() {
this.nzClick = new EventEmitter();
}
onClick(e) {
if (!this.nzDisabled) {
this.nzClick.emit(e);
}
}
}
NzTreeNodeCheckboxComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-node-checkbox:not([builtin])',
template: `
<span class="ant-tree-checkbox-inner"></span>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
host: {
class: 'ant-tree-checkbox',
'[class.ant-tree-checkbox-checked]': `nzChecked`,
'[class.ant-tree-checkbox-indeterminate]': `nzIndeterminate`,
'[class.ant-tree-checkbox-disabled]': `nzDisabled`,
'(click)': 'onClick($event)'
}
},] }
];
NzTreeNodeCheckboxComponent.propDecorators = {
nzChecked: [{ type: Input }],
nzIndeterminate: [{ type: Input }],
nzDisabled: [{ type: Input }],
nzClick: [{ type: Output }]
};
__decorate([
InputBoolean(),
__metadata("design:type", Boolean)
], NzTreeNodeCheckboxComponent.prototype, "nzDisabled", void 0);
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
// tslint:disable-next-line: component-class-suffix
class NzTreeView extends CdkTree {
constructor(differs, changeDetectorRef, noAnimation, directionality) {
super(differs, changeDetectorRef);
this.differs = differs;
this.changeDetectorRef = changeDetectorRef;
this.noAnimation = noAnimation;
this.directionality = directionality;
this.destroy$ = new Subject();
this.dir = 'ltr';
this._dataSourceChanged = new Subject();
this.nzDirectoryTree = false;
this.nzBlockNode = false;
}
get dataSource() {
return super.dataSource;
}
set dataSource(dataSource) {
super.dataSource = dataSource;
}
ngOnInit() {
var _a;
super.ngOnInit();
if (this.directionality) {
this.dir = this.directionality.value;
(_a = this.directionality.change) === null || _a === void 0 ? void 0 : _a.pipe(takeUntil(this.destroy$)).subscribe((direction) => {
this.dir = direction;
this.changeDetectorRef.detectChanges();
});
}
}
ngOnDestroy() {
super.ngOnDestroy();
this.destroy$.next();
this.destroy$.complete();
}
renderNodeChanges(data, dataDiffer, viewContainer, parentData) {
super.renderNodeChanges(data, dataDiffer, viewContainer, parentData);
this._dataSourceChanged.next();
}
}
NzTreeView.decorators = [
{ type: Component, args: [{ template: '' },] }
];
NzTreeView.ctorParameters = () => [
{ type: IterableDiffers },
{ type: ChangeDetectorRef },
{ type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] },
{ type: Directionality, decorators: [{ type: Optional }] }
];
NzTreeView.propDecorators = {
treeControl: [{ type: Input, args: ['nzTreeControl',] }],
dataSource: [{ type: Input, args: ['nzDataSource',] }],
nzDirectoryTree: [{ type: Input }],
nzBlockNode: [{ type: Input }]
};
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTreeView.prototype, "nzDirectoryTree", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTreeView.prototype, "nzBlockNode", void 0);
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodeComponent extends CdkTreeNode {
constructor(elementRef, tree, renderer, cdr) {
super(elementRef, tree);
this.elementRef = elementRef;
this.tree = tree;
this.renderer = renderer;
this.cdr = cdr;
this.indents = [];
this.disabled = false;
this.selected = false;
this.isLeaf = false;
this._elementRef.nativeElement.classList.add('ant-tree-treenode');
}
ngOnInit() {
this.isLeaf = !this.tree.treeControl.isExpandable(this.data);
}
disable() {
this.disabled = true;
this.updateDisabledClass();
}
enable() {
this.disabled = false;
this.updateDisabledClass();
}
select() {
this.selected = true;
this.updateSelectedClass();
}
deselect() {
this.selected = false;
this.updateSelectedClass();
}
setIndents(indents) {
this.indents = indents;
this.cdr.markForCheck();
}
updateSelectedClass() {
if (this.selected) {
this.renderer.addClass(this.elementRef.nativeElement, 'ant-tree-treenode-selected');
}
else {
this.renderer.removeClass(this.elementRef.nativeElement, 'ant-tree-treenode-selected');
}
}
updateDisabledClass() {
if (this.disabled) {
this.renderer.addClass(this.elementRef.nativeElement, 'ant-tree-treenode-disabled');
}
else {
this.renderer.removeClass(this.elementRef.nativeElement, 'ant-tree-treenode-disabled');
}
}
}
NzTreeNodeComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-node:not([builtin])',
exportAs: 'nzTreeNode',
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [{ provide: CdkTreeNode, useExisting: NzTreeNodeComponent }],
template: `
<nz-tree-node-indents [indents]="indents" *ngIf="indents.length"></nz-tree-node-indents>
<ng-content select="nz-tree-node-toggle, [nz-tree-node-toggle]"></ng-content>
<nz-tree-node-toggle class="nz-tree-leaf-line-icon" *ngIf="indents.length && isLeaf" nzTreeNodeNoopToggle>
<span class="ant-tree-switcher-leaf-line"></span>
</nz-tree-node-toggle>
<ng-content select="nz-tree-node-checkbox"></ng-content>
<ng-content select="nz-tree-node-option"></ng-content>
<ng-content></ng-content>
`,
host: {
'[class.ant-tree-treenode-switcher-open]': 'isExpanded',
'[class.ant-tree-treenode-switcher-close]': '!isExpanded'
}
},] }
];
NzTreeNodeComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: NzTreeView },
{ type: Renderer2 },
{ type: ChangeDetectorRef }
];
class NzTreeNodeDefDirective extends CdkTreeNodeDef {
}
NzTreeNodeDefDirective.decorators = [
{ type: Directive, args: [{
selector: '[nzTreeNodeDef]',
providers: [{ provide: CdkTreeNodeDef, useExisting: NzTreeNodeDefDirective }]
},] }
];
NzTreeNodeDefDirective.propDecorators = {
when: [{ type: Input, args: ['nzTreeNodeDefWhen',] }]
};
class NzTreeVirtualScrollNodeOutletDirective {
constructor(_viewContainerRef) {
this._viewContainerRef = _viewContainerRef;
this._viewRef = null;
}
ngOnChanges(changes) {
const recreateView = this.shouldRecreateView(changes);
if (recreateView) {
const viewContainerRef = this._viewContainerRef;
if (this._viewRef) {
viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
}
this._viewRef = this.data ? viewContainerRef.createEmbeddedView(this.data.nodeDef.template, this.data.context) : null;
if (CdkTreeNode.mostRecentTreeNode && this._viewRef) {
CdkTreeNode.mostRecentTreeNode.data = this.data.data;
}
}
else if (this._viewRef && this.data.context) {
this.updateExistingContext(this.data.context);
}
}
shouldRecreateView(changes) {
const ctxChange = changes.data;
return !!changes.data || (ctxChange && this.hasContextShapeChanged(ctxChange));
}
hasContextShapeChanged(ctxChange) {
const prevCtxKeys = Object.keys(ctxChange.previousValue || {});
const currCtxKeys = Object.keys(ctxChange.currentValue || {});
if (prevCtxKeys.length === currCtxKeys.length) {
for (const propName of currCtxKeys) {
if (prevCtxKeys.indexOf(propName) === -1) {
return true;
}
}
return false;
}
return true;
}
updateExistingContext(ctx) {
for (const propName of Object.keys(ctx)) {
this._viewRef.context[propName] = this.data.context[propName];
}
}
}
NzTreeVirtualScrollNodeOutletDirective.decorators = [
{ type: Directive, args: [{
selector: '[nzTreeVirtualScrollNodeOutlet]'
},] }
];
NzTreeVirtualScrollNodeOutletDirective.ctorParameters = () => [
{ type: ViewContainerRef }
];
NzTreeVirtualScrollNodeOutletDirective.propDecorators = {
data: [{ type: Input }]
};
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
function getParent(nodes, node, getLevel) {
let index = nodes.indexOf(node);
if (index < 0) {
return null;
}
const level = getLevel(node);
for (index--; index >= 0; index--) {
const preLevel = getLevel(nodes[index]);
if (preLevel + 1 === level) {
return nodes[index];
}
if (preLevel + 1 < level) {
return null;
}
}
return null;
}
function getNextSibling(nodes, node, getLevel, _index) {
let index = typeof _index !== 'undefined' ? _index : nodes.indexOf(node);
if (index < 0) {
return null;
}
const level = getLevel(node);
for (index++; index < nodes.length; index++) {
const nextLevel = getLevel(nodes[index]);
if (nextLevel < level) {
return null;
}
if (nextLevel === level) {
return nodes[index];
}
}
return null;
}
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
/**
* [true, false, false, true] => 1001
*/
function booleanArrayToString(arr) {
return arr.map(i => (i ? 1 : 0)).join('');
}
const BUILD_INDENTS_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;
class NzTreeNodeIndentsComponent {
constructor() {
this.indents = [];
}
}
NzTreeNodeIndentsComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-node-indents',
template: `
<span class="ant-tree-indent-unit" [class.ant-tree-indent-unit-end]="!isEnd" *ngFor="let isEnd of indents"></span>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
host: {
class: 'ant-tree-indent'
}
},] }
];
NzTreeNodeIndentsComponent.propDecorators = {
indents: [{ type: Input }]
};
class NzTreeNodeIndentLineDirective {
constructor(treeNode, tree) {
this.treeNode = treeNode;
this.tree = tree;
this.isLast = 'unset';
this.isLeaf = false;
this.preNodeRef = null;
this.nextNodeRef = null;
this.currentIndents = '';
this.buildIndents();
this.checkLast();
/**
* The dependent data (TreeControl.dataNodes) can be set after node instantiation,
* and setting the indents can cause frame rate loss if it is set too often.
*/
this.changeSubscription = merge(this.treeNode._dataChanges, tree._dataSourceChanged)
.pipe(auditTime(0, BUILD_INDENTS_SCHEDULER))
.subscribe(() => {
this.buildIndents();
this.checkAdjacent();
});
}
getIndents() {
const indents = [];
const nodes = this.tree.treeControl.dataNodes;
const getLevel = this.tree.treeControl.getLevel;
let parent = getParent(nodes, this.treeNode.data, getLevel);
while (parent) {
const parentNextSibling = getNextSibling(nodes, parent, getLevel);
if (parentNextSibling) {
indents.unshift(true);
}
else {
indents.unshift(false);
}
parent = getParent(nodes, parent, getLevel);
}
return indents;
}
buildIndents() {
if (this.treeNode.data) {
const indents = this.getIndents();
const diffString = booleanArrayToString(indents);
if (diffString !== this.currentIndents) {
this.treeNode.setIndents(this.getIndents());
this.currentIndents = diffString;
}
}
}
/**
* We need to add an class name for the last child node,
* this result can also be affected when the adjacent nodes are changed.
*/
checkAdjacent() {
const nodes = this.tree.treeControl.dataNodes;
const index = nodes.indexOf(this.treeNode.data);
const preNode = nodes[index - 1] || null;
const nextNode = nodes[index + 1] || null;
if (this.nextNodeRef !== nextNode || this.preNodeRef !== preNode) {
this.checkLast(index);
}
this.preNodeRef = preNode;
this.nextNodeRef = nextNode;
}
checkLast(index) {
const nodes = this.tree.treeControl.dataNodes;
this.isLeaf = this.treeNode.isLeaf;
this.isLast = !getNextSibling(nodes, this.treeNode.data, this.tree.treeControl.getLevel, index);
}
ngOnDestroy() {
this.preNodeRef = null;
this.nextNodeRef = null;
this.changeSubscription.unsubscribe();
}
}
NzTreeNodeIndentLineDirective.decorators = [
{ type: Directive, args: [{
selector: 'nz-tree-node[nzTreeNodeIndentLine]',
host: {
class: 'ant-tree-show-line',
'[class.ant-tree-treenode-leaf-last]': 'isLast && isLeaf'
}
},] }
];
NzTreeNodeIndentLineDirective.ctorParameters = () => [
{ type: NzTreeNodeComponent },
{ type: NzTreeView }
];
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodeOptionComponent {
constructor(treeNode) {
this.treeNode = treeNode;
this.nzSelected = false;
this.nzDisabled = false;
this.nzClick = new EventEmitter();
}
get isExpanded() {
return this.treeNode.isExpanded;
}
onClick(e) {
if (!this.nzDisabled) {
this.nzClick.emit(e);
}
}
ngOnChanges(changes) {
const { nzDisabled, nzSelected } = changes;
if (nzDisabled) {
if (nzDisabled.currentValue) {
this.treeNode.disable();
}
else {
this.treeNode.enable();
}
}
if (nzSelected) {
if (nzSelected.currentValue) {
this.treeNode.select();
}
else {
this.treeNode.deselect();
}
}
}
}
NzTreeNodeOptionComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-node-option',
template: `
<span class="ant-tree-title"><ng-content></ng-content></span>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
host: {
class: 'ant-tree-node-content-wrapper',
'[class.ant-tree-node-content-wrapper-open]': 'isExpanded',
'[class.ant-tree-node-selected]': 'nzSelected',
'(click)': 'onClick($event)'
}
},] }
];
NzTreeNodeOptionComponent.ctorParameters = () => [
{ type: NzTreeNodeComponent }
];
NzTreeNodeOptionComponent.propDecorators = {
nzSelected: [{ type: Input }],
nzDisabled: [{ type: Input }],
nzClick: [{ type: Output }]
};
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTreeNodeOptionComponent.prototype, "nzSelected", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTreeNodeOptionComponent.prototype, "nzDisabled", void 0);
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodeOutletDirective {
constructor(viewContainer, _node) {
this.viewContainer = viewContainer;
this._node = _node;
}
}
NzTreeNodeOutletDirective.decorators = [
{ type: Directive, args: [{
selector: '[nzTreeNodeOutlet]',
providers: [
{
provide: CdkTreeNodeOutlet,
useExisting: NzTreeNodeOutletDirective
}
]
},] }
];
NzTreeNodeOutletDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: undefined, decorators: [{ type: Inject, args: [CDK_TREE_NODE_OUTLET_NODE,] }, { type: Optional }] }
];
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodePaddingDirective extends CdkTreeNodePadding {
constructor() {
super(...arguments);
this._indent = 24;
}
get level() {
return this._level;
}
set level(value) {
this._setLevelInput(value);
}
get indent() {
return this._indent;
}
set indent(indent) {
this._setIndentInput(indent);
}
}
NzTreeNodePaddingDirective.decorators = [
{ type: Directive, args: [{
selector: '[nzTreeNodePadding]',
providers: [{ provide: CdkTreeNodePadding, useExisting: NzTreeNodePaddingDirective }]
},] }
];
NzTreeNodePaddingDirective.propDecorators = {
level: [{ type: Input, args: ['nzTreeNodePadding',] }],
indent: [{ type: Input, args: ['nzTreeNodePaddingIndent',] }]
};
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeNodeNoopToggleDirective {
}
NzTreeNodeNoopToggleDirective.decorators = [
{ type: Directive, args: [{
selector: 'nz-tree-node-toggle[nzTreeNodeNoopToggle], [nzTreeNodeNoopToggle]',
host: {
class: 'ant-tree-switcher ant-tree-switcher-noop'
}
},] }
];
class NzTreeNodeToggleDirective extends CdkTreeNodeToggle {
get recursive() {
return this._recursive;
}
set recursive(value) {
this._recursive = coerceBooleanProperty(value);
}
get isExpanded() {
return this._treeNode.isExpanded;
}
}
NzTreeNodeToggleDirective.decorators = [
{ type: Directive, args: [{
selector: 'nz-tree-node-toggle:not([nzTreeNodeNoopToggle]), [nzTreeNodeToggle]',
providers: [{ provide: CdkTreeNodeToggle, useExisting: NzTreeNodeToggleDirective }],
host: {
class: 'ant-tree-switcher',
'[class.ant-tree-switcher_open]': 'isExpanded',
'[class.ant-tree-switcher_close]': '!isExpanded'
}
},] }
];
NzTreeNodeToggleDirective.propDecorators = {
recursive: [{ type: Input, args: ['nzTreeNodeToggleRecursive',] }]
};
class NzTreeNodeToggleRotateIconDirective {
}
NzTreeNodeToggleRotateIconDirective.decorators = [
{ type: Directive, args: [{
selector: '[nz-icon][nzTreeNodeToggleRotateIcon]',
host: {
class: 'ant-tree-switcher-icon'
}
},] }
];
class NzTreeNodeToggleActiveIconDirective {
}
NzTreeNodeToggleActiveIconDirective.decorators = [
{ type: Directive, args: [{
selector: '[nz-icon][nzTreeNodeToggleActiveIcon]',
host: {
class: 'ant-tree-switcher-loading-icon'
}
},] }
];
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeViewComponent extends NzTreeView {
constructor() {
super(...arguments);
this._afterViewInit = false;
}
ngAfterViewInit() {
Promise.resolve().then(() => {
this._afterViewInit = true;
this.changeDetectorRef.markForCheck();
});
}
}
NzTreeViewComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-view',
exportAs: 'nzTreeView',
template: `
<div class="ant-tree-list-holder">
<div
[@.disabled]="!_afterViewInit || noAnimation?.nzNoAnimation"
[ ]="_nodeOutlet.viewContainer.length"
class="ant-tree-list-holder-inner"
>
<ng-container nzTreeNodeOutlet></ng-container>
</div>
</div>
`,
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{ provide: CdkTree, useExisting: NzTreeViewComponent },
{ provide: NzTreeView, useExisting: NzTreeViewComponent }
],
host: {
class: 'ant-tree',
'[class.ant-tree-block-node]': 'nzDirectoryTree || nzBlockNode',
'[class.ant-tree-directory]': 'nzDirectoryTree',
'[class.ant-tree-rtl]': `dir === 'rtl'`
},
animations: [treeCollapseMotion]
},] }
];
NzTreeViewComponent.propDecorators = {
nodeOutlet: [{ type: ViewChild, args: [NzTreeNodeOutletDirective, { static: true },] }]
};
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
const DEFAULT_SIZE = 28;
class NzTreeVirtualScrollViewComponent extends NzTreeView {
constructor() {
super(...arguments);
this.itemSize = DEFAULT_SIZE;
/**
* @deprecated use `nzItemSize` instead
* @breaking-change 12.0.0
*/
this.nzNodeWidth = DEFAULT_SIZE;
this.nzItemSize = DEFAULT_SIZE;
this.nzMinBufferPx = DEFAULT_SIZE * 5;
this.nzMaxBufferPx = DEFAULT_SIZE * 10;
this.nodes = [];
}
renderNodeChanges(data) {
this.nodes = new Array(...data).map((n, i) => this.createNode(n, i));
}
createNode(nodeData, index) {
const node = this._getNodeDef(nodeData, index);
const context = new CdkTreeNodeOutletContext(nodeData);
if (this.treeControl.getLevel) {
context.level = this.treeControl.getLevel(nodeData);
}
else {
context.level = 0;
}
return {
data: nodeData,
context,
nodeDef: node
};
}
ngOnChanges(changes) {
const { nzNodeWidth, nzItemSize } = changes;
if (nzNodeWidth) {
warnDeprecation('`nzNodeWidth` in nz-tree-virtual-scroll-view will be removed in 12.0.0, please use `nzItemSize` instead.');
this.itemSize = nzNodeWidth.currentValue;
}
if (nzItemSize) {
this.itemSize = nzItemSize.currentValue;
}
}
}
NzTreeVirtualScrollViewComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-virtual-scroll-view',
exportAs: 'nzTreeVirtualScrollView',
template: `
<div class="ant-tree-list">
<cdk-virtual-scroll-viewport
class="ant-tree-list-holder"
[itemSize]="itemSize"
[minBufferPx]="nzMinBufferPx"
[maxBufferPx]="nzMaxBufferPx"
>
<ng-container *cdkVirtualFor="let item of nodes; let i = index">
<ng-template nzTreeVirtualScrollNodeOutlet [data]="item"></ng-template>
</ng-container>
</cdk-virtual-scroll-viewport>
</div>
<ng-container nzTreeNodeOutlet></ng-container>
`,
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{ provide: NzTreeView, useExisting: NzTreeVirtualScrollViewComponent },
{ provide: CdkTree, useExisting: NzTreeVirtualScrollViewComponent }
],
host: {
class: 'ant-tree',
'[class.ant-tree-block-node]': 'nzDirectoryTree || nzBlockNode',
'[class.ant-tree-directory]': 'nzDirectoryTree',
'[class.ant-tree-rtl]': `dir === 'rtl'`
}
},] }
];
NzTreeVirtualScrollViewComponent.propDecorators = {
nodeOutlet: [{ type: ViewChild, args: [NzTreeNodeOutletDirective, { static: true },] }],
virtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport, { static: true },] }],
nzNodeWidth: [{ type: Input }],
nzItemSize: [{ type: Input }],
nzMinBufferPx: [{ type: Input }],
nzMaxBufferPx: [{ type: Input }]
};
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
const treeWithControlComponents = [
NzTreeView,
NzTreeNodeOutletDirective,
NzTreeViewComponent,
NzTreeNodeDefDirective,
NzTreeNodeComponent,
NzTreeNodeToggleDirective,
NzTreeNodePaddingDirective,
NzTreeNodeToggleRotateIconDirective,
NzTreeNodeToggleActiveIconDirective,
NzTreeNodeOptionComponent,
NzTreeNodeNoopToggleDirective,
NzTreeNodeCheckboxComponent,
NzTreeNodeIndentsComponent,
NzTreeVirtualScrollViewComponent,
NzTreeVirtualScrollNodeOutletDirective,
NzTreeNodeIndentLineDirective
];
class NzTreeViewModule {
}
NzTreeViewModule.decorators = [
{ type: NgModule, args: [{
imports: [BidiModule, CommonModule, NzNoAnimationModule, ScrollingModule],
declarations: [treeWithControlComponents],
exports: [treeWithControlComponents]
},] }
];
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzTreeFlattener {
constructor(transformFunction, getLevel, isExpandable, getChildren) {
this.transformFunction = transformFunction;
this.getLevel = getLevel;
this.isExpandable = isExpandable;
this.getChildren = getChildren;
}
flattenNode(node, level, resultNodes, parentMap) {
const flatNode = this.transformFunction(node, level);
resultNodes.push(flatNode);
if (this.isExpandable(flatNode)) {
const childrenNodes = this.getChildren(node);
if (childrenNodes) {
if (Array.isArray(childrenNodes)) {
this.flattenChildren(childrenNodes, level, resultNodes, parentMap);
}
else {
childrenNodes.pipe(take(1)).subscribe(children => {
this.flattenChildren(children, level, resultNodes, parentMap);
});
}
}
}
return resultNodes;
}
flattenChildren(children, level, resultNodes, parentMap) {
children.forEach((child, index) => {
const childParentMap = parentMap.slice();
childParentMap.push(index !== children.length - 1);
this.flattenNode(child, level + 1, resultNodes, childParentMap);
});
}
/**
* Flatten a list of node type T to flattened version of node F.
* Please note that type T may be nested, and the length of `structuredData` may be different
* from that of returned list `F[]`.
*/
flattenNodes(structuredData) {
const resultNodes = [];
structuredData.forEach(node => this.flattenNode(node, 0, resultNodes, []));
return resultNodes;
}
/**
* Expand flattened node with current expansion status.
* The returned list may have different length.
*/
expandFlattenedNodes(nodes, treeControl) {
const results = [];
const currentExpand = [];
currentExpand[0] = true;
nodes.forEach(node => {
let expand = true;
for (let i = 0; i <= this.getLevel(node); i++) {
expand = expand && currentExpand[i];
}
if (expand) {
results.push(node);
}
if (this.isExpandable(node)) {
currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);
}
});
return results;
}
}
class NzTreeFlatDataSource extends DataSource {
constructor(_treeControl, _treeFlattener, initialData = []) {
super();
this._treeControl = _treeControl;
this._treeFlattener = _treeFlattener;
this._flattenedData = new BehaviorSubject([]);
this._expandedData = new BehaviorSubject([]);
this._data = new BehaviorSubject(initialData);
this.flatNodes();
}
setData(value) {
this._data.next(value);
this.flatNodes();
}
getData() {
return this._data.getValue();
}
connect(collectionViewer) {
const changes = [collectionViewer.viewChange, this._treeControl.expansionModel.changed, this._flattenedData];
return merge(...changes).pipe(map(() => {
this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));
return this._expandedData.value;
}));
}
disconnect() {
// no op
}
flatNodes() {
this._flattenedData.next(this._treeFlattener.flattenNodes(this.getData()));
this._treeControl.dataNodes = this._flattenedData.value;
}
}
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
/**
* Generated bundle index. Do not edit.
*/
export { NzTreeFlatDataSource, NzTreeFlattener, NzTreeNodeCheckboxComponent, NzTreeNodeComponent, NzTreeNodeDefDirective, NzTreeNodeIndentLineDirective, NzTreeNodeIndentsComponent, NzTreeNodeNoopToggleDirective, NzTreeNodeOptionComponent, NzTreeNodeOutletDirective, NzTreeNodePaddingDirective, NzTreeNodeToggleActiveIconDirective, NzTreeNodeToggleDirective, NzTreeNodeToggleRotateIconDirective, NzTreeViewComponent, NzTreeViewModule, NzTreeVirtualScrollNodeOutletDirective, NzTreeVirtualScrollViewComponent, getNextSibling, getParent, NzTreeView as ɵa };
//# sourceMappingURL=ng-zorro-antd-tree-view.js.map