Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. import { Injectable } from '@angular/core';
  2. import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate } from '@angular/router';
  3. import { Observable } from 'rxjs';
  4. import { NgForm } from "@angular/forms";
  5. import { createMPForm } from "../components/site-settings/site-settings.component"
  6.  
  7. @Injectable({
  8. providedIn: 'root'
  9. })
  10.  
  11. @Injectable()
  12. export abstract class FormGuard implements CanActivate {
  13. abstract get form(): NgForm;
  14. formDirty(): boolean {
  15. return createMPForm.dirty
  16. }
  17.  
  18. constructor() { }
  19.  
  20. canActivate(
  21. route: ActivatedRouteSnapshot,
  22. state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  23. if (this.formDirty()) {
  24. if (confirm("You have unsaved changes! If you leave, your changes will be lost.")) {
  25. return true;}
  26. else {
  27. return false;}
  28. }
  29. }
  30. }
  31.  
  32. export class createMPForm {
  33. @ViewChild("createMPForm", {read: ElementRef}) form: ElementRef;
  34. }
  35.  
  36. import { FormGuard } from './services/form-guard.service';
  37. import { SiteSettingsComponent } from './components/site-settings/site-settings.component';
  38. import { SiteComponent } from './components/site/site.component';
  39. import { AuthGuard } from './services/auth-guard.service';
  40.  
  41. const routes: Routes = [
  42. { path: 'sites', component: SitesComponent, canActivate: [AuthGuard] }, //the route I want to keep from navigating to if the form is dirty
  43. { path: 'site-settings/:siteHid', component: SiteSettingsComponent, canActivate: [AuthGuard] }// the route with the form
  44. ];
  45.  
  46. @NgModule({
  47. imports: [RouterModule.forRoot(routes)],
  48. exports: [RouterModule],
  49. providers: [AuthGuard, FormGuard]
  50. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement