--- /dev/null
+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'
+ )
+ }
+
+}
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]
}
]
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',
]
})
-export class VideoAddComponent extends FormReactive implements OnInit {
+export class VideoAddComponent extends FormReactive implements OnInit, CanComponentDeactivate {
@ViewChild('videofileInput') videofileInput
isUploadingVideo = false
})
}
+ canDeactivate () {
+ return !this.isUploadingVideo
+ }
+
fileChange () {
this.uploadFirstStep()
}
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: [
SharedModule,
ProgressBarModule
],
-
declarations: [
VideoAddComponent
],
-
exports: [
VideoAddComponent
],
-
- providers: [ ]
+ providers: [
+ CanDeactivateGuard
+ ]
})
export class VideoAddModule { }