RED-3800: Improved main resolver / skeleton / loading / redirecting
This commit is contained in:
parent
f717775f24
commit
d2c734b9a9
@ -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,
|
||||
},
|
||||
{
|
||||
|
||||
@ -3,3 +3,13 @@
|
||||
<iqser-full-page-loading-indicator></iqser-full-page-loading-indicator>
|
||||
<iqser-connection-status></iqser-connection-status>
|
||||
<iqser-full-page-error></iqser-full-page-error>
|
||||
|
||||
<iqser-skeleton [templates]="{ dashboard: dashboardSkeleton, dossier: dossierSkeleton }"></iqser-skeleton>
|
||||
|
||||
<ng-template #dashboardSkeleton>
|
||||
<redaction-dashboard-skeleton></redaction-dashboard-skeleton>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #dossierSkeleton>
|
||||
<redaction-dossier-skeleton></redaction-dossier-skeleton>
|
||||
</ng-template>
|
||||
|
||||
@ -48,13 +48,3 @@
|
||||
<router-outlet></router-outlet>
|
||||
|
||||
<redaction-pdf-viewer [style.visibility]="documentViewer.loaded() ? 'visible' : 'hidden'"></redaction-pdf-viewer>
|
||||
|
||||
<iqser-skeleton [templates]="{ dashboard: dashboardSkeleton, dossier: dossierSkeleton }"></iqser-skeleton>
|
||||
|
||||
<ng-template #dashboardSkeleton>
|
||||
<redaction-dashboard-skeleton></redaction-dashboard-skeleton>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #dossierSkeleton>
|
||||
<redaction-dossier-skeleton></redaction-dossier-skeleton>
|
||||
</ng-template>
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<void> = 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;
|
||||
};
|
||||
}
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 2f2ee530b15e9e84dc28c3a23340cfb8b8b94319
|
||||
Subproject commit 890cf417a1900eb882c61d335276360a48c9a54c
|
||||
Loading…
x
Reference in New Issue
Block a user