import { Component, OnInit, OnChanges, SimpleChanges, Input, Output, EventEmitter } from "@angular/core"; import { Item } from "../models"; import { Observable } from "rxjs/Observable"; @Component({ selector: 'treeview', templateUrl: './treeview.component.html', styleUrls: ['./treeview.component.css'], }) export class TreeviewComponent implements OnInit, OnChanges { @Input() items: Item[]; @Input() search: string; @Output() onSelect: EventEmitter = new EventEmitter; ngOnInit(): void {} ngOnChanges(changes: SimpleChanges): void { if (changes.items) this.optimize(this.items); } optimize(items: Item[]) { if(items != null) { for (let i = 0; i < items.length; i++) { this.optimize(items[i].items); items[i] = new Item(items[i]); } } else items = []; } searching(items: Item[]): boolean { let search = this.search.toLowerCase(); let flag = false,item; for (let i = 0; i < items.length; i++) { item = items[i]; if (item.isFile()) { if (item.text.toLowerCase().indexOf(search) > -1) return true; } else { item.isOpen = this.searching(item.items); if (item.isOpen) flag = true; } } return flag; } public toggle(item: Item) { item.isOpen = (item.isOpen ? false : true); } public getItems(): Item[] { if (this.search) { this.searching(this.items); } return this.items; } public select(item: Item) { this.onSelect.emit(item); } }