diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3f95b3c32a84902f9493f17f243b4b8a43f28805..7e55b72531e6c090e6fde07cbde003cd7d105497 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -16,6 +16,7 @@ import { AppComponent } from './app.component'; import { AppRoutingModule } from './app-routing.module'; import { RestService } from './rest.service'; import { ToastService } from './services/toast.service'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @NgModule({ declarations: [AppComponent], @@ -25,6 +26,8 @@ import { ToastService } from './services/toast.service'; HttpClientModule, IonicModule.forRoot(), AppRoutingModule, + FormsModule, + ReactiveFormsModule, IonicStorageModule.forRoot() ], providers: [ diff --git a/src/app/auth/login/login.page.html b/src/app/auth/login/login.page.html index 76da5133c13b5e30774403e646321ae2bf592bf9..5562a831129cd506a6a8b61a439d8683370414dd 100644 --- a/src/app/auth/login/login.page.html +++ b/src/app/auth/login/login.page.html @@ -11,7 +11,10 @@ <div padding> <img src="../../../assets/images/bike2gologo.png"> </div> - + <div class="ion-text"> + <h3>Login</h3> + + </div> <div padding> <ion-item> <ion-input type="text" [(ngModel)]="username" placeholder="Username"></ion-input> diff --git a/src/app/auth/login/login.page.scss b/src/app/auth/login/login.page.scss index 4ad0642461878a1522a94215c402cbaa497a9216..e656e08df723500eb203d9a2004d07dba1ed935a 100644 --- a/src/app/auth/login/login.page.scss +++ b/src/app/auth/login/login.page.scss @@ -6,4 +6,7 @@ ion-item { #correctCredentialsmsg{ color:red; font-size: 14px; -} \ No newline at end of file +} +.ion-text{ + text-align: center; + } \ No newline at end of file diff --git a/src/app/auth/register/register.module.ts b/src/app/auth/register/register.module.ts index 0b18f979c7ecd85c0fdffdaf17f15edee6fbf382..04c075bd1982419d52472793856d2867909ba11d 100644 --- a/src/app/auth/register/register.module.ts +++ b/src/app/auth/register/register.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; import { IonicModule } from '@ionic/angular'; @@ -8,11 +7,14 @@ import { RegisterPageRoutingModule } from './register-routing.module'; import { RegisterPage } from './register.page'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + @NgModule({ imports: [ CommonModule, FormsModule, IonicModule, + ReactiveFormsModule, RegisterPageRoutingModule ], declarations: [RegisterPage] diff --git a/src/app/auth/register/register.page.html b/src/app/auth/register/register.page.html index 49983a6d199120b9ceb89e370573fce038b5970f..24e2c870886aad9448a31dd6e257091461102a7b 100644 --- a/src/app/auth/register/register.page.html +++ b/src/app/auth/register/register.page.html @@ -5,38 +5,68 @@ </ion-header> <ion-content> - <ion-grid> - <ion-row justify-content-center> - <ion-col align-self-center size-md="6" size-lg="5" size-xs="12"> - <div padding> - <img src="../../../assets/images/bike2gologo.png"> - </div> + + <form [formGroup]="angForm" novalidate> + <ion-grid> + <ion-row justify-content-center> + <ion-col align-self-center size-md="6" size-lg="5" size-xs="12"> + <div padding> + <img src="../../../assets/images/bike2gologo.png"> + </div> + <div class="ion-text"> + <h3>Registration</h3> + + </div> + + <ion-item ><ion-input type="text" formControlName="firstName" placeholder="Enter First Name"></ion-input></ion-item> + <div + *ngIf="angForm.controls['firstName'].invalid && (angForm.controls['firstName'].dirty || angForm.controls['firstName'].touched)" + class="alert-danger"> + <div *ngIf="angForm.controls['firstName'].errors.required"> + First Name is required. + </div> + </div> + <ion-item > + <ion-input type="text" formControlName="lastName" placeholder="Enter Last Name"></ion-input> + </ion-item> + + <div + *ngIf="angForm.controls['lastName'].invalid && (angForm.controls['lastName'].dirty || angForm.controls['lastName'].touched)" + class="alert-danger"> + <div *ngIf="angForm.controls['lastName'].errors.required"> + Last Name is required. + </div> + </div> + <ion-item ><ion-input type="text" formControlName="email" placeholder="Enter Email"></ion-input></ion-item> + + <div + *ngIf="angForm.controls['email'].invalid && (angForm.controls['email'].dirty || angForm.controls['email'].touched)" + class="alert-danger"> + <div *ngIf="angForm.controls['email'].errors.required"> + Email is required. + </div> + </div> - <div padding> - <ion-item> - <ion-input type="text" [(ngModel)]="firstName" placeholder="Enter First Name"></ion-input> - </ion-item> - <ion-item> - <ion-input type="text" [(ngModel)]="lastName" placeholder="Enter Last Name"></ion-input> - </ion-item> - <ion-item> - <ion-input type="text" [(ngModel)]="email" placeholder="Email"></ion-input> - </ion-item> + <ion-item ><ion-input type="password" formControlName="password" placeholder="Password"></ion-input></ion-item> + + <div + *ngIf="angForm.controls['password'].invalid && (angForm.controls['password'].dirty || angForm.controls['password'].touched)" + class="alert-danger"> + <div *ngIf="angForm.controls['password'].errors.required"> + Password is required. + </div> + </div> + + + <div id="correctCredentialsmsg" padding *ngIf="correctCredentials"> + Wrong Credentials ! + </div> - - <ion-item> - <ion-input type="password" [(ngModel)]="password" placeholder="Password"></ion-input> - </ion-item> - </div> - - <div id="correctCredentialsmsg" padding *ngIf="correctCredentials"> - Wrong Credentials ! - </div> - - <div padding> - <ion-button size="large" expand="block" (click)="submitRegister()">Register</ion-button> - </div> - </ion-col> - </ion-row> - </ion-grid> + <div padding> + <ion-button [disabled]="angForm.pristine || angForm.invalid" size="large" expand="block" (click)="submitRegister()">Register</ion-button> + </div> + </ion-col> + </ion-row> + </ion-grid> + </form> </ion-content> \ No newline at end of file diff --git a/src/app/auth/register/register.page.scss b/src/app/auth/register/register.page.scss index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d528771b70fa096b2df683521c0ed23810f20623 100644 --- a/src/app/auth/register/register.page.scss +++ b/src/app/auth/register/register.page.scss @@ -0,0 +1,11 @@ +.alert-danger{ + color: red; + } + ion-item { + border: solid 1px lightgray; + border-radius: 10px; + margin-bottom: 10px; +} +.ion-text{ + text-align: center; +} diff --git a/src/app/auth/register/register.page.ts b/src/app/auth/register/register.page.ts index bfa94bb6f01b5d801e316b4612dfb350f9aa6a58..96152e11bc93cf4ba6ee55bd1f6d47da434622ac 100644 --- a/src/app/auth/register/register.page.ts +++ b/src/app/auth/register/register.page.ts @@ -2,7 +2,9 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { HttpClient } from '@angular/common/http'; import { RestService } from 'src/app/rest.service'; +import { ToastService } from '../../services/toast.service'; import { Router } from '@angular/router'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; @Component({ selector: 'app-register', @@ -10,7 +12,7 @@ import { Router } from '@angular/router'; styleUrls: ['./register.page.scss'], }) export class RegisterPage implements OnInit { - + public angForm: FormGroup; registerApi: Observable<any>; correctCredentials: boolean; @@ -18,11 +20,35 @@ export class RegisterPage implements OnInit { password: ""; lastName: ""; firstName: ""; - constructor(private router: Router, public httpClient: HttpClient, public restService: RestService) { } + + constructor(private router: Router, + public httpClient: HttpClient, + public restService: RestService, + private toastService: ToastService, + private fb: FormBuilder) { + this.createForm(); + + } ngOnInit() { + } + createForm() { + this.angForm = this.fb.group({ + firstName: ['',[ Validators.required ]], + lastName: ['', [Validators.required ]], + email: ['',[ Validators.required, Validators.email]], + password: ['', [Validators.required,Validators.minLength(4) ]], + + + + }); + } submitRegister() { + if (this.angForm.invalid) { + return; + } + this.registerApi = this.httpClient.post('http://193.196.52.237:8081/register', { "email": this.email, "password": this.password, @@ -33,10 +59,13 @@ export class RegisterPage implements OnInit { .subscribe((data) => { console.log('my data: ', data); this.restService.setToken(data.token); + this.toastService.showToast("Registration Successful!") this.router.navigateByUrl('/login'); + }, (error) => { console.log(error); - this.correctCredentials = true; + this.toastService.showToast("Registration failed!") + }); } }