From b7a9b5c77c032c92e442dc7ac6eef1e536bfb1b1 Mon Sep 17 00:00:00 2001 From: George Date: Wed, 29 Nov 2023 17:06:48 +0200 Subject: [PATCH] RED-3800, refactor multitenancy --- apps/red-ui/project.json | 1 - apps/red-ui/src/app/app-routing.module.ts | 9 +--- apps/red-ui/src/app/app.module.ts | 25 ++++++++-- .../base-screen/base-screen.component.html | 2 +- .../breadcrumbs/breadcrumbs.component.html | 4 +- .../user-menu/user-menu.component.html | 2 +- .../src/app/guards/dossier-files-guard.ts | 4 +- .../guards/dossier-template-exists.guard.ts | 6 +-- .../src/app/guards/if-logged-in.guard.ts | 8 +++- .../src/app/guards/if-not-logged-in.guard.ts | 8 ++-- .../src/app/modules/admin/admin.module.ts | 2 - .../entities-listing-screen.component.html | 2 +- .../watermark-screen.component.ts | 22 ++++----- .../screens/watermark/watermark.module.ts | 2 - .../watermarks-listing-screen.component.html | 8 ++-- .../admin-side-nav.component.html | 4 +- .../admin-side-nav.component.ts | 10 ++-- ...ossier-template-breadcrumbs.component.html | 12 ++--- .../dossier-template-breadcrumbs.component.ts | 3 +- .../workflow-item.component.html | 4 +- .../dossier-overview.module.ts | 2 - .../view-switch/view-switch.component.ts | 4 +- .../file-preview-screen.component.html | 10 ++-- .../file-preview/file-preview.module.ts | 2 - .../pdf-annotation-actions.service.ts | 6 +-- .../services/pdf-proxy.service.ts | 20 ++++---- .../pdf-viewer/services/layers.service.ts | 8 ++-- .../pdf-viewer/services/pdf-viewer.service.ts | 47 +++++++++---------- .../services/readable-redactions.service.ts | 10 ++-- .../pdf-viewer/services/tooltips.service.ts | 8 ++-- .../services/viewer-header.service.ts | 16 +++---- .../search-item-template.component.html | 2 +- .../src/app/modules/search/search.module.ts | 2 - .../trash-table-item.component.html | 10 ++-- .../src/app/modules/trash/trash.module.ts | 2 - .../src/app/services/notifications.service.ts | 11 +++-- apps/red-ui/src/app/users/red-role.guard.ts | 10 ++-- apps/red-ui/src/app/utils/main.guard.ts | 4 +- apps/red-ui/src/assets/config/config.json | 4 +- libs/common-ui | 2 +- 40 files changed, 153 insertions(+), 165 deletions(-) diff --git a/apps/red-ui/project.json b/apps/red-ui/project.json index c0f01719a..29231e2b8 100644 --- a/apps/red-ui/project.json +++ b/apps/red-ui/project.json @@ -34,7 +34,6 @@ "main": "apps/red-ui/src/main.ts", "polyfills": "apps/red-ui/src/polyfills.ts", "tsConfig": "apps/red-ui/tsconfig.json", - "baseHref": "/ui/", "assets": [ "apps/red-ui/src/favicon.ico", { diff --git a/apps/red-ui/src/app/app-routing.module.ts b/apps/red-ui/src/app/app-routing.module.ts index de27d72b6..68b2aa4ed 100644 --- a/apps/red-ui/src/app/app-routing.module.ts +++ b/apps/red-ui/src/app/app-routing.module.ts @@ -205,18 +205,13 @@ const routes: IqserRoutes = [ component: TenantSelectComponent, }, { - path: ':tenant', - redirectTo: ':tenant/main', - pathMatch: 'full', - }, - { - path: ':tenant/main', + path: 'main', canActivate: [orderedAsyncGuards([ifLoggedIn(), hasAnyRole(), mainGuard()])], component: BaseScreenComponent, children: mainRoutes, }, { - path: ':tenant/auth-error', + path: 'auth-error', component: AuthErrorComponent, canActivate: [doesNotHaveAnyRole()], }, diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 66a4c04cd..c1fa904c3 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -1,4 +1,4 @@ -import { DatePipe as BaseDatePipe } from '@angular/common'; +import { APP_BASE_HREF, DatePipe as BaseDatePipe } from '@angular/common'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject, NgModule } from '@angular/core'; import { MatDividerModule } from '@angular/material/divider'; @@ -43,7 +43,7 @@ import { } from '@iqser/common-ui'; import { CommonUiModule } from '@iqser/common-ui/lib/common-ui.module'; import { LogoComponent, SkeletonComponent, ToastComponent } from '@iqser/common-ui/lib/shared'; -import { TenantPipe, TenantsModule } from '@iqser/common-ui/lib/tenants'; +import { TenantsModule } from '@iqser/common-ui/lib/tenants'; import { IqserUsersModule } from '@iqser/common-ui/lib/users'; import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor'; import { MissingTranslationHandler } from '@ngx-translate/core'; @@ -61,13 +61,14 @@ import { UserPreferenceService } from '@users/user-preference.service'; import { UserService } from '@users/user.service'; import { UI_CACHES } from '@utils/constants'; import { REDMissingTranslationHandler } from '@utils/missing-translations-handler'; -import { LoggerModule, NgxLoggerLevel, TOKEN_LOGGER_CONFIG, TOKEN_LOGGER_RULES_SERVICE } from 'ngx-logger'; +import { LoggerModule, NGXLogger, NgxLoggerLevel, TOKEN_LOGGER_CONFIG, TOKEN_LOGGER_RULES_SERVICE } from 'ngx-logger'; import { ToastrModule } from 'ngx-toastr'; import * as helpModeKeys from '../assets/help-mode/help-mode-keys.json'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { PdfViewerModule } from './modules/pdf-viewer/pdf-viewer.module'; import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE } from './tokens'; +import { UI_ROOT } from '@common-ui/utils'; export const appModuleFactory = (config: AppConfig) => { @NgModule({ @@ -183,11 +184,27 @@ export const appModuleFactory = (config: AppConfig) => { IqserDenyDirective, IqserListingModule, IconButtonComponent, - TenantPipe, MatDividerModule, ChevronButtonComponent, ], providers: [ + { + provide: UI_ROOT, + useValue: '/ui', + }, + { + provide: APP_BASE_HREF, + useFactory: () => { + const uiRoot = inject(UI_ROOT); + const pathParams = location.pathname.split('/').filter(Boolean); + const uiRootPathIndex = pathParams.indexOf(uiRoot.replace('/', '')); + const tenant = pathParams[uiRootPathIndex + 1] ?? ''; + const appBaseHref = uiRoot + '/' + tenant; + + inject(NGXLogger).info('Provide APP_BASE_HREF:', appBaseHref); + return appBaseHref; + }, + }, { provide: HTTP_INTERCEPTORS, multi: true, 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 1277d3df1..27464cdbd 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 @@ -9,7 +9,7 @@ -