Skip to content
Snippets Groups Projects
app.component.ts 3.27 KiB
Newer Older
import {Component} from "@angular/core";
import {Router, RouterStateSnapshot} from "@angular/router";
import {ChangeAppLanguage, Logout} from "@app/app.action";
import {AppStateModel} from "@app/app.state";
import {BaseDirective} from "@app/shared/directives/base.directive";
import {LanguagesEnum} from "@app/shared/enums/languages.enum";
import {RoutesEnum, urlSeparator} from "@app/shared/enums/routes.enum";
import {StateEnum} from "@app/shared/enums/state.enum";
import {ThemeEnum} from "@app/shared/enums/theme.enum";
import {TranslateService} from "@ngx-translate/core";
import {Navigate, RouterStateModel} from "@ngxs/router-plugin";
import {Select, Store} from "@ngxs/store";
import {Observable} from "rxjs";
import {environment} from "../environments/environment";
import {OAuthService} from "@app/oauth/oauth-service";
Florent Poittevin's avatar
Florent Poittevin committed

@Component({
  selector: "dlcm-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.scss"],
Florent Poittevin's avatar
Florent Poittevin committed
})
export class AppComponent extends BaseDirective {
  theme = environment.theme;
  currentModule: string;
  logo: string;

  @Select((state) => (state[StateEnum.router] as RouterStateModel).state) urlState$: Observable<RouterStateSnapshot>;
  @Select((state) => (state[StateEnum.application] as AppStateModel).appLanguage) appLanguage$: Observable<LanguagesEnum>;
  @Select((state) => (state[StateEnum.application] as AppStateModel).isLoggedIn) isLogged$: Observable<boolean>;
Florent Poittevin's avatar
Florent Poittevin committed

  constructor(private store: Store,
              private oauthService: OAuthService,
              private router: Router,
              private translate: TranslateService) {
    this.setLogo();
    this.setCurrentModule();
  useLanguage(language: LanguagesEnum): void {
    // this.translate.use(language);
    this.store.dispatch(new ChangeAppLanguage(language));
  navigate(route: string) {
    this.store.dispatch(new Navigate([route]));
  }
Florent Poittevin's avatar
Florent Poittevin committed

  private setLogo(): string {
    const basePath = "assets/images/";
    if (environment.theme === ThemeEnum.yareta) {
      this.logo = basePath + "Yareta-v.svg";
      return;
    }
    if (environment.theme === ThemeEnum.dlcm) {
      this.logo = basePath + "DLCM2.svg";

  private setCurrentModule() {
    this.addToSubscription(
      this.urlState$.subscribe(urlState => {
        if (urlState) {

          const url = urlState.url;
          if (url.startsWith(urlSeparator + RoutesEnum.organizationalUnit)) {
            this.currentModule = RoutesEnum.organizationalUnit;
            return;
          }

          if (url.startsWith(urlSeparator + RoutesEnum.access)) {
            this.currentModule = RoutesEnum.access;
            return;
          }

          if (url.startsWith(urlSeparator + RoutesEnum.deposit)) {
            this.currentModule = RoutesEnum.deposit;
            return;
          }

          this.currentModule = null;
        }
      }),
    );
  }
    // TOFIX Should be in app.state.ts but does't work as expected inside this class
    // (need 2 action ChangeLanguage to be take in consideration...)
    this.addToSubscription(this.appLanguage$.subscribe((language: LanguagesEnum) => {
      this.translate.use(language);
    }));
  }

  logout() {
    this.store.dispatch(new Logout());
  }
Florent Poittevin's avatar
Florent Poittevin committed
}