import { Location } from '@angular/common'; import { Component, OnInit } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { SessionStorageService } from 'ngx-webstorage'; import { VERSION } from 'app/app.constants'; import { LANGUAGES } from 'app/config/language.constants'; import { Account } from 'app/core/auth/account.model'; import { AccountService } from 'app/core/auth/account.service'; import { OAuth2Config } from 'app/core/auth/oauth2-config.model'; import { OAuth2ConfigService } from 'app/core/auth/oauth2-config.service'; import { LoginService } from 'app/login/login.service'; import { ProfileService } from 'app/layouts/profiles/profile.service'; import { EntityNavbarItems } from 'app/entities/entity-navbar-items'; import { WatchlistManager } from 'app/shared/watchlist/watchlist-manager'; import { PagesService } from 'app/shared/service/pages-service'; import { ApplicationInfoService } from 'app/core/application/applicationInfo.service'; @Component({ selector: 'jhi-navbar', templateUrl: './navbar.component.html', styleUrls: ['./navbar.component.scss'], }) export class NavbarComponent implements OnInit { inProduction?: boolean; isNavbarCollapsed = true; languages = LANGUAGES; openAPIEnabled?: boolean; version = ''; contentEditable = false; oerLink?: String; account: Account | null = null; entitiesNavbarItems: any[] = []; authenticationError = false; loginForm = this.fb.group({ username: [''], password: [''], rememberMe: [false], }); public configs: OAuth2Config[] = []; constructor( private loginService: LoginService, public translateService: TranslateService, private sessionStorageService: SessionStorageService, private accountService: AccountService, private fb: FormBuilder, private profileService: ProfileService, private router: Router, private location: Location, // for redirect in OAuth2 public oAuth2ConfigService: OAuth2ConfigService, private watchlistManager: WatchlistManager, private pagesService: PagesService, private applicationInfoService: ApplicationInfoService ) { if (VERSION) { this.version = VERSION.toLowerCase().startsWith('v') ? VERSION : `v${VERSION}`; } } ngOnInit(): void { this.entitiesNavbarItems = EntityNavbarItems; this.profileService.getProfileInfo().subscribe(profileInfo => { this.inProduction = profileInfo.inProduction; this.openAPIEnabled = profileInfo.openAPIEnabled; }); this.oAuth2ConfigService.getAllConfigs().subscribe((loadedConfigs: OAuth2Config[]) => { this.configs = loadedConfigs; }); this.accountService.getAuthenticationState().subscribe(account => { this.account = account; }); this.applicationInfoService.loadOerLink().subscribe( (res: string) => { this.oerLink = res; }, error => // eslint-disable-next-line no-console console.error(error) ); } changeLanguage(languageKey: string): void { this.sessionStorageService.store('locale', languageKey); this.translateService.use(languageKey); } collapseNavbar(): void { this.isNavbarCollapsed = true; } resetPagesCache(): void { this.pagesService.resetCache().subscribe(() => { // eslint-disable-next-line no-console console.log('Successfully emptied page cache'); }); } isAuthenticated(): boolean { return this.accountService.isAuthenticated(); } // eslint-disable-next-line @typescript-eslint/no-unused-vars toggleEditable(event: Event):void { this.contentEditable = !this.contentEditable; /* test = (event.currentTarget.checked)!; if (test) { this.contentEditable = true; } else { this.contentEditable = false; } */ } getCurrentBookmarkListName(): string { if (this.watchlistManager.currentWatchlist) { const name = this.watchlistManager.currentWatchlist.userWatchList.name; if (name) { return name; } } return ''; } // login(): void { // this.loginModalService.open(); // } login(): void { this.loginService .login({ username: this.loginForm.get('username')!.value, password: this.loginForm.get('password')!.value, rememberMe: this.loginForm.get('rememberMe')!.value, }) .subscribe( () => { this.authenticationError = false; if ( this.router.url === '/account/register' || this.router.url.startsWith('/account/activate') || this.router.url.startsWith('/account/reset/') ) { this.router.navigate(['']); } }, () => (this.authenticationError = true) ); } loginWithGitLab(registrationId: string): void { location.href = `${location.origin}${this.location.prepareExternalUrl('oauth2/authorization/' + registrationId)}`; // If you have configured multiple OIDC providers, then, you can update this URL to /login. // It will show a Spring Security generated login page with links to configured OIDC providers. } logout(): void { this.collapseNavbar(); this.loginService.logout(); this.router.navigate(['']); } toggleNavbar(): void { this.isNavbarCollapsed = !this.isNavbarCollapsed; } getImageUrl(): string { // eslint-disable-next-line @typescript-eslint/no-unsafe-return return this.isAuthenticated() ? this.accountService.getImageUrl() : ''; } }