diff --git a/apps/red-ui/src/app/app-routing.module.ts b/apps/red-ui/src/app/app-routing.module.ts
index 3ea027e14..9fd534493 100644
--- a/apps/red-ui/src/app/app-routing.module.ts
+++ b/apps/red-ui/src/app/app-routing.module.ts
@@ -1,5 +1,5 @@
import { AuthErrorComponent } from '@components/auth-error/auth-error.component';
-import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui';
+import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, IqserRoutes, orderedAsyncGuards } from '@iqser/common-ui';
import { RedRoleGuard } from '@users/red-role.guard';
import { BaseScreenComponent } from '@components/base-screen/base-screen.component';
import { RouteReuseStrategy, RouterModule } from '@angular/router';
@@ -16,7 +16,7 @@ import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIE
import { DossierFilesGuard } from '@guards/dossier-files-guard';
import { webViewerLoadedGuard } from './modules/pdf-viewer/services/webviewer-loaded.guard';
import { Roles } from '@users/roles';
-import { mainResolver } from '@utils/main.resolver';
+import { mainGuard } from '@utils/main.resolver';
import { hasAnyRoleGuard, IqserAuthGuard } from '@iqser/common-ui/lib/users';
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
import { ifLoggedIn } from '@guards/if-logged-in.guard';
@@ -211,11 +211,8 @@ const routes: IqserRoutes = [
},
{
path: ':tenant/main',
- canActivate: [ifLoggedIn()],
+ canActivate: [orderedAsyncGuards([ifLoggedIn(), mainGuard()])],
component: BaseScreenComponent,
- resolve: {
- whateverThisMainRouteNeeds: mainResolver,
- },
children: mainRoutes,
},
{
diff --git a/apps/red-ui/src/app/app.component.html b/apps/red-ui/src/app/app.component.html
index 05cc79134..e1a8c5ccf 100644
--- a/apps/red-ui/src/app/app.component.html
+++ b/apps/red-ui/src/app/app.component.html
@@ -3,3 +3,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/red-ui/src/app/components/base-screen/base-screen.component.html b/apps/red-ui/src/app/components/base-screen/base-screen.component.html
index d26b35bc0..1277d3df1 100644
--- a/apps/red-ui/src/app/components/base-screen/base-screen.component.html
+++ b/apps/red-ui/src/app/components/base-screen/base-screen.component.html
@@ -48,13 +48,3 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/red-ui/src/app/guards/if-logged-in.guard.ts b/apps/red-ui/src/app/guards/if-logged-in.guard.ts
index 5acd504d7..51c74a392 100644
--- a/apps/red-ui/src/app/guards/if-logged-in.guard.ts
+++ b/apps/red-ui/src/app/guards/if-logged-in.guard.ts
@@ -1,4 +1,4 @@
-import { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';
+import { ActivatedRouteSnapshot, Router } from '@angular/router';
import { inject } from '@angular/core';
import { NGXLogger } from 'ngx-logger';
import { keycloakInitializer, KeycloakStatusService, TenantsService } from '@iqser/common-ui/lib/tenants';
@@ -6,8 +6,9 @@ import { KeycloakService } from 'keycloak-angular';
import { UserService } from '@users/user.service';
import { LicenseService } from '@services/license.service';
import { RouterHistoryService } from '@services/router-history.service';
+import { AsyncGuard } from '@iqser/common-ui';
-export function ifLoggedIn(): CanActivateFn {
+export function ifLoggedIn(): AsyncGuard {
return async (route: ActivatedRouteSnapshot) => {
const logger = inject(NGXLogger);
logger.info('[ROUTES] Check if can activate route', route);
diff --git a/apps/red-ui/src/app/utils/main.resolver.ts b/apps/red-ui/src/app/utils/main.resolver.ts
index 00e6cf491..f2df9ae96 100644
--- a/apps/red-ui/src/app/utils/main.resolver.ts
+++ b/apps/red-ui/src/app/utils/main.resolver.ts
@@ -1,6 +1,5 @@
import { inject } from '@angular/core';
-import { ResolveFn } from '@angular/router';
-import { IqserPermissionsService, LoadingService } from '@iqser/common-ui';
+import { AsyncGuard, IqserPermissionsService, LoadingService } from '@iqser/common-ui';
import { TenantsService } from '@iqser/common-ui/lib/tenants';
import { BASE_HREF } from '@iqser/common-ui/lib/utils';
import { ConfigService } from '@services/config.service';
@@ -13,47 +12,61 @@ import { UserPreferenceService } from '@users/user-preference.service';
import { NGXLogger } from 'ngx-logger';
import { firstValueFrom } from 'rxjs';
import { tap } from 'rxjs/operators';
+import { Router, RouterStateSnapshot } from '@angular/router';
-function redirectToLastDossierTemplate(baseHref: string, tenant: string, lastDossierTemplate: string) {
+async function redirectToLastDossierTemplate(
+ router: Router,
+ state: RouterStateSnapshot,
+ baseHref: string,
+ tenant: string,
+ lastDossierTemplate: string,
+) {
const lastUrlSegment = window.location.pathname.split('/').filter(Boolean).pop();
- if (['main', tenant, baseHref].includes(lastUrlSegment)) {
- window.location.assign(tenant + '/main/' + lastDossierTemplate);
+ if (['main', tenant, baseHref].includes(lastUrlSegment) && !state.url.includes(lastDossierTemplate)) {
+ await router.navigate([tenant, 'main', lastDossierTemplate]);
}
}
-export const mainResolver: ResolveFn = async () => {
- const logger = inject(NGXLogger);
- logger.info('[ROUTES] Main resolver started...');
+export function mainGuard(): AsyncGuard {
+ return async (route, state) => {
+ const logger = inject(NGXLogger);
+ logger.info('[ROUTES] Main resolver started...');
- inject(FeaturesService).loadConfig();
- if (inject(IqserPermissionsService).has(Roles.dossiers.read)) {
- inject(DossiersChangesService).initialize();
- }
+ console.log('main guard');
- const systemPreferencesService = inject(SystemPreferencesService);
- const userPreferenceService = inject(UserPreferenceService);
- const tenantsService = inject(TenantsService);
- const loadingService = inject(LoadingService);
- const configService = inject(ConfigService);
- const baseHref = inject(BASE_HREF);
+ const router = inject(Router);
+ inject(FeaturesService).loadConfig();
+ if (inject(IqserPermissionsService).has(Roles.dossiers.read)) {
+ inject(DossiersChangesService).initialize();
+ }
- const generalConfig$ = inject(GeneralSettingsService).getGeneralConfigurations();
- const updatedDisplayName$ = generalConfig$.pipe(tap(config => configService.updateDisplayName(config.displayName)));
+ const systemPreferencesService = inject(SystemPreferencesService);
+ const userPreferenceService = inject(UserPreferenceService);
+ const tenantsService = inject(TenantsService);
+ const loadingService = inject(LoadingService);
+ const configService = inject(ConfigService);
+ const baseHref = inject(BASE_HREF);
- await Promise.all([
- systemPreferencesService.loadPreferencesIfNeeded(),
- userPreferenceService.reload(),
- firstValueFrom(updatedDisplayName$),
- ]);
+ const generalConfig$ = inject(GeneralSettingsService).getGeneralConfigurations();
+ const updatedDisplayName$ = generalConfig$.pipe(tap(config => configService.updateDisplayName(config.displayName)));
- const lastDossierTemplate = userPreferenceService.getLastDossierTemplate();
+ await Promise.all([
+ systemPreferencesService.loadPreferencesIfNeeded(),
+ userPreferenceService.reload(),
+ firstValueFrom(updatedDisplayName$),
+ ]);
- if (lastDossierTemplate) {
- redirectToLastDossierTemplate(baseHref, tenantsService.activeTenantId, lastDossierTemplate);
- }
+ const lastDossierTemplate = userPreferenceService.getLastDossierTemplate();
- loadingService.stop();
- tenantsService.storeTenant();
+ if (lastDossierTemplate) {
+ await redirectToLastDossierTemplate(router, state, baseHref, tenantsService.activeTenantId, lastDossierTemplate);
+ }
- logger.info('[ROUTES] Main resolver finished!');
-};
+ loadingService.stop();
+ tenantsService.storeTenant();
+
+ logger.info('[ROUTES] Main resolver finished!');
+
+ return true;
+ };
+}
diff --git a/libs/common-ui b/libs/common-ui
index 2f2ee530b..890cf417a 160000
--- a/libs/common-ui
+++ b/libs/common-ui
@@ -1 +1 @@
-Subproject commit 2f2ee530b15e9e84dc28c3a23340cfb8b8b94319
+Subproject commit 890cf417a1900eb882c61d335276360a48c9a54c