Fixed bugs where searchresult did not update, where searchlist got duplicated when...
[u/erikhf/frm.git] / src / components / search / livesearch.ts
CommitLineData
7bf7fd27
YF
1import {CORE_DIRECTIVES, Directive, View, EventEmitter, ElementRef} from 'angular2/angular2';
2import {Http} from 'angular2/http';
6e8d36df 3
690e4045
EHF
4// RxJs
5import * as Rx from '@reactivex/rxjs/dist/cjs/Rx';
6e8d36df 6
690e4045 7import {SearchService} from "./SearchService";
6e8d36df 8
690e4045
EHF
9declare var zone: Zone;
10
11@Directive({
12 selector: 'input[type=text][mou-live-search]',
13 outputs: ['results', 'loading'],
7bf7fd27 14 providers: [CORE_DIRECTIVES, SearchService]
6e8d36df 15})
690e4045 16export class LiveSearch {
7bf7fd27
YF
17 results:EventEmitter = new EventEmitter();
18 loading:EventEmitter = new EventEmitter();
7f3e9674 19
690e4045 20
7bf7fd27 21 constructor(private el:ElementRef, public http:Http, public search:SearchService) {
690e4045
EHF
22
23 }
24
7bf7fd27 25 onInit() {
690e4045
EHF
26 console.log("starting");
27 (<any>Rx).Observable.fromEvent(this.el.nativeElement, 'keyup')
28 .map(e => e.target.value)
29 .filter(text => text.length > 2)
30 .debounceTime(250)
31 .distinctUntilChanged()
32 .do(zone.bind(() => this.loading.next(true)))
33 .flatMap(query => this.search.search(query))
34 .do(zone.bind(() => this.loading.next(false)))
35 .subscribe(
7bf7fd27
YF
36 zone.bind(orgunits => {
37 //this.filterUnits(orgunits)
431ff5c5 38 this.results.next(orgunits/*this.filterUnits(orgunits)*/);
690e4045
EHF
39 }),
40 zone.bind(err => {
41 console.log(err);
42 this.results.next(['ERROR, see console']);
43 }),
44 () => {
45 console.log("complete");
46 }
47 )
48 }
6e8d36df
EHF
49}
50