]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Issue #195 : When uploading, warn when the user quits the page (#222)
authorDimitri Gilbert <dimitri.gilbert@gmail.com>
Thu, 25 Jan 2018 17:40:23 +0000 (18:40 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 25 Jan 2018 17:40:23 +0000 (18:40 +0100)
* issue #195

* fixing missing provider definition

* fix styling issue

* fix styling issue

* removed unecessary code

* using angular confirmService instead of window.confirm

* gitignore unecessary folders

* style fixes

* using a generic canDeactivateGuard

* fixing lint style

client/src/app/shared/can-deactivate-guard.service.ts [new file with mode: 0644]
client/src/app/videos/+video-edit/video-add-routing.module.ts
client/src/app/videos/+video-edit/video-add.component.ts
client/src/app/videos/+video-edit/video-add.module.ts

diff --git a/client/src/app/shared/can-deactivate-guard.service.ts b/client/src/app/shared/can-deactivate-guard.service.ts
new file mode 100644 (file)
index 0000000..4239df7
--- /dev/null
@@ -0,0 +1,25 @@
+import { Injectable } from '@angular/core'
+import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'
+import { Observable } from 'rxjs/Observable'
+import { ConfirmService } from '../core'
+
+export interface CanComponentDeactivate {
+  canDeactivate: () => Observable<boolean> | boolean
+}
+
+@Injectable()
+export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
+  constructor (private confirmService: ConfirmService) { }
+
+  canDeactivate (component: CanComponentDeactivate,
+    currentRoute: ActivatedRouteSnapshot,
+    currentState: RouterStateSnapshot,
+    nextState: RouterStateSnapshot
+  ): Observable<boolean> | boolean {
+    return component.canDeactivate() || this.confirmService.confirm(
+      'All unsaved data will be lost, are you sure you want to leave ?',
+      'Unsaved Data'
+    )
+  }
+
+}
index e7a32627c50dd350ea55e223cbc4b6a65c9eab56..9541a2bd15dae7b4a4fdba2abe82e9bd0ba4d888 100644 (file)
@@ -4,13 +4,15 @@ import { RouterModule, Routes } from '@angular/router'
 import { MetaGuard } from '@ngx-meta/core'
 
 import { LoginGuard } from '../../core'
+import { CanDeactivateGuard } from '../../shared/can-deactivate-guard.service'
 import { VideoAddComponent } from './video-add.component'
 
 const videoAddRoutes: Routes = [
   {
     path: '',
     component: VideoAddComponent,
-    canActivate: [ MetaGuard, LoginGuard ]
+    canActivate: [ MetaGuard, LoginGuard ],
+    canDeactivate: [CanDeactivateGuard]
   }
 ]
 
index 73efd60bf4b683a20a52b9cd2b8372c43fb4c572..58eccef48d1cc784cfe0f15efc04d9d799b41cf7 100644 (file)
@@ -12,6 +12,7 @@ import { ValidatorMessage } from '../../shared/forms/form-validators/validator-m
 import { populateAsyncUserVideoChannels } from '../../shared/misc/utils'
 import { VideoEdit } from '../../shared/video/video-edit.model'
 import { VideoService } from '../../shared/video/video.service'
+import { CanComponentDeactivate } from '@app/shared/can-deactivate-guard.service'
 
 @Component({
   selector: 'my-videos-add',
@@ -22,7 +23,7 @@ import { VideoService } from '../../shared/video/video.service'
   ]
 })
 
-export class VideoAddComponent extends FormReactive implements OnInit {
+export class VideoAddComponent extends FormReactive implements OnInit, CanComponentDeactivate {
   @ViewChild('videofileInput') videofileInput
 
   isUploadingVideo = false
@@ -84,6 +85,10 @@ export class VideoAddComponent extends FormReactive implements OnInit {
         })
   }
 
+  canDeactivate () {
+    return !this.isUploadingVideo
+  }
+
   fileChange () {
     this.uploadFirstStep()
   }
index 1efecdf4dfb29d01c0e07bde34c3fbe250da9079..af9696a03bc373f4ca01a19af6723fb18b0ea80e 100644 (file)
@@ -4,6 +4,7 @@ import { SharedModule } from '../../shared'
 import { VideoEditModule } from './shared/video-edit.module'
 import { VideoAddRoutingModule } from './video-add-routing.module'
 import { VideoAddComponent } from './video-add.component'
+import { CanDeactivateGuard } from '../../shared/can-deactivate-guard.service'
 
 @NgModule({
   imports: [
@@ -12,15 +13,14 @@ import { VideoAddComponent } from './video-add.component'
     SharedModule,
     ProgressBarModule
   ],
-
   declarations: [
     VideoAddComponent
   ],
-
   exports: [
     VideoAddComponent
   ],
-
-  providers: [ ]
+  providers: [
+    CanDeactivateGuard
+  ]
 })
 export class VideoAddModule { }