import {Injectable} from '@angular/core'; import {Observable, Subject} from 'rxjs'; import { shareReplay } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class NgxMaterialTimepickerEventService { private backdropClickSubject: Subject = new Subject(); private keydownEventSubject: Subject = new Subject(); get backdropClick(): Observable { return this.backdropClickSubject.asObservable().pipe(shareReplay({bufferSize: 1, refCount: true})); } get keydownEvent(): Observable { return this.keydownEventSubject.asObservable().pipe(shareReplay({bufferSize: 1, refCount: true})); } dispatchEvent(event: KeyboardEvent | MouseEvent): void { switch (event.type) { case 'click': this.backdropClickSubject.next(event); break; case 'keydown': this.keydownEventSubject.next(event); break; default: throw new Error('no such event type'); } } }