BehaviorSubject, Subscriber } from 'rxjs/Rx'; import { SharedDataService } from './../services/shared-data.service'; const ShouldShowWaitBanner = (target, key, descriptor) => { const eventName = `${target.constructor.name}.${key}`; const originalMethod = descriptor.value; const stream = new BehaviorSubject<{ show: boolean }>({ show: true }); if (!target.shouldShowWaitBannerStreamArray) { target.shouldShowWaitBannerStreamArray = [{ name: eventName, stream }]; } else if (target.shouldShowWaitBannerStreamArray.findIndex(it => it.name === eventName) === -1) { target.shouldShowWaitBannerStreamArray.push({ name: eventName, stream }); } descriptor.value = function() { const args = []; stream.next({ show: true }); for (let i = 0; i < arguments.length; i++) { args[i - 0] = arguments[i]; } let output: Observable<any> = originalMethod.apply(this, args); output.subscribe(() => stream.next({ show: false })); return output; }; return descriptor; }; export { ShouldShowWaitBanner };