Untitled

 avatar
unknown
typescript
2 years ago
1.9 kB
5
Indexable
import { Observable } from 'rxjs';

export function canActivate(
    route, // ActivatedRouteSnapshot
    state, // RouterStateSnapshot
): Observable<boolean | UrlTree> {
    return new Observable((observer) => {
        // Goes to the Workspace or Contacts page.
        if (
            (state.url.indexOf('/lk/workspace') === 0 ||
                state.url.indexOf('/lk/contacts') === 0) &&
            this.accountRightsService.filtersWorkspace // Has read access to workspace filters.
        ) {
            // If the user has access to all devices and cases in the database.
            if (this.accountService.accessToAllImagesAndCases) {
                // Check if filters are ready.
                this.filtersHttpService.filtersWorkspaceReady().subscribe((ready) => {
                    if (ready.ready) {
                        // Loading into cache.
                        this.treeCacheService.loadWorkspace().subscribe(() => {
                            // Cache loaded.
                            observer.next(true);
                            observer.complete();
                        });
                    } else {
                        // Cache not loaded.
                        if (this.accountRightsService.viewCase) {
                            observer.next(this.router.createUrlTree(['/lk/cases']));
                            observer.complete();
                        } else {
                            observer.next(this.router.createUrlTree(['/lk/account']));
                            observer.complete();
                        }
                    }
                });
            } else {
                observer.next(true);
                observer.complete();
            }
        } else {
            // other pages
            observer.next(true);
            observer.complete();
        }
    });
}
Editor is loading...
Leave a Comment