]>
Commit | Line | Data |
---|---|---|
7bf7fd27 YF |
1 | import {CORE_DIRECTIVES, Directive, View, EventEmitter, ElementRef} from 'angular2/angular2'; |
2 | import {Http} from 'angular2/http'; | |
6e8d36df | 3 | |
690e4045 EHF |
4 | // RxJs |
5 | import * as Rx from '@reactivex/rxjs/dist/cjs/Rx'; | |
6e8d36df | 6 | |
690e4045 | 7 | import {SearchService} from "./SearchService"; |
6e8d36df | 8 | |
690e4045 EHF |
9 | declare 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 | 16 | export 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 |