diff --git a/src/app/password-reset/password-reset.component.html b/src/app/password-reset/password-reset.component.html index 2ef5a650a450033b8f24353cf7ce1f45c938535c..601982d7fbf08d24e794d79e209b8ec70693a188 100644 --- a/src/app/password-reset/password-reset.component.html +++ b/src/app/password-reset/password-reset.component.html @@ -1,7 +1,11 @@ -<form> +<form (ngSubmit)="resetPassword(email.value)" fxLayout="column" fxLayoutAlign="space-around" + fxLayoutGap="10px"> <mat-form-field class="input-block"> - <input matInput placeholder="E-Mail" /> + <input matInput #email placeholder="E-Mail" [formControl]="usernameFormControl" [errorStateMatcher]="matcher" + name="email"/> + <mat-error *ngIf="usernameFormControl.hasError('required')">Email address is <strong>required</strong>.</mat-error> + <mat-error *ngIf="usernameFormControl.hasError('email') && !usernameFormControl.hasError('required')">Email is not <strong>valid</strong>.</mat-error> </mat-form-field> - <button mat-raised-button color="primary">Submit</button> + <button mat-raised-button color="primary" type="submit">Reset password</button> </form> diff --git a/src/app/password-reset/password-reset.component.ts b/src/app/password-reset/password-reset.component.ts index 47a41730f0a73b2ff67bd944413476db0d72d924..36e2a9c27d1fc815afe7a4ce21db4af225239a26 100644 --- a/src/app/password-reset/password-reset.component.ts +++ b/src/app/password-reset/password-reset.component.ts @@ -1,4 +1,16 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Inject, OnInit } from '@angular/core'; +import { FormControl, FormGroupDirective, NgForm, Validators } from '@angular/forms'; +import { ErrorStateMatcher, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { AuthenticationService } from '../authentication.service'; +import { NotificationService } from '../notification.service'; +import { RegisterComponent } from '../register/register.component'; + +export class PasswordResetErrorStateMatcher implements ErrorStateMatcher { + isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { + const isSubmitted = form && form.submitted; + return (control && control.invalid && (control.dirty || control.touched || isSubmitted)); + } +} @Component({ selector: 'app-password-reset', @@ -7,9 +19,35 @@ import { Component, OnInit } from '@angular/core'; }) export class PasswordResetComponent implements OnInit { - constructor() { } + + usernameFormControl = new FormControl('', [Validators.required, Validators.email]); + + matcher = new PasswordResetErrorStateMatcher(); + + constructor(public authenticationService: AuthenticationService, + public notificationService: NotificationService, + public dialogRef: MatDialogRef<RegisterComponent>, + @Inject(MAT_DIALOG_DATA) public data: any) { + } ngOnInit() { } + resetPassword(username: string): void { + username = username.trim(); + + if (!this.usernameFormControl.hasError('required') && !this.usernameFormControl.hasError('email')) { + this.authenticationService.resetPassword(username).subscribe(result => { + if (result) { + this.notificationService.show('Password was reset. Please check your mail!'); + this.dialogRef.close(); + } else { + this.notificationService.show('Could not reset your password. Is your email address correct?'); + } + }); + } else { + this.notificationService.show('Please fit the requirements shown above.'); + } + } + }