import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { filter, takeWhile, } from 'rxjs/operators'; import { select, Store } from '@ngrx/store'; import { AuthMethod } from '../../core/auth/models/auth.method'; import { getAuthenticationMethods, isAuthenticated, isAuthenticationLoading } from '../../core/auth/selectors'; import { CoreState } from '../../core/core.reducers'; import { AuthService } from '../../core/auth/auth.service'; import { getForgotPasswordPath, getRegisterPath } from '../../app-routing.module'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; /** * /users/sign-in * @class LogInComponent */ @Component({ selector: 'ds-log-in', templateUrl: './log-in.component.html', styleUrls: ['./log-in.component.scss'] }) export class LogInComponent implements OnInit, OnDestroy { /** * A boolean representing if LogInComponent is in a standalone page * @type {boolean} */ @Input() isStandalonePage: boolean; /** * The list of authentication methods available * @type {AuthMethod[]} */ public authMethods: Observable; /** * Whether user is authenticated. * @type {Observable} */ public isAuthenticated: Observable; /** * True if the authentication is loading. * @type {boolean} */ public loading: Observable; /** * Component state. * @type {boolean} */ private alive = true; /** * Whether or not the current user (or anonymous) is authorized to register an account */ canRegister$: Observable; constructor(private store: Store, private authService: AuthService, private authorizationService: AuthorizationDataService) { } ngOnInit(): void { this.authMethods = this.store.pipe( select(getAuthenticationMethods), ); // set loading this.loading = this.store.pipe(select(isAuthenticationLoading)); // set isAuthenticated this.isAuthenticated = this.store.pipe(select(isAuthenticated)); // subscribe to success this.store.pipe( select(isAuthenticated), takeWhile(() => this.alive), filter((authenticated) => authenticated)) .subscribe(() => { this.authService.redirectAfterLoginSuccess(this.isStandalonePage); } ); this.canRegister$ = this.authorizationService.isAuthorized(FeatureID.EPersonRegistration); } ngOnDestroy(): void { this.alive = false; } getRegisterPath() { return getRegisterPath(); } getForgotPath() { return getForgotPasswordPath(); } }