import { Component, OnInit, Input } from '@angular/core'; import { Router, ActivatedRoute, RouterModule } from '@angular/router'; import { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/forms'; import { first } from 'rxjs/operators'; import { AuthService } from '../auth.service'; //import { url } from 'inspector'; export interface Login { [key: string]: AbstractControl } @Component({ selector: 'lib-login', templateUrl: 'login.component.html', styleUrls: ['./login.component.css'] }) export class LoginComponent implements OnInit { @Input() routeUrl: string; loginForm: FormGroup; submitClick = false; submitted = false; returnUrl: string; error = ''; constructor( private formBuilder: FormBuilder, private route: ActivatedRoute, private router: Router, private authenticationService: AuthService) { } ngOnInit() { this.loginForm = this.formBuilder.group({ username: ['', Validators.required], password: ['', Validators.required] }); // reset login status this.authenticationService.logout(); this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || this.routeUrl; } get formsData():Login { return this.loginForm.controls; } onLogin() { this.submitted = true; // stop here if form is invalid if (this.loginForm.invalid) { return; } this.submitClick = true; this.authenticationService.login(this.formsData.username.value, this.formsData.password.value) .pipe(first()) .subscribe( data => { this.router.navigate([this.returnUrl]); }, error => { this.error = error; this.submitClick = false; }); } }