diff options
Diffstat (limited to 'vid-webpack-master/src/app/drawingBoard/service-planning/search/search.component.ts')
-rw-r--r-- | vid-webpack-master/src/app/drawingBoard/service-planning/search/search.component.ts | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/search/search.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/search/search.component.ts new file mode 100644 index 000000000..19edbcd09 --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/search/search.component.ts @@ -0,0 +1,50 @@ +import {Component, EventEmitter, Input, Output} from "@angular/core"; +import {IDType, ITreeNode} from "angular-tree-component/dist/defs/api"; +import * as _ from 'lodash'; + +@Component({ + selector: 'search-component', + templateUrl: './search.component.html', + styleUrls: ['./search.component.scss'] +}) +export class SearchComponent { + @Input() tree; + @Input() nodes; + @Input() inputTestId: string; + + @Output() updateNodes: EventEmitter<any> = new EventEmitter(); + + searchTree(searchText: string): void { + if(_.isNil(searchText)){ + return; + } + let __this = this; + let results: ITreeNode[] = []; + this.nodes.forEach( (node) => { + __this.searchTreeNode(node, searchText, results); + }); + results.forEach(function (result) { + __this.expandParentByNodeId(result.id) + }); + this.updateNodes.emit({ + nodes: this.nodes, + filterValue: searchText + }); + return; + } + + expandParentByNodeId(id: IDType): void { + this.tree.treeModel.getNodeById(id).parent.expand(); + } + + searchTreeNode(node, searchText: string, results): void { + if (node.name.toLowerCase().indexOf(searchText.toLowerCase()) != -1) { + results.push(node); + } + if (node.children != null) { + for (let i = 0; i < node.children.length; i++) { + this.searchTreeNode(node.children[i], searchText, results); + } + } + } +} |