diff --git a/apps/red-ui/src/app/app.component.ts b/apps/red-ui/src/app/app.component.ts index 4e78439d4..f4667e187 100644 --- a/apps/red-ui/src/app/app.component.ts +++ b/apps/red-ui/src/app/app.component.ts @@ -4,21 +4,21 @@ import { UserPreferenceService } from '@users/user-preference.service'; import { getConfig } from '@iqser/common-ui'; import { AppConfig } from '@red/domain'; import { NavigationEnd, Router } from '@angular/router'; -import { filter, map, switchMap, take } from 'rxjs/operators'; +import { filter, map, switchMap, take, tap } from 'rxjs/operators'; +import { APP_TYPE_PATHS } from '@common-ui/utils/constants'; +import { MatIconRegistry } from '@angular/material/icon'; +import { DomSanitizer } from '@angular/platform-browser'; +import { TenantsService } from '@common-ui/tenants'; -function loadCustomTheme() { - const cssFileName = getConfig().THEME; - - if (cssFileName) { - const head = document.getElementsByTagName('head')[0]; - const link = document.createElement('link'); - link.id = cssFileName; - link.rel = 'stylesheet'; - link.type = 'text/css'; - link.href = 'assets/styles/themes/' + cssFileName + '.css'; - link.media = 'all'; - head.appendChild(link); - } +export function loadCustomTheme(cssFileName: string) { + const head = document.getElementsByTagName('head')[0]; + const link = document.createElement('link'); + link.id = cssFileName; + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = 'assets/styles/themes/' + cssFileName + '.css'; + link.media = 'all'; + head.appendChild(link); } @Component({ @@ -34,9 +34,12 @@ export class AppComponent { userPreferenceService: UserPreferenceService, renderer: Renderer2, private readonly _router: Router, + private readonly _iconRegistry: MatIconRegistry, + private readonly _sanitizer: DomSanitizer, + private readonly _tenantsService: TenantsService, ) { + const config = getConfig(); renderer.addClass(document.body, userPreferenceService.getTheme()); - loadCustomTheme(); const removeQueryParams = _router.events.pipe( filter((event): event is NavigationEnd => event instanceof NavigationEnd), @@ -47,9 +50,25 @@ export class AppComponent { ); removeQueryParams.subscribe(); - if (getConfig().IS_DOCUMINE) { - document.getElementById('favicon').setAttribute('href', 'assets/icons/documine-logo.ico'); - } + this._tenantsService + .waitForSettingTenant() + .pipe( + tap(() => { + const isDocumine = this._tenantsService.activeTenant.documine; + const logo = isDocumine ? 'documine' : 'redaction'; + _iconRegistry.addSvgIconInNamespace( + 'iqser', + 'logo', + _sanitizer.bypassSecurityTrustResourceUrl(`/assets/icons/general/${logo}-logo.svg`), + ); + if (isDocumine) { + document.getElementById('favicon').setAttribute('href', 'assets/icons/documine-logo.ico'); + } + loadCustomTheme(isDocumine ? APP_TYPE_PATHS.SCM : APP_TYPE_PATHS.REDACT); + }), + take(1), + ) + .subscribe(); } #removeKeycloakQueryParams() { diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 82d09377f..5691a4dc3 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -117,7 +117,7 @@ export const appModuleFactory = (config: AppConfig) => { resetTimeoutOnDuplicate: true, }), TenantsModule.forRoot(), - IqserTranslateModule.forRoot({ pathPrefix: config.BASE_TRANSLATIONS_DIRECTORY || '/assets/i18n/redact/' }), + IqserTranslateModule.forRoot({ pathPrefix: config.BASE_TRANSLATIONS_DIRECTORY }), IqserLoadingModule.forRoot(), ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }), LoggerModule.forRoot(undefined, { diff --git a/apps/red-ui/src/app/modules/icons/icons.module.ts b/apps/red-ui/src/app/modules/icons/icons.module.ts index 734413438..092a67d2a 100644 --- a/apps/red-ui/src/app/modules/icons/icons.module.ts +++ b/apps/red-ui/src/app/modules/icons/icons.module.ts @@ -3,6 +3,8 @@ import { CommonModule } from '@angular/common'; import { MatIconModule, MatIconRegistry } from '@angular/material/icon'; import { DomSanitizer } from '@angular/platform-browser'; import { getConfig } from '@common-ui/services'; +import { LANDING_PAGE_THEMES } from '@common-ui/utils/constants'; +import { TenantsService } from '@common-ui/tenants'; @NgModule({ imports: [CommonModule, MatIconModule], @@ -15,6 +17,7 @@ export class IconsModule { constructor( private readonly _iconRegistry: MatIconRegistry, private readonly _sanitizer: DomSanitizer, + private readonly _tenantsService: TenantsService, ) { const icons = [ 'ai', @@ -85,6 +88,9 @@ export class IconsModule { 'user', 'warning', 'pdftron-action-add-redaction', + 'knecon-logo', + 'redaction-logo', + 'documine-logo', ]; for (const icon of icons) { @@ -95,12 +101,12 @@ export class IconsModule { ); } - const logo = this.config.IS_DOCUMINE ? 'documine-logo' : 'logo'; - + const logo = + this.config.LANDING_PAGE_THEME === LANDING_PAGE_THEMES.MIXED ? 'knecon' : this.config.IS_DOCUMINE ? 'documine' : 'redaction'; _iconRegistry.addSvgIconInNamespace( 'iqser', 'logo', - _sanitizer.bypassSecurityTrustResourceUrl(`/assets/icons/general/${logo}.svg`), + _sanitizer.bypassSecurityTrustResourceUrl(`/assets/icons/general/${logo}-logo.svg`), ); } } diff --git a/apps/red-ui/src/app/utils/main.guard.ts b/apps/red-ui/src/app/utils/main.guard.ts index fc137acbb..ba23864a9 100644 --- a/apps/red-ui/src/app/utils/main.guard.ts +++ b/apps/red-ui/src/app/utils/main.guard.ts @@ -60,7 +60,9 @@ export function mainGuard(): AsyncGuard { } loadingService.stop(); - tenantsService.storeTenant(); + + await tenantsService.storeTenant(); + configService.updateIsDocumine(tenantsService.activeTenant); logger.info('[ROUTES] Main guard finished!'); diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index deb14e6da..c7300f060 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,9 +1,8 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dan1.iqser.cloud", - "APP_NAME": "RedactManager", - "IS_DOCUMINE": false, + "API_URL": "https://dan2.iqser.cloud", + "APP_NAME": "Knecon Cloud", "RULE_EDITOR_DEV_ONLY": false, "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -13,15 +12,15 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dan1.iqser.cloud/auth", + "OAUTH_URL": "https://dan2.iqser.cloud/auth", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview", "ANNOTATIONS_THRESHOLD": 1000, - "THEME": "redact", - "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/redact/", "AVAILABLE_NOTIFICATIONS_DAYS": 30, "AVAILABLE_OLD_NOTIFICATIONS_MINUTES": 60, "NOTIFICATIONS_THRESHOLD": 1000, - "WATERMARK_PREVIEW_PAPER_FORMAT": "a4" + "WATERMARK_PREVIEW_PAPER_FORMAT": "a4", + "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/", + "LANDING_PAGE_THEME": "mixed" } diff --git a/apps/red-ui/src/assets/icons/general/knecon-logo.svg b/apps/red-ui/src/assets/icons/general/knecon-logo.svg new file mode 100644 index 000000000..a309085c4 --- /dev/null +++ b/apps/red-ui/src/assets/icons/general/knecon-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/red-ui/src/assets/icons/general/logo.svg b/apps/red-ui/src/assets/icons/general/redaction-logo.svg similarity index 100% rename from apps/red-ui/src/assets/icons/general/logo.svg rename to apps/red-ui/src/assets/icons/general/redaction-logo.svg diff --git a/apps/red-ui/src/main.ts b/apps/red-ui/src/main.ts index 06db7e505..8e21cfc2e 100644 --- a/apps/red-ui/src/main.ts +++ b/apps/red-ui/src/main.ts @@ -5,6 +5,7 @@ import { bool } from '@common-ui/utils'; import { environment } from '@environments/environment'; import { AppConfig } from '@red/domain'; import { appModuleFactory } from './app/app.module'; +import { LANDING_PAGE_THEMES, THEME_DIRECTORIES } from '@common-ui/utils/constants'; if (environment.production) { enableProdMode(); @@ -13,12 +14,15 @@ if (environment.production) { // https://github.com/angular/angular/issues/11195#issuecomment-248020928 async function bootstrap(appConfig: AppConfig, version: { FRONTEND_APP_VERSION: string }) { const ruleEditorDevOnly = appConfig.RULE_EDITOR_DEV_ONLY as unknown as string | boolean; + const isDocumine = bool(appConfig.LANDING_PAGE_THEME !== LANDING_PAGE_THEMES.REDACT_MANAGER); const config = { ...appConfig, - IS_DOCUMINE: bool(appConfig.IS_DOCUMINE), + IS_DOCUMINE: isDocumine, + THEME: !isDocumine ? THEME_DIRECTORIES.REDACT : THEME_DIRECTORIES.SCM, RULE_EDITOR_DEV_ONLY: typeof ruleEditorDevOnly === 'string' ? ruleEditorDevOnly.toLowerCase() !== 'false' : ruleEditorDevOnly !== false, FRONTEND_APP_VERSION: version.FRONTEND_APP_VERSION, + APP_NAME: appConfig.LANDING_PAGE_THEME === LANDING_PAGE_THEMES.MIXED ? 'Knecon Cloud' : isDocumine ? 'DocuMine' : 'RedactManager', } as AppConfig; console.log('Started with local config: ', config); const appModule = appModuleFactory(config); diff --git a/docker/red-ui/09-set-application-config.sh b/docker/red-ui/09-set-application-config.sh index a9fdb61cb..e98fe713f 100755 --- a/docker/red-ui/09-set-application-config.sh +++ b/docker/red-ui/09-set-application-config.sh @@ -4,13 +4,11 @@ ADMIN_CONTACT_NAME="${ADMIN_CONTACT_NAME:-}" ADMIN_CONTACT_URL="${ADMIN_CONTACT_URL:-}" API_URL="${API_URL:-}" APP_NAME="${APP_NAME:-}" -IS_DOCUMINE="${IS_DOCUMINE:-false}" RULE_EDITOR_DEV_ONLY="${RULE_EDITOR_DEV_ONLY:-true}" AUTO_READ_TIME="${AUTO_READ_TIME:-1.5}" BACKEND_APP_VERSION="${BACKEND_APP_VERSION:-4.7.0}" EULA_URL="${EULA_URL:-}" FRONTEND_APP_VERSION="${FRONTEND_APP_VERSION:-}" - MAX_FILE_SIZE_MB="${MAX_FILE_SIZE_MB:-50}" MAX_RETRIES_ON_SERVER_ERROR="${MAX_RETRIES_ON_SERVER_ERROR:-3}" OAUTH_CLIENT_ID="${OAUTH_CLIENT_ID:-gin-client}" @@ -23,16 +21,14 @@ ANNOTATIONS_THRESHOLD="${ANNOTATIONS_THRESHOLD:-1000}" AVAILABLE_NOTIFICATIONS_DAYS="${AVAILABLE_NOTIFICATIONS_DAYS:-30}" AVAILABLE_OLD_NOTIFICATIONS_MINUTES="${AVAILABLE_OLD_NOTIFICATIONS_MINUTES:-60}" NOTIFICATIONS_THRESHOLD="${NOTIFICATIONS_THRESHOLD:-1000}" -BASE_TRANSLATIONS_DIRECTORY="${BASE_TRANSLATIONS_DIRECTORY:-/assets/i18n/redact/}" -THEME="${THEME:-theme-template}" WATERMARK_PREVIEW_PAPER_FORMAT="${WATERMARK_PREVIEW_PAPER_FORMAT:-a4}" +LANDING_PAGE_THEME="${LANDING_PAGE_THEME:-redactmanager}" echo '{ "ADMIN_CONTACT_NAME":"'"$ADMIN_CONTACT_NAME"'", "ADMIN_CONTACT_URL":"'"$ADMIN_CONTACT_URL"'", "API_URL":"'"$API_URL"'", "APP_NAME":"'"$APP_NAME"'", - "IS_DOCUMINE":"'"$IS_DOCUMINE"'", "RULE_EDITOR_DEV_ONLY":"'"$RULE_EDITOR_DEV_ONLY"'", "AUTO_READ_TIME":"'"$AUTO_READ_TIME"'", "BACKEND_APP_VERSION":"'"$BACKEND_APP_VERSION"'", @@ -46,13 +42,12 @@ echo '{ "RECENT_PERIOD_IN_HOURS":"'"$RECENT_PERIOD_IN_HOURS"'", "SELECTION_MODE":"'"$SELECTION_MODE"'", "MANUAL_BASE_URL":"'"$MANUAL_BASE_URL"'", - "BASE_TRANSLATIONS_DIRECTORY":"'"$BASE_TRANSLATIONS_DIRECTORY"'", - "THEME":"'"$THEME"'", "ANNOTATIONS_THRESHOLD":"'"$ANNOTATIONS_THRESHOLD"'", "AVAILABLE_NOTIFICATIONS_DAYS":"'"$AVAILABLE_NOTIFICATIONS_DAYS"'", "AVAILABLE_OLD_NOTIFICATIONS_MINUTES":"'"$AVAILABLE_OLD_NOTIFICATIONS_MINUTES"'", "NOTIFICATIONS_THRESHOLD":"'"$NOTIFICATIONS_THRESHOLD"'", "WATERMARK_PREVIEW_PAPER_FORMAT":"'"$WATERMARK_PREVIEW_PAPER_FORMAT"'" + "LANDING_PAGE_THEME":"'"$LANDING_PAGE_THEME"'" }' >/usr/share/nginx/html/ui/assets/config/config.json echo 'App config: ' diff --git a/libs/common-ui b/libs/common-ui index cbdfcf4d8..911516add 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit cbdfcf4d8fb3a63417b61604496d8fa81bdea671 +Subproject commit 911516add233c6ae96cbe516322546bc160e4467