ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
78 lines • 9.3 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 { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { CdkTree, CdkTreeNodeOutletContext } from '@angular/cdk/tree';
import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { NzTreeNodeOutletDirective } from './outlet';
import { NzTreeView } from './tree';
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 = [];
}
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
};
}
}
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">
<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 },] }],
nzItemSize: [{ type: Input }],
nzMinBufferPx: [{ type: Input }],
nzMaxBufferPx: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlLXZpZXcvdHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBaUN4QixNQUFNLE9BQU8sZ0NBQW9DLFNBQVEsVUFBYTtJQS9CdEU7O1FBbUNXLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUUzQyxVQUFLLEdBQW9DLEVBQUUsQ0FBQztJQW9COUMsQ0FBQztJQWxCQyxpQkFBaUIsQ0FBQyxJQUF3QjtRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQVcsRUFBRSxLQUFhO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQXdCLENBQUksUUFBUSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU87WUFDUCxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDOzs7WUExREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLFNBQVMsRUFBRTtvQkFDVCxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdDQUFnQyxFQUFFO29CQUN0RSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdDQUFnQyxFQUFFO2lCQUNwRTtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLDZCQUE2QixFQUFFLGdDQUFnQztvQkFDL0QsNEJBQTRCLEVBQUUsaUJBQWlCO29CQUMvQyxzQkFBc0IsRUFBRSxlQUFlO2lCQUN4QzthQUNGOzs7eUJBRUUsU0FBUyxTQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtvQ0FDckQsU0FBUyxTQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt5QkFFcEQsS0FBSzs0QkFDTCxLQUFLOzRCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENka1RyZWUsIENka1RyZWVOb2RlT3V0bGV0Q29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE56VHJlZVZpcnR1YWxOb2RlRGF0YSB9IGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgeyBOelRyZWVOb2RlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi9vdXRsZXQnO1xuaW1wb3J0IHsgTnpUcmVlVmlldyB9IGZyb20gJy4vdHJlZSc7XG5cbmNvbnN0IERFRkFVTFRfU0laRSA9IDI4O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei10cmVlLXZpcnR1YWwtc2Nyb2xsLXZpZXcnLFxuICBleHBvcnRBczogJ256VHJlZVZpcnR1YWxTY3JvbGxWaWV3JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYW50LXRyZWUtbGlzdFwiPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBjbGFzcz1cImFudC10cmVlLWxpc3QtaG9sZGVyXCJcbiAgICAgICAgW2l0ZW1TaXplXT1cIm56SXRlbVNpemVcIlxuICAgICAgICBbbWluQnVmZmVyUHhdPVwibnpNaW5CdWZmZXJQeFwiXG4gICAgICAgIFttYXhCdWZmZXJQeF09XCJuek1heEJ1ZmZlclB4XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG5vZGVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG56VHJlZVZpcnR1YWxTY3JvbGxOb2RlT3V0bGV0IFtkYXRhXT1cIml0ZW1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgbnpUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTnpUcmVlVmlldywgdXNlRXhpc3Rpbmc6IE56VHJlZVZpcnR1YWxTY3JvbGxWaWV3Q29tcG9uZW50IH0sXG4gICAgeyBwcm92aWRlOiBDZGtUcmVlLCB1c2VFeGlzdGluZzogTnpUcmVlVmlydHVhbFNjcm9sbFZpZXdDb21wb25lbnQgfVxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdhbnQtdHJlZScsXG4gICAgJ1tjbGFzcy5hbnQtdHJlZS1ibG9jay1ub2RlXSc6ICduekRpcmVjdG9yeVRyZWUgfHwgbnpCbG9ja05vZGUnLFxuICAgICdbY2xhc3MuYW50LXRyZWUtZGlyZWN0b3J5XSc6ICduekRpcmVjdG9yeVRyZWUnLFxuICAgICdbY2xhc3MuYW50LXRyZWUtcnRsXSc6IGBkaXIgPT09ICdydGwnYFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIE56VHJlZVZpcnR1YWxTY3JvbGxWaWV3Q29tcG9uZW50PFQ+IGV4dGVuZHMgTnpUcmVlVmlldzxUPiB7XG4gIEBWaWV3Q2hpbGQoTnpUcmVlTm9kZU91dGxldERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcmVhZG9ubHkgbm9kZU91dGxldCE6IE56VHJlZU5vZGVPdXRsZXREaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSByZWFkb25seSB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQhOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQElucHV0KCkgbnpJdGVtU2l6ZSA9IERFRkFVTFRfU0laRTtcbiAgQElucHV0KCkgbnpNaW5CdWZmZXJQeCA9IERFRkFVTFRfU0laRSAqIDU7XG4gIEBJbnB1dCgpIG56TWF4QnVmZmVyUHggPSBERUZBVUxUX1NJWkUgKiAxMDtcblxuICBub2RlczogQXJyYXk8TnpUcmVlVmlydHVhbE5vZGVEYXRhPFQ+PiA9IFtdO1xuXG4gIHJlbmRlck5vZGVDaGFuZ2VzKGRhdGE6IFRbXSB8IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIHRoaXMubm9kZXMgPSBuZXcgQXJyYXkoLi4uZGF0YSkubWFwKChuLCBpKSA9PiB0aGlzLmNyZWF0ZU5vZGUobiwgaSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOb2RlKG5vZGVEYXRhOiBULCBpbmRleDogbnVtYmVyKTogTnpUcmVlVmlydHVhbE5vZGVEYXRhPFQ+IHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5fZ2V0Tm9kZURlZihub2RlRGF0YSwgaW5kZXgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQ2RrVHJlZU5vZGVPdXRsZXRDb250ZXh0PFQ+KG5vZGVEYXRhKTtcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5nZXRMZXZlbCkge1xuICAgICAgY29udGV4dC5sZXZlbCA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0TGV2ZWwobm9kZURhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmxldmVsID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG5vZGVEYXRhLFxuICAgICAgY29udGV4dCxcbiAgICAgIG5vZGVEZWY6IG5vZGVcbiAgICB9O1xuICB9XG59XG4iXX0=