ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
135 lines • 16.8 kB
JavaScript
/**
* 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
*/
import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { CdkTree, CdkTreeNodeOutletContext } from '@angular/cdk/tree';
import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { NzTreeVirtualScrollNodeOutletDirective } from './node';
import { NzTreeNodeOutletDirective } from './outlet';
import { NzTreeView } from './tree';
import * as i0 from "@angular/core";
const DEFAULT_SIZE = 28;
export class NzTreeVirtualScrollViewComponent extends NzTreeView {
constructor() {
super(...arguments);
this.nzItemSize = DEFAULT_SIZE;
this.nzMinBufferPx = DEFAULT_SIZE * 5;
this.nzMaxBufferPx = DEFAULT_SIZE * 10;
this.nodes = [];
this.innerTrackBy = i => i;
}
ngOnChanges(changes) {
if (changes.trackBy) {
if (typeof changes.trackBy.currentValue === 'function') {
this.innerTrackBy = (index, n) => this.trackBy(index, n.data);
}
else {
this.innerTrackBy = i => i;
}
}
}
get compareBy() {
const baseTreeControl = this.treeControl;
if (baseTreeControl.trackBy) {
return baseTreeControl.trackBy;
}
return null;
}
renderNodeChanges(data) {
this.nodes = new Array(...data).map((n, i) => this.createNode(n, i));
this._dataSourceChanged.next();
this.changeDetectorRef.markForCheck();
}
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
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzTreeVirtualScrollViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: NzTreeVirtualScrollViewComponent, isStandalone: true, selector: "nz-tree-virtual-scroll-view", inputs: { nzItemSize: "nzItemSize", nzMinBufferPx: "nzMinBufferPx", nzMaxBufferPx: "nzMaxBufferPx", trackBy: "trackBy" }, host: { properties: { "class.ant-tree-block-node": "nzDirectoryTree || nzBlockNode", "class.ant-tree-directory": "nzDirectoryTree", "class.ant-tree-rtl": "dir === 'rtl'" }, classAttribute: "ant-tree" }, providers: [
{ provide: NzTreeView, useExisting: NzTreeVirtualScrollViewComponent },
{ provide: CdkTree, useExisting: NzTreeVirtualScrollViewComponent }
], viewQueries: [{ propertyName: "nodeOutlet", first: true, predicate: NzTreeNodeOutletDirective, descendants: true, static: true }, { propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, static: true }], exportAs: ["nzTreeVirtualScrollView"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
<div class="ant-tree-list">
<cdk-virtual-scroll-viewport
class="ant-tree-list-holder"
[itemSize]="nzItemSize"
[minBufferPx]="nzMinBufferPx"
[maxBufferPx]="nzMaxBufferPx"
>
<ng-container *cdkVirtualFor="let item of nodes; let i = index; trackBy: innerTrackBy">
<ng-template nzTreeVirtualScrollNodeOutlet [data]="item" [compareBy]="compareBy"></ng-template>
</ng-container>
</cdk-virtual-scroll-viewport>
</div>
<ng-container nzTreeNodeOutlet></ng-container>
`, isInline: true, dependencies: [{ kind: "directive", type: NzTreeVirtualScrollNodeOutletDirective, selector: "[nzTreeVirtualScrollNodeOutlet]", inputs: ["data", "compareBy"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NzTreeNodeOutletDirective, selector: "[nzTreeNodeOutlet]" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: 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]="nzItemSize"
[minBufferPx]="nzMinBufferPx"
[maxBufferPx]="nzMaxBufferPx"
>
<ng-container *cdkVirtualFor="let item of nodes; let i = index; trackBy: innerTrackBy">
<ng-template nzTreeVirtualScrollNodeOutlet [data]="item" [compareBy]="compareBy"></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'`
},
imports: [
NzTreeVirtualScrollNodeOutletDirective,
CdkVirtualForOf,
NzTreeNodeOutletDirective,
CdkVirtualScrollViewport,
CdkFixedSizeVirtualScroll
],
standalone: true
}]
}], propDecorators: { nodeOutlet: [{
type: ViewChild,
args: [NzTreeNodeOutletDirective, { static: true }]
}], virtualScrollViewport: [{
type: ViewChild,
args: [CdkVirtualScrollViewport, { static: true }]
}], nzItemSize: [{
type: Input
}], nzMinBufferPx: [{
type: Input
}], nzMaxBufferPx: [{
type: Input
}], trackBy: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlLXZpZXcvdHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQW1CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZGLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFJTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBeUIsc0NBQXNDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBRXBDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQXlDeEIsTUFBTSxPQUFPLGdDQUFvQyxTQUFRLFVBQWE7SUF2Q3RFOztRQTJDVyxlQUFVLEdBQUcsWUFBWSxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFM0MsVUFBSyxHQUFvQyxFQUFFLENBQUM7UUFDNUMsaUJBQVksR0FBOEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0F5Q2xFO0lBdkNDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FB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Zix5QkFBeUI7d0JBQ3pCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3FCQUMxQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBRWtFLFVBQVU7c0JBQTFFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNVLHFCQUFxQjtzQkFBcEYsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTVDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNZLE9BQU87c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQmFzZVRyZWVDb250cm9sLCBDZGtUcmVlLCBDZGtUcmVlTm9kZU91dGxldENvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IE56VHJlZVZpcnR1YWxOb2RlRGF0YSwgTnpUcmVlVmlydHVhbFNjcm9sbE5vZGVPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHsgTnpUcmVlTm9kZU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4vb3V0bGV0JztcbmltcG9ydCB7IE56VHJlZVZpZXcgfSBmcm9tICcuL3RyZWUnO1xuXG5jb25zdCBERUZBVUxUX1NJWkUgPSAyODtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnotdHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3JyxcbiAgZXhwb3J0QXM6ICduelRyZWVWaXJ0dWFsU2Nyb2xsVmlldycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFudC10cmVlLWxpc3RcIj5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgY2xhc3M9XCJhbnQtdHJlZS1saXN0LWhvbGRlclwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJuekl0ZW1TaXplXCJcbiAgICAgICAgW21pbkJ1ZmZlclB4XT1cIm56TWluQnVmZmVyUHhcIlxuICAgICAgICBbbWF4QnVmZmVyUHhdPVwibnpNYXhCdWZmZXJQeFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBub2RlczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogaW5uZXJUcmFja0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG56VHJlZVZpcnR1YWxTY3JvbGxOb2RlT3V0bGV0IFtkYXRhXT1cIml0ZW1cIiBbY29tcGFyZUJ5XT1cImNvbXBhcmVCeVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciBuelRyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOelRyZWVWaWV3LCB1c2VFeGlzdGluZzogTnpUcmVlVmlydHVhbFNjcm9sbFZpZXdDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IENka1RyZWUsIHVzZUV4aXN0aW5nOiBOelRyZWVWaXJ0dWFsU2Nyb2xsVmlld0NvbXBvbmVudCB9XG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC10cmVlJyxcbiAgICAnW2NsYXNzLmFudC10cmVlLWJsb2NrLW5vZGVdJzogJ256RGlyZWN0b3J5VHJlZSB8fCBuekJsb2NrTm9kZScsXG4gICAgJ1tjbGFzcy5hbnQtdHJlZS1kaXJlY3RvcnldJzogJ256RGlyZWN0b3J5VHJlZScsXG4gICAgJ1tjbGFzcy5hbnQtdHJlZS1ydGxdJzogYGRpciA9PT0gJ3J0bCdgXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBOelRyZWVWaXJ0dWFsU2Nyb2xsTm9kZU91dGxldERpcmVjdGl2ZSxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgTnpUcmVlTm9kZU91dGxldERpcmVjdGl2ZSxcbiAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE56VHJlZVZpcnR1YWxTY3JvbGxWaWV3Q29tcG9uZW50PFQ+IGV4dGVuZHMgTnpUcmVlVmlldzxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoTnpUcmVlTm9kZU91dGxldERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcmVhZG9ubHkgbm9kZU91dGxldCE6IE56VHJlZU5vZGVPdXRsZXREaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSByZWFkb25seSB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQElucHV0KCkgbnpJdGVtU2l6ZSA9IERFRkFVTFRfU0laRTtcbiAgQElucHV0KCkgbnpNaW5CdWZmZXJQeCA9IERFRkFVTFRfU0laRSAqIDU7XG4gIEBJbnB1dCgpIG56TWF4QnVmZmVyUHggPSBERUZBVUxUX1NJWkUgKiAxMDtcbiAgQElucHV0KCkgb3ZlcnJpZGUgdHJhY2tCeSE6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgbm9kZXM6IEFycmF5PE56VHJlZVZpcnR1YWxOb2RlRGF0YTxUPj4gPSBbXTtcbiAgaW5uZXJUcmFja0J5OiBUcmFja0J5RnVuY3Rpb248TnpUcmVlVmlydHVhbE5vZGVEYXRhPFQ+PiA9IGkgPT4gaTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudHJhY2tCeSkge1xuICAgICAgaWYgKHR5cGVvZiBjaGFuZ2VzLnRyYWNrQnkuY3VycmVudFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuaW5uZXJUcmFja0J5ID0gKGluZGV4OiBudW1iZXIsIG4pID0+IHRoaXMudHJhY2tCeShpbmRleCwgbi5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5uZXJUcmFja0J5ID0gaSA9PiBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjb21wYXJlQnkoKTogKCh2YWx1ZTogVCkgPT4gTnpTYWZlQW55KSB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VUcmVlQ29udHJvbCA9IHRoaXMudHJlZUNvbnRyb2wgYXMgQmFzZVRyZWVDb250cm9sPFQsIE56U2FmZUFueT47XG4gICAgaWYgKGJhc2VUcmVlQ29udHJvbC50cmFja0J5KSB7XG4gICAgICByZXR1cm4gYmFzZVRyZWVDb250cm9sLnRyYWNrQnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXJOb2RlQ2hhbmdlcyhkYXRhOiBUW10gfCByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVzID0gbmV3IEFycmF5KC4uLmRhdGEpLm1hcCgobiwgaSkgPT4gdGhpcy5jcmVhdGVOb2RlKG4sIGkpKTtcbiAgICB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZC5uZXh0KCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTm9kZShub2RlRGF0YTogVCwgaW5kZXg6IG51bWJlcik6IE56VHJlZVZpcnR1YWxOb2RlRGF0YTxUPiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuX2dldE5vZGVEZWYobm9kZURhdGEsIGluZGV4KTtcbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IENka1RyZWVOb2RlT3V0bGV0Q29udGV4dDxUPihub2RlRGF0YSk7XG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZ2V0TGV2ZWwpIHtcbiAgICAgIGNvbnRleHQubGV2ZWwgPSB0aGlzLnRyZWVDb250cm9sLmdldExldmVsKG5vZGVEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5sZXZlbCA9IDA7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBub2RlRGF0YSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBub2RlRGVmOiBub2RlXG4gICAgfTtcbiAgfVxufVxuIl19