UNPKG

@ng-flexy/form-bootstrap

Version:

Flexy components and tools to build Angular 8+ applications

102 lines 11.4 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { FlexyTreeService } from '../services/tree.service'; import * as i0 from "@angular/core"; import * as i1 from "../services/tree.service"; import * as i2 from "@angular/common"; import * as i3 from "./tree-node.component"; function FlexyTreeComponent_flexy_tree_node_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "flexy-tree-node", 1); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵproperty("nodes", ctx_r0.nodes)("templateRef", ctx_r0.templateRef); } } export class FlexyTreeComponent { constructor(treeService) { this.treeService = treeService; this.tree = []; this.selected = new EventEmitter(); } ngOnChanges(changes) { if (changes.selectedId) { this.treeService.setSelectedId(this.findSelectedInChildren(this.tree, changes.selectedId.currentValue)); } if (changes.tree) { this.nodes = this.prepareItems(changes.tree.currentValue); } } ngOnInit() { this.selectedSubscription = this.treeService.onChangeSelected().subscribe(lastSelected => { if ((lastSelected && lastSelected.id !== this.selectedId) || (!lastSelected && this.selectedId)) { this.selected.emit(lastSelected); } else if (!lastSelected) { this.selected.emit(null); } }); } ngOnDestroy() { if (this.selectedSubscription) { this.selectedSubscription.unsubscribe(); } } prepareItems(nodes) { if (nodes && nodes.length) { return nodes.map((node) => { return { model: node, isExpanded: !!this.findSelectedInChildren(node.children, this.selectedId), isSelected: this.selectedId === node.id, isReadonly: this.readonlyId === node.id, children: node.children ? this.prepareItems(node.children) : null }; }); } return null; } findSelectedInChildren(tree, selectedId) { let founded = null; if (tree) { tree.forEach(item => { if (item.id === selectedId) { founded = item; return; } else if (item.children) { const f = this.findSelectedInChildren(item.children, selectedId); if (f) { founded = f; return; } } }); } return founded; } } FlexyTreeComponent.ɵfac = function FlexyTreeComponent_Factory(t) { return new (t || FlexyTreeComponent)(i0.ɵɵdirectiveInject(i1.FlexyTreeService)); }; FlexyTreeComponent.ɵcmp = i0.ɵɵdefineComponent({ type: FlexyTreeComponent, selectors: [["flexy-tree"]], inputs: { tree: "tree", selectedId: "selectedId", readonlyId: "readonlyId", templateRef: "templateRef" }, outputs: { selected: "selected" }, features: [i0.ɵɵProvidersFeature([FlexyTreeService]), i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "nodes", "templateRef", 4, "ngIf"], [3, "nodes", "templateRef"]], template: function FlexyTreeComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, FlexyTreeComponent_flexy_tree_node_0_Template, 1, 2, "flexy-tree-node", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.nodes); } }, directives: [i2.NgIf, i3.FlexyTreeNodeComponent], encapsulation: 2 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(FlexyTreeComponent, [{ type: Component, args: [{ selector: 'flexy-tree', template: ` <flexy-tree-node *ngIf="nodes" [nodes]="nodes" [templateRef]="templateRef"></flexy-tree-node> `, providers: [FlexyTreeService] }] }], function () { return [{ type: i1.FlexyTreeService }]; }, { tree: [{ type: Input }], selectedId: [{ type: Input }], readonlyId: [{ type: Input }], templateRef: [{ type: Input }], selected: [{ type: Output }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWJvb3RzdHJhcC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFHbEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztJQU14RCxxQ0FBNkY7OztJQUE5RCxvQ0FBZSxtQ0FBQTs7QUFJbEQsTUFBTSxPQUFPLGtCQUFrQjtJQVc3QixZQUFvQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFWeEMsU0FBSSxHQUF5QixFQUFFLENBQUM7UUFLL0IsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO0lBS1IsQ0FBQztJQUVyRCxXQUFXLENBQUMsT0FBTztRQUNqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2RixJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQztpQkFBTSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQTJCO1FBQzlDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzdCLE9BQU87b0JBQ0wsS0FBSyxFQUFFLElBQUk7b0JBQ1gsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUN6RSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsRUFBRTtvQkFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQUU7b0JBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDbEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUEwQixFQUFFLFVBQWtCO1FBQzNFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUU7b0JBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTztpQkFDUjtxQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNqRSxJQUFJLENBQUMsRUFBRTt3QkFDTCxPQUFPLEdBQUcsQ0FBQyxDQUFDO3dCQUNaLE9BQU87cUJBQ1I7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7b0ZBdEVVLGtCQUFrQjt1REFBbEIsa0JBQWtCLDZNQUZsQixDQUFDLGdCQUFnQixDQUFDO1FBRjNCLDJGQUEyRTs7UUFBMUQsZ0NBQWE7O2tEQUlyQixrQkFBa0I7Y0FQOUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QixRQUFRLEVBQUU7O0dBRVQ7Z0JBQ0QsU0FBUyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDOUI7bUVBRVUsSUFBSTtrQkFBWixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxXQUFXO2tCQUFuQixLQUFLO1lBRUksUUFBUTtrQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxleHlUcmVlTW9kZWxOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtbW9kZWwtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uL21vZGVscy90cmVlLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgRmxleHlUcmVlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmxleHktdHJlZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGZsZXh5LXRyZWUtbm9kZSAqbmdJZj1cIm5vZGVzXCIgW25vZGVzXT1cIm5vZGVzXCIgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCI+PC9mbGV4eS10cmVlLW5vZGU+XG4gIGAsXG4gIHByb3ZpZGVyczogW0ZsZXh5VHJlZVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEZsZXh5VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0cmVlOiBGbGV4eVRyZWVNb2RlbE5vZGVbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZElkOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJlYWRvbmx5SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGbGV4eVRyZWVNb2RlbE5vZGU+KCk7XG5cbiAgbm9kZXM6IFRyZWVOb2RlW107XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyZWVTZXJ2aWNlOiBGbGV4eVRyZWVTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZElkKSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnNldFNlbGVjdGVkSWQodGhpcy5maW5kU2VsZWN0ZWRJbkNoaWxkcmVuKHRoaXMudHJlZSwgY2hhbmdlcy5zZWxlY3RlZElkLmN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy50cmVlKSB7XG4gICAgICB0aGlzLm5vZGVzID0gdGhpcy5wcmVwYXJlSXRlbXMoY2hhbmdlcy50cmVlLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbiA9IHRoaXMudHJlZVNlcnZpY2Uub25DaGFuZ2VTZWxlY3RlZCgpLnN1YnNjcmliZShsYXN0U2VsZWN0ZWQgPT4ge1xuICAgICAgaWYgKChsYXN0U2VsZWN0ZWQgJiYgbGFzdFNlbGVjdGVkLmlkICE9PSB0aGlzLnNlbGVjdGVkSWQpIHx8ICghbGFzdFNlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWRJZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KGxhc3RTZWxlY3RlZCk7XG4gICAgICB9IGVsc2UgaWYgKCFsYXN0U2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVJdGVtcyhub2RlczogRmxleHlUcmVlTW9kZWxOb2RlW10pOiBUcmVlTm9kZVtdIHtcbiAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbm9kZXMubWFwKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtb2RlbDogbm9kZSxcbiAgICAgICAgICBpc0V4cGFuZGVkOiAhIXRoaXMuZmluZFNlbGVjdGVkSW5DaGlsZHJlbihub2RlLmNoaWxkcmVuLCB0aGlzLnNlbGVjdGVkSWQpLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJZCA9PT0gbm9kZS5pZCxcbiAgICAgICAgICBpc1JlYWRvbmx5OiB0aGlzLnJlYWRvbmx5SWQgPT09IG5vZGUuaWQsXG4gICAgICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4gPyB0aGlzLnByZXBhcmVJdGVtcyhub2RlLmNoaWxkcmVuKSA6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkSW5DaGlsZHJlbih0cmVlOiBGbGV4eVRyZWVNb2RlbE5vZGVbXSwgc2VsZWN0ZWRJZDogbnVtYmVyKTogRmxleHlUcmVlTW9kZWxOb2RlIHtcbiAgICBsZXQgZm91bmRlZCA9IG51bGw7XG4gICAgaWYgKHRyZWUpIHtcbiAgICAgIHRyZWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHNlbGVjdGVkSWQpIHtcbiAgICAgICAgICBmb3VuZGVkID0gaXRlbTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGYgPSB0aGlzLmZpbmRTZWxlY3RlZEluQ2hpbGRyZW4oaXRlbS5jaGlsZHJlbiwgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICAgIGZvdW5kZWQgPSBmO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZGVkO1xuICB9XG59XG4iXX0=