import { Injectable } from '@angular/core' import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router' import { Observable } from 'rxjs/Observable' import { ConfirmService } from '../../core/index' export interface CanComponentDeactivate { canDeactivate: () => { text?: string, canDeactivate: Observable | boolean } } @Injectable() export class CanDeactivateGuard implements CanDeactivate { constructor (private confirmService: ConfirmService) { } canDeactivate (component: CanComponentDeactivate, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState: RouterStateSnapshot ): Observable | boolean { const result = component.canDeactivate() const text = result.text || 'All unsaved data will be lost, are you sure you want to leave this page?' return result.canDeactivate || this.confirmService.confirm( text, 'Warning' ) } }