systelab-components
Version:
systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.
65 lines • 8.05 kB
JavaScript
import { Directive, EventEmitter, Input, Output } from '@angular/core';
import { NestedTreeControl } from '@angular/cdk/tree';
import { ArrayDataSource } from '@angular/cdk/collections';
import * as i0 from "@angular/core";
export class AbstractTree {
get tree() {
return this._tree;
}
set tree(newTree) {
this._tree = newTree;
this.dataSource = new ArrayDataSource(this._processData(this._tree, null));
}
constructor() {
this.nodeSelected = new EventEmitter();
this.defaultExpandedIcon = 'icon-angle-down';
this.defaultCollapsedIcon = 'icon-angle-right';
this._tree = [];
this.dataSource = new ArrayDataSource(this._tree);
this.treeControl = new NestedTreeControl(node => node.children);
this.hasChild = (_, node) => !!node.children?.length;
this.treeControl.isExpanded = (node) => node.expanded;
this.treeControl.toggle = (node) => {
node.expanded = !node.expanded;
};
}
ngOnInit() {
if (this._tree) {
this.dataSource = new ArrayDataSource(this._processData(this._tree, null));
}
}
doClick(node) {
if (node.selectable !== false) {
if (this.selectedNode) {
this.selectedNode.isNodeSelected = false;
}
this.selectedNode = node;
node.isNodeSelected = !node.isNodeSelected;
this.nodeSelected.emit(node);
}
}
_processData(data, parent = null) {
data.forEach(item => {
if (parent !== null) {
item.parent = parent;
}
else {
item.parent = null;
}
if (item.children?.length) {
this._processData(item.children, item);
}
});
return data;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractTree, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AbstractTree, inputs: { tree: "tree" }, outputs: { nodeSelected: "nodeSelected" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractTree, decorators: [{
type: Directive
}], ctorParameters: () => [], propDecorators: { nodeSelected: [{
type: Output
}], tree: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi1jb21wb25lbnRzL3NyYy9saWIvdHJlZS9hYnN0cmFjdC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFJM0QsTUFBTSxPQUFnQixZQUFZO0lBY2pDLElBQ1csSUFBSTtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBVyxJQUFJLENBQUMsT0FBd0I7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7UUF0QmlCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUV0RCx3QkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN4Qyx5QkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztRQUUxQyxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsZ0JBQVcsR0FBRyxJQUFJLGlCQUFpQixDQUFXLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBMkJyRSxhQUFRLEdBQUcsQ0FBQyxDQUFTLEVBQUUsSUFBYyxFQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFaakYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDM0U7SUFDRixDQUFDO0lBSU0sT0FBTyxDQUFDLElBQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO0lBQ0YsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLElBQUk7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7OEdBOURvQixZQUFZO2tHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBRGpDLFNBQVM7d0RBR1EsWUFBWTtzQkFBNUIsTUFBTTtnQkFhSSxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZXN0ZWRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEFycmF5RGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS1ub2RlJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUcmVlIGltcGxlbWVudHMgT25Jbml0IHtcblxuXHRAT3V0cHV0KCkgcHVibGljIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGU+KCk7XG5cblx0cHVibGljIGRlZmF1bHRFeHBhbmRlZEljb24gPSAnaWNvbi1hbmdsZS1kb3duJztcblx0cHVibGljIGRlZmF1bHRDb2xsYXBzZWRJY29uID0gJ2ljb24tYW5nbGUtcmlnaHQnO1xuXG5cdHB1YmxpYyBfdHJlZTogVHJlZU5vZGVbXSA9IFtdO1xuXHRwdWJsaWMgZGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy5fdHJlZSk7XG5cblx0cHVibGljIHRyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVOb2RlPihub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xuXG5cdHB1YmxpYyBzZWxlY3RlZE5vZGU6IFRyZWVOb2RlO1xuXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyBnZXQgdHJlZSgpOiBUcmVlTm9kZVtdICB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyZWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRyZWUobmV3VHJlZTogQXJyYXk8VHJlZU5vZGU+KSB7XG5cdFx0dGhpcy5fdHJlZSA9IG5ld1RyZWU7XG5cdFx0dGhpcy5kYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLl9wcm9jZXNzRGF0YSh0aGlzLl90cmVlLCBudWxsKSk7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQgPSAobm9kZSkgPT4gbm9kZS5leHBhbmRlZDtcblx0XHR0aGlzLnRyZWVDb250cm9sLnRvZ2dsZSA9IChub2RlKSA9PiB7XG5cdFx0XHRub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyBuZ09uSW5pdCgpIHtcblx0XHRpZiAodGhpcy5fdHJlZSkge1xuXHRcdFx0dGhpcy5kYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLl9wcm9jZXNzRGF0YSh0aGlzLl90cmVlLCBudWxsKSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogVHJlZU5vZGUpOiBib29sZWFuID0+ICEhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuXG5cdHB1YmxpYyBkb0NsaWNrKG5vZGU6IFRyZWVOb2RlKTogdm9pZCB7XG5cdFx0aWYgKG5vZGUuc2VsZWN0YWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTm9kZS5pc05vZGVTZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuXHRcdFx0bm9kZS5pc05vZGVTZWxlY3RlZCA9ICFub2RlLmlzTm9kZVNlbGVjdGVkO1xuXHRcdFx0dGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChub2RlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9wcm9jZXNzRGF0YShkYXRhLCBwYXJlbnQgPSBudWxsKSB7XG5cdFx0ZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRpdGVtLnBhcmVudCA9IHBhcmVudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW0ucGFyZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGlmIChpdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5fcHJvY2Vzc0RhdGEoaXRlbS5jaGlsZHJlbiwgaXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cbn1cbiJdfQ==