Skip to content

Instantly share code, notes, and snippets.

@pascalwhoop
Last active March 17, 2017 14:09
Show Gist options
  • Select an option

  • Save pascalwhoop/12ba5d3717293e4cd907033392ec1957 to your computer and use it in GitHub Desktop.

Select an option

Save pascalwhoop/12ba5d3717293e4cd907033392ec1957 to your computer and use it in GitHub Desktop.
import {Injectable} from "@angular/core";
import {MdSnackBar, MdSnackBarRef, SimpleSnackBar} from "@angular/material";
import {Observable} from "rxjs";
import {LoadingEventListener} from "./LoadingEventListener";
@Injectable()
export class VFeedbackService {
_listeners: LoadingEventListener[] = [];
constructor(private snackBar: MdSnackBar) {}
public addListener(listener: any) {
this._listeners.push(listener);
}
public removeListener(listener: any) {
this._listeners = this._listeners.filter(item => item !== listener)
}
public spinUntilCompleted(forthis: Observable<any>): void {
//start up all listeners
this.triggerAllListeners();
//on end of observable call complete for all listeners
forthis.subscribe(null, null, () => {
this.completeAllListeners()
})
}
public showMessageOnAnswer(successMessage: string, failMessage: string, observableRequest: Observable<any>, actionText?: string): Observable<MdSnackBarRef<SimpleSnackBar>> {
let obs = new Observable(sub => {
observableRequest
.subscribe(
null,
err => {
let snack = this.snackBar.open(failMessage, null, {duration: 1500});
sub.next(snack);
sub.complete()
},
() => {
sub.next(this.snackBar.open(successMessage, actionText, {duration: 1500}));
sub.complete()
})
}).publish();
obs.connect();
return obs;
}
private triggerAllListeners() {
this._listeners.forEach((listener) => {
if (listener) listener.onLoading();
});
}
private completeAllListeners() {
this._listeners.forEach(listener => {
if(listener)listener.onLoadingComplete();
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment