1 import {CORE_DIRECTIVES, Directive, View, EventEmitter, ElementRef} from 'angular2/angular2';
2 import {Http} from 'angular2/http';
5 import * as Rx from '@reactivex/rxjs/dist/cjs/Rx';
7 import {SearchService} from "./SearchService";
9 declare var zone: Zone;
12 selector: 'input[type=text][mou-live-search]',
13 outputs: ['results', 'loading'],
14 providers: [CORE_DIRECTIVES, SearchService]
16 export class LiveSearch {
17 results:EventEmitter = new EventEmitter();
18 loading:EventEmitter = new EventEmitter();
21 constructor(private el:ElementRef, public http:Http, public search:SearchService) {
26 console.log("starting");
27 (<any>Rx).Observable.fromEvent(this.el.nativeElement, 'keyup')
28 .map(e => e.target.value)
29 .filter(text => text.length > 0)
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)))
36 zone.bind(orgunits => {
37 this.results.next(orgunits);
41 this.results.next(['ERROR, see console']);
44 console.log("complete");