import {OnDestroy} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import {Observer} from 'rxjs/Observer'; import {DialogWrapperComponent} from "./dialog-wrapper.component"; import {DialogService} from "./dialog.service"; /** * Abstract dialog * @template T - dialog data; * @template T1 - dialog result */ export class DialogComponent implements OnDestroy { /** * Observer to return result from dialog */ private observer: Observer; /** * Dialog result * @type {T1} */ protected result: T1; /** * Dialog wrapper (modal placeholder) */ wrapper: DialogWrapperComponent; /** * Constructor * @param {DialogService} dialogService - instance of DialogService */ constructor(protected dialogService: DialogService) {} /** * * @param {T} data * @return {Observable} */ fillData(data:T): Observable { data = data || {}; let keys = Object.keys(data); for(let i=0, length=keys.length; i{ this.observer = observer; return ()=>{ this.close(); } }); } /** * Closes dialog */ close():void { this.dialogService.removeDialog(this); } /** * OnDestroy handler * Sends dialog result to observer */ ngOnDestroy(): void { if(this.observer) { this.observer.next(this.result); } } }