@ng-flexy/form-bootstrap
Version:
Flexy components and tools to build Angular 8+ applications
102 lines • 11.4 kB
JavaScript
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=