Added tenant css configuration on login pipeline after principal/me

This commit is contained in:
Diamantis Tziotzios 2024-06-19 18:57:52 +03:00
parent 02a60a35b4
commit 0174981a70
5 changed files with 41 additions and 40 deletions

View File

@ -10,17 +10,6 @@
</div> </div>
</mat-sidenav-content> </mat-sidenav-content>
</mat-sidenav-container> </mat-sidenav-container>
<!-- <div class="sidebar sidebar-shadow" data-color="danger" data-background-color="white" data-image="./assets/images/logan-troxell-9187-unsplash.jpg">
<app-sidebar></app-sidebar>
<div class="sidebar-background" style="background-image: url(./assets/images/logan-troxell-9187-unsplash.jpg)">
</div>
</div>
<div class="main-panel">
<app-navbar></app-navbar>
<div>
<router-outlet (activate)='onActivate($event)' (deactivate)='onDeactivate($event)'></router-outlet>
</div>
</div> -->
</div> </div>
<app-notification *ngIf="!showOnlyRouterOutlet"></app-notification> <app-notification *ngIf="!showOnlyRouterOutlet"></app-notification>
<router-outlet *ngIf="showOnlyRouterOutlet"></router-outlet> <router-outlet *ngIf="showOnlyRouterOutlet"></router-outlet>

View File

@ -23,6 +23,7 @@ import { SideNavService } from './core/services/sidenav/side-nav.sevice';
import { TenantConfigurationService } from './core/services/tenant-configuration/tenant-configuration.service'; import { TenantConfigurationService } from './core/services/tenant-configuration/tenant-configuration.service';
import { TimezoneService } from './core/services/timezone/timezone-service'; import { TimezoneService } from './core/services/timezone/timezone-service';
import { BreadcrumbService } from './ui/misc/breadcrumb/breadcrumb.service'; import { BreadcrumbService } from './ui/misc/breadcrumb/breadcrumb.service';
import { TenantHandlingService } from './core/services/tenant/tenant-handling.service';
declare const gapi: any; declare const gapi: any;
@ -41,6 +42,7 @@ export class AppComponent implements OnInit, AfterViewInit {
helpContentEnabled: boolean; helpContentEnabled: boolean;
private statusChangeSubscription: Subscription; private statusChangeSubscription: Subscription;
showOnlyRouterOutlet = false; showOnlyRouterOutlet = false;
cssConfigLoaded = false;
@ViewChild('sidenav') sidenav: MatSidenav; @ViewChild('sidenav') sidenav: MatSidenav;
@ -58,7 +60,7 @@ export class AppComponent implements OnInit, AfterViewInit {
private language: LanguageService, private language: LanguageService,
private configurationService: ConfigurationService, private configurationService: ConfigurationService,
private matomoService: MatomoService, private matomoService: MatomoService,
private tenantConfigurationService: TenantConfigurationService, private tenantHandlingService: TenantHandlingService,
private sidenavService: SideNavService, private sidenavService: SideNavService,
private breadcrumbService: BreadcrumbService private breadcrumbService: BreadcrumbService
) { ) {
@ -260,33 +262,9 @@ export class AppComponent implements OnInit, AfterViewInit {
this.authentication.getAuthenticationStateObservable().subscribe(authenticationState => { this.authentication.getAuthenticationStateObservable().subscribe(authenticationState => {
if (authenticationState.loginStatus === LoginStatus.LoggedIn) { if (authenticationState.loginStatus === LoginStatus.LoggedIn) {
this.loadCssColors(); this.tenantHandlingService.loadAndApplyTenantCssColors();
} }
}); });
this.loadCssColors();
}
private loadCssColors() {
if (this.authentication.currentAccountIsAuthenticated() && this.authentication.selectedTenant()) {
this.tenantConfigurationService.getCurrentTenantType(TenantConfigurationType.CssColors, [
nameof<TenantConfiguration>(x => x.type),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor2)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor3)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.secondaryColor)].join('.'),
])
.pipe(map(data => data as TenantConfiguration))
.subscribe(
data => {
if (data?.cssColors) {
if (data.cssColors.primaryColor) document.documentElement.style.setProperty(`--primary-color`, data.cssColors.primaryColor);
if (data.cssColors.primaryColor2) document.documentElement.style.setProperty(`--primary-color-2`, data.cssColors.primaryColor2);
if (data.cssColors.primaryColor3) document.documentElement.style.setProperty(`--primary-color-3`, data.cssColors.primaryColor3);
if (data.cssColors.secondaryColor) document.documentElement.style.setProperty(`--secondary-color`, data.cssColors.secondaryColor);
}
},
);
}
} }
toggleNavbar(event) { toggleNavbar(event) {

View File

@ -173,9 +173,11 @@ export class AuthService extends BaseService {
exhaustMap(() => forkJoin([ exhaustMap(() => forkJoin([
this.accessToken ? this.ensureTenant(tenantCode ?? this.selectedTenant() ?? 'default') : of(false), this.accessToken ? this.ensureTenant(tenantCode ?? this.selectedTenant() ?? 'default') : of(false),
this.accessToken ? this.principalService.me(httpParams) : of(null), this.accessToken ? this.principalService.me(httpParams) : of(null),
this.accessToken ? this.tenantHandlingService.loadTenantCssColors() : of(null),
])), ])),
map((item) => { map((item) => {
this.currentAccount(item[1]); this.currentAccount(item[1]);
this.tenantHandlingService.applyTenantCssColors(item[2]);
return true; return true;
}) })
); );

View File

@ -1,16 +1,24 @@
import { DOCUMENT, LocationStrategy } from '@angular/common'; import { DOCUMENT, LocationStrategy } from '@angular/common';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { PRIMARY_OUTLET, Router, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree } from '@angular/router'; import { PRIMARY_OUTLET, Router, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree } from '@angular/router';
import { TenantConfigurationType } from '@app/core/common/enum/tenant-configuration-type';
import { CssColorsTenantConfiguration, TenantConfiguration } from '@app/core/model/tenant-configuaration/tenant-configuration';
import { BaseService } from '@common/base/base.service';
import { Observable, takeUntil } from 'rxjs';
import { nameof } from 'ts-simple-nameof';
import { TenantConfigurationService } from '../tenant-configuration/tenant-configuration.service';
@Injectable() @Injectable()
export class TenantHandlingService { export class TenantHandlingService extends BaseService {
constructor( constructor(
@Inject(DOCUMENT) private readonly document: Document, @Inject(DOCUMENT) private readonly document: Document,
private readonly locationStrategy: LocationStrategy, private readonly locationStrategy: LocationStrategy,
private readonly router: Router, private readonly router: Router,
private urlSerializer: UrlSerializer private urlSerializer: UrlSerializer,
private tenantConfigurationService: TenantConfigurationService
) { ) {
super();
} }
extractTenantCodeFromUrlPath(path: string): string { extractTenantCodeFromUrlPath(path: string): string {
@ -56,4 +64,29 @@ export class TenantHandlingService {
getBaseUrl(): string { getBaseUrl(): string {
return this.document.location.origin + this.locationStrategy.getBaseHref(); return this.document.location.origin + this.locationStrategy.getBaseHref();
} }
public loadAndApplyTenantCssColors() {
this.loadTenantCssColors().pipe(takeUntil(this._destroyed)).subscribe(x => this.applyTenantCssColors(x))
}
public loadTenantCssColors(): Observable<TenantConfiguration> {
return this.tenantConfigurationService.getCurrentTenantType(TenantConfigurationType.CssColors, [
nameof<TenantConfiguration>(x => x.type),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor2)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.primaryColor3)].join('.'),
[nameof<TenantConfiguration>(x => x.cssColors), nameof<CssColorsTenantConfiguration>(x => x.secondaryColor)].join('.'),
]);
}
public applyTenantCssColors(data: TenantConfiguration) {
if (data?.cssColors) {
if (data.cssColors.primaryColor) document.documentElement.style.setProperty(`--primary-color`, data.cssColors.primaryColor);
if (data.cssColors.primaryColor2) document.documentElement.style.setProperty(`--primary-color-2`, data.cssColors.primaryColor2);
if (data.cssColors.primaryColor3) document.documentElement.style.setProperty(`--primary-color-3`, data.cssColors.primaryColor3);
if (data.cssColors.secondaryColor) document.documentElement.style.setProperty(`--secondary-color`, data.cssColors.secondaryColor);
}
}
} }

View File

@ -52,7 +52,6 @@
"lockInterval": 60000, "lockInterval": 60000,
"guideAssets": "assets/images/guide", "guideAssets": "assets/images/guide",
"allowOrganizationCreator": true, "allowOrganizationCreator": true,
"useSplash": false,
"orcidPath": "https://orcid.org/", "orcidPath": "https://orcid.org/",
"maxFileSizeInMB": 10, "maxFileSizeInMB": 10,
"authProviders": { "authProviders": {