import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; import { PredictiveOrderingComponent } from './pages/predictive-ordering/predictive-ordering.component'; import { ConfirmModalComponent, TypeOfModals, ToastService } from '@esp/esp-common'; import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; import { PredictiveOrderingQueryService } from './pages/predictive-ordering/dpo-query/predictive-ordering.query.service'; import { Subject } from 'rxjs'; import {UNSAVED_DATA_MODAL} from "./mockup"; @Injectable({ providedIn: 'root', }) export class GridEditedGuard implements CanDeactivate { bsModalRef: BsModalRef; i18n; constructor( private bsModalService: BsModalService, private DPOService: PredictiveOrderingQueryService, private router: Router, // private senseCheckService: SenseCheckService, private toast: ToastService ) {} canDeactivate( component: PredictiveOrderingComponent, route: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState: RouterStateSnapshot ): Observable | Promise | boolean { this.i18n = component.i18n; return component.canDeactivate() || this.showConfirmationPopUp(nextState); } showConfirmationPopUp(nextState, ...args): boolean { const unsavedData = UNSAVED_DATA_MODAL; unsavedData['data']['i18n'] = this.i18n; unsavedData['data']['type'] = TypeOfModals.UNSAVED; args.unshift(unsavedData, nextState); return this.openConfirmModal.apply(this, args); } openConfirmModal(initialState, nextState) { this.bsModalRef = this.bsModalService.show(ConfirmModalComponent, { ignoreBackdropClick: true, initialState }); this.bsModalRef.content.onClose = new Subject(); this.bsModalRef.content.onClose.subscribe(confirmAction => { if (confirmAction.status) { this.DPOService.setGridEditedFlag(false); // this.senseCheckService.setEditedStatus({ // count: 0, // guard: true, // }); this.toast.deleteToasts(); this.router.navigate([nextState.url]); return true; } else { this.DPOService.setGridEditedFlag(true); // this.senseCheckService.setEditedStatus({ // count: 0, // guard: false, // }); return false; } }); } }