- ngOnInit () {
- this.buildForm()
-
- this.videoCategories = this.serverService.getVideoCategories()
- this.videoLicences = this.serverService.getVideoLicences()
- this.videoLanguages = this.serverService.getVideoLanguages()
-
- const uuid: string = this.route.snapshot.params['uuid']
- this.videoService.getVideo(uuid)
- .subscribe(
- video => {
- this.video = video
-
- this.hydrateFormFromVideo()
- },
-
- err => {
- console.error(err)
- this.error = 'Cannot fetch video.'
- }
- )
+ @HostListener('window:beforeunload', [ '$event' ])
+ onUnload (event: any) {
+ const { text, canDeactivate } = this.canDeactivate()
+
+ if (canDeactivate) return
+
+ event.returnValue = text
+ return text
+ }
+
+ canDeactivate (): { canDeactivate: boolean, text?: string } {
+ if (this.updateDone === true) return { canDeactivate: true }
+
+ const text = this.i18n('You have unsaved changes! If you leave, your changes will be lost.')
+
+ for (const caption of this.videoCaptions) {
+ if (caption.action) return { canDeactivate: false, text }
+ }
+
+ return { canDeactivate: this.formChanged === false, text }