Files
SkydiveLogs/Front/skydivelogs-app/src/app/login-user/login-user.component.ts
Sébastien André a755d5f362 Début de fix pour avoir la navigation au clavier dans le
formulaire de login
2020-07-29 12:54:59 +02:00

85 lines
2.1 KiB
TypeScript

import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatInput } from '@angular/material/input';
import { first } from 'rxjs/operators';
import { AuthenticationService } from '../../services/authentication.service';
@Component({
selector: 'app-login-user',
templateUrl: './login-user.component.html',
styleUrls: ['./login-user.component.css']
})
export class LoginUserComponent implements OnInit, AfterViewInit {
loginForm: FormGroup;
loading = false;
submitted = false;
returnUrl: string;
error = '';
@ViewChild('username') userNameInput: MatInput;
constructor(
private formBuilder: FormBuilder,
private route: ActivatedRoute,
private router: Router,
private authenticationService: AuthenticationService
) {
// redirect to home if already logged in
if (this.authenticationService.currentUserValue) {
this.router.navigate(['/']);
}
}
ngAfterViewInit() {
this.userNameInput.focus();
}
ngOnInit() {
this.loginForm = this.formBuilder.group(
{
username: ['', [Validators.required, Validators.minLength(3)]],
password: [
'',
[
Validators.required /*, Validators.pattern("^[A-Za-z0-9_-]{8,15}$")*/
]
]
},
{ updateOn: 'blur' }
);
// get return url from route parameters or default to '/'
this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
}
get formCtrls() {
return this.loginForm.controls;
}
onLoginSubmit() {
this.submitted = true;
// stop here if form is invalid
if (this.loginForm.invalid) {
return;
}
this.loading = true;
this.authenticationService
.login(this.formCtrls.username.value, this.formCtrls.password.value)
.pipe(first())
.subscribe(
data => {
this.router.navigate([this.returnUrl]);
},
error => {
this.error = error;
this.loading = false;
}
);
}
}