SES-86 added validator into sign in and sing up components, changed styles

This commit is contained in:
Natalia Gawron 2020-12-12 18:51:08 +01:00
parent 530c49f1b7
commit 4ed509bd0a
9 changed files with 163 additions and 139 deletions

View File

@ -1,5 +1,5 @@
<body> <body>
<div class="container"> <div>
<router-outlet></router-outlet> <router-outlet></router-outlet>
</div> </div>
</body> </body>

View File

@ -1,6 +1,6 @@
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { SelectRoleComponent } from './components/select-role/select-role.component'; import { SelectRoleComponent } from './components/select-role/select-role.component';
@ -29,6 +29,7 @@ import {
BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }), BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
HttpClientModule, HttpClientModule,
FormsModule, FormsModule,
ReactiveFormsModule,
appRoutingModule, appRoutingModule,
BrowserAnimationsModule, BrowserAnimationsModule,
MatInputModule, MatInputModule,

View File

@ -47,16 +47,25 @@ input {
font-size: 20px; font-size: 20px;
} }
@media (max-width: 768px) { @media (max-width: 400px) {
.container { .container {
width: 350px; margin-left: 0%;
padding-top: 30%; width: 300px;
padding-top: 5%;
}
}
@media (min-width: 401px) {
.container {
margin-left: 1%;
width: 450px;
padding-top: 10%;
} }
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.container { .container {
width: 550px; width: 550px;
padding-top: 10%; padding-top: 5%;
} }
} }

View File

@ -1,56 +1,49 @@
<div class="container"> <div [formGroup]="signUpFormGroup" class="container">
<div formGroupName="newAccount" class="container">
<mat-icon matSuffix class="arrow-back" (click)="GoToLoginPage()">arrow_back</mat-icon> <mat-icon matSuffix class="arrow-back" (click)="GoToLoginPage()">arrow_back</mat-icon>
<div class="primary-text header">Create an Account</div> <div class="primary-text header">Create an Account</div>
<mat-form-field class="form-container"> <mat-form-field class="form-container">
<input <input
matInput matInput
formControlName="username"
placeholder="Username" placeholder="Username"
type="text" type="text"
required required
name="username" name="username">
ngModel <mat-error *ngIf="signUpFormGroup?.get('newAccount')?.controls?.username?.hasError('required')">
#username="ngModel"> Username is required
<mat-error *ngIf="username.invalid">Username is required</mat-error> </mat-error>
<mat-icon matSuffix>person</mat-icon> <mat-icon matSuffix>person</mat-icon>
</mat-form-field> </mat-form-field>
<mat-form-field class="form-container"> <mat-form-field class="form-container">
<input <input
matInput matInput
formControlName="password"
required
placeholder="Password" placeholder="Password"
type="password" type="password"
required name="password"/>
minlength="6"
name="password"
ngModel
#password="ngModel">
<mat-icon matSuffix>lock</mat-icon> <mat-icon matSuffix>lock</mat-icon>
<mat-error <mat-error *ngIf="signUpFormGroup?.get('newAccount')?.controls?.password?.hasError('required')">
*ngIf="password.errors && password.errors.required">
Password is required Password is required
</mat-error> </mat-error>
<mat-error
*ngIf="password.errors && password.errors.minlength">
Password must be of length 6
</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field class="form-container"> <mat-form-field class="form-container">
<input <input
matInput matInput
formControlName="confirmPassword"
required
placeholder="Confirm Password" placeholder="Confirm Password"
type="password" type="password"
required name="confirmPassword"/>
name="confirmPassword" <mat-icon matSuffix >lock</mat-icon>
ngModel <mat-error *ngIf="signUpFormGroup?.get('newAccount')?.controls?.confirmPassword?.hasError('required')">
#password="ngModel">
<mat-icon matSuffix>lock</mat-icon>
<mat-error
*ngIf="password.errors && password.errors.required">
Confirm your password Confirm your password
</mat-error> </mat-error>
<mat-error <mat-error class="password-mismatch" *ngIf="signUpFormGroup?.get('newAccount')?.controls?.confirmPassword?.hasError('mismatch')">
*ngIf="password.errors && password!==confirmPassword">
Please make sure your passwords match Please make sure your passwords match
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
@ -59,7 +52,7 @@
mat-raised-button mat-raised-button
class="btn-primary form-container" class="btn-primary form-container"
(click)="GoToLoginPage()"> (click)="GoToLoginPage()">
<mat-icon matSuffix class="arrow-forward" (click)="onArrowForwardClick()">arrow_forward</mat-icon> <mat-icon matSuffix class="arrow-forward">arrow_forward</mat-icon>
</button> </button>
</div> </div>
</div>

View File

@ -1,4 +1,5 @@
import { Component, ChangeDetectorRef } from '@angular/core'; import { Component } from '@angular/core';
import { FormGroup, ValidationErrors, ValidatorFn, Validators, FormBuilder } from '@angular/forms';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
@Component({ @Component({
@ -7,13 +8,20 @@ import { Router } from '@angular/router';
styleUrls: ['./registration.component.css'] styleUrls: ['./registration.component.css']
}) })
export class RegistrationComponent { export class RegistrationComponent {
constructor(private router: Router, private formBuilder: FormBuilder) {}
isExpanded = false; isExpanded = false;
username = ""; public signUpFormGroup: FormGroup = this.formBuilder.group({
password = ""; newAccount: this.formBuilder.group({
confirmPassword = ""; username: ['', [
Validators.required]],
constructor(private router: Router, private cdRef:ChangeDetectorRef) {} password: ['', [
Validators.required,
]],
confirmPassword: ['', [Validators.required, passwordMatchValidator]]
})
});
collapse() { collapse() {
this.isExpanded = false; this.isExpanded = false;
@ -26,8 +34,11 @@ export class RegistrationComponent {
toggle() { toggle() {
this.isExpanded = !this.isExpanded; this.isExpanded = !this.isExpanded;
} }
}
ngAfterViewChecked(){
this.cdRef.detectChanges(); export const passwordMatchValidator: ValidatorFn = (formGroup: FormGroup): ValidationErrors | null => {
} const parent = formGroup.parent as FormGroup;
if (!parent) return null;
return parent.get('password').value === parent.get('confirmPassword').value ?
null : { 'mismatch': true };
} }

View File

@ -32,7 +32,7 @@
@media (max-width: 768px) { @media (max-width: 768px) {
.container { .container {
padding-top: 70%; padding-top: 50%;
} }
.button { .button {
margin: 10px; margin: 10px;
@ -47,7 +47,7 @@
@media (min-width: 768px) { @media (min-width: 768px) {
.container { .container {
padding-top: 20%; padding-top: 10%;
} }
.button { .button {
margin: 20px; margin: 20px;

View File

@ -47,16 +47,25 @@ input {
font-size: 20px; font-size: 20px;
} }
@media (max-width: 768px) { @media (max-width: 400px) {
.container { .container {
width: 350px; margin-left: 0%;
padding-top: 30%; width: 300px;
padding-top: 5%;
}
}
@media (min-width: 401px) {
.container {
margin-left: 1%;
width: 450px;
padding-top: 10%;
} }
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.container { .container {
width: 550px; width: 550px;
padding-top: 10%; padding-top: 5%;
} }
} }

View File

@ -1,38 +1,34 @@
<div class="container"> <div [formGroup]="signInFormGroup" class="container">
<div formGroupName="signIn" class="container">
<mat-icon matSuffix class="arrow-back" (click)="onArrowBackClick()">arrow_back</mat-icon> <mat-icon matSuffix class="arrow-back" (click)="onArrowBackClick()">arrow_back</mat-icon>
<div class="primary-text header">Sign In</div> <div class="primary-text header">Sign In</div>
<mat-form-field class="form-container"> <mat-form-field class="form-container">
<input <input
matInput matInput
formControlName="username"
placeholder="Username" placeholder="Username"
type="text" type="text"
required required
name="username" name="username">
ngModel <mat-error *ngIf="signInFormGroup?.get('signIn')?.controls?.username?.hasError('required')">
#username="ngModel"> Username is required
<mat-error *ngIf="username.invalid">Username is required</mat-error> </mat-error>
<mat-icon matSuffix>person</mat-icon> <mat-icon matSuffix>person</mat-icon>
</mat-form-field> </mat-form-field>
<mat-form-field class="form-container"> <mat-form-field class="form-container">
<input <input
matInput matInput
formControlName="password"
required
placeholder="Password" placeholder="Password"
type="password" type="password"
required name="password"/>
minlength="6"
name="password"
ngModel
#password="ngModel">
<mat-icon matSuffix>lock</mat-icon> <mat-icon matSuffix>lock</mat-icon>
<mat-error <mat-error *ngIf="signInFormGroup?.get('signIn')?.controls?.password?.hasError('required')">
*ngIf="password.errors && password.errors.required">
Password is required Password is required
</mat-error> </mat-error>
<mat-error
*ngIf="password.errors && password.errors.minlength">
Password must be of length 6
</mat-error>
</mat-form-field> </mat-form-field>
<button <button
@ -49,5 +45,6 @@
(click)="onRegisterButtonClick()"> (click)="onRegisterButtonClick()">
REGISTER REGISTER
</button> </button>
</div> </div>
</div>

View File

@ -1,4 +1,5 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { FormGroup, Validators, FormBuilder } from '@angular/forms';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
@Component({ @Component({
@ -9,13 +10,16 @@ import { Router } from '@angular/router';
export class SignInComponent { export class SignInComponent {
isExpanded = false; isExpanded = false;
username = ""; constructor(private router: Router, private formBuilder: FormBuilder) {}
password = "";
constructor(private router: Router) {} public signInFormGroup: FormGroup = this.formBuilder.group({
signIn: this.formBuilder.group({
ngOnInit(): void { username: ['', [
} Validators.required]],
password: ['', [
Validators.required]]
})
});
onLoginButtonClick(){ onLoginButtonClick(){
//TODO connect with backend and added router //TODO connect with backend and added router