diff --git a/src/frontend/app/actions/actions.service.ts b/src/frontend/app/actions/actions.service.ts index af2801d60553f9ed7ef7343922e71f86995145c6..e22014e56234883482f237ef3748aacff5bef6a4 100644 --- a/src/frontend/app/actions/actions.service.ts +++ b/src/frontend/app/actions/actions.service.ts @@ -71,6 +71,12 @@ export class ActionsService { ) { } + ngOnDestroy(): void { + if (this.currentResourceLock) { + clearInterval(this.currentResourceLock); + } + } + catchAction(): Observable<any> { return this.eventAction.asObservable(); } diff --git a/src/frontend/app/administration/template/template-administration.component.ts b/src/frontend/app/administration/template/template-administration.component.ts index e60df48ac7e47f4dfb72e46840f21a48f0b6602e..0e052d36c341b4167ef83c572547885a4f1f36e4 100755 --- a/src/frontend/app/administration/template/template-administration.component.ts +++ b/src/frontend/app/administration/template/template-administration.component.ts @@ -672,6 +672,9 @@ export class TemplateAdministrationComponent implements OnInit, OnDestroy { ngOnDestroy() { tinymce.remove('textarea'); + if (this.intervalLockFile) { + clearInterval(this.intervalLockFile); + } } } @Component({ diff --git a/src/frontend/app/process/process.component.ts b/src/frontend/app/process/process.component.ts index 473c367f1d54b8e5a8143809d1cd9affa5158519..338b167a886703ef0af79c0cfa5f03614c4ac004 100755 --- a/src/frontend/app/process/process.component.ts +++ b/src/frontend/app/process/process.component.ts @@ -683,6 +683,9 @@ export class ProcessComponent implements OnInit { } ngOnDestroy() { + if (this.currentResourceLock) { + clearInterval(this.currentResourceLock); + } // unsubscribe to ensure no memory leaks this.subscription.unsubscribe(); } diff --git a/src/frontend/app/signature-book.component.ts b/src/frontend/app/signature-book.component.ts index e3d059125aac9790f991cb655ccfd17575953cde..7135f0f6576b6a0fca74bdf3112345ecb981f714 100755 --- a/src/frontend/app/signature-book.component.ts +++ b/src/frontend/app/signature-book.component.ts @@ -600,6 +600,10 @@ export class SignatureBookComponent implements OnInit { } ngOnDestroy() { + if (this.currentResourceLock) { + clearInterval(this.currentResourceLock); + } + // unsubscribe to ensure no memory leaks this.subscription.unsubscribe(); } diff --git a/src/frontend/app/viewer/document-viewer.component.ts b/src/frontend/app/viewer/document-viewer.component.ts index d9ff3c6553fa64d52dbae18054fcadf519aa4ab4..e01c2548241e1f5990b8c69b966844108ecb0d79 100755 --- a/src/frontend/app/viewer/document-viewer.component.ts +++ b/src/frontend/app/viewer/document-viewer.component.ts @@ -208,6 +208,12 @@ export class DocumentViewerComponent implements OnInit { } } + ngOnDestroy() { + if (this.intervalLockFile) { + clearInterval(this.intervalLockFile); + } + } + loadFileFromBase64() { this.loading = true; this.file = { diff --git a/src/frontend/service/app.guard.ts b/src/frontend/service/app.guard.ts index 1ead3da4c4761cfc640d2221a3b2377a13426434..d71cca9b1287e69013828f0731bce98d5468691d 100644 --- a/src/frontend/service/app.guard.ts +++ b/src/frontend/service/app.guard.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, CanDeactivate } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, CanDeactivate, UrlTree } from '@angular/router'; import { HttpClient } from '@angular/common/http'; import { Observable, of } from 'rxjs'; import { map, tap, catchError, exhaustMap, filter } from 'rxjs/operators'; @@ -181,8 +181,8 @@ export class AppGuard implements CanActivate { export class AfterProcessGuard implements CanDeactivate<ProcessComponent> { constructor() { } - async canDeactivate(component: ProcessComponent): Promise<boolean> { - if (!component.isActionEnded() && !component.detailMode) { + async canDeactivate(component: ProcessComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState: RouterStateSnapshot): Promise<boolean> { + if (nextState.url != '/login' && !component.isActionEnded() && !component.detailMode) { component.unlockResource(); }