🚸 Improved login and registration modal

pull/26/head
Alexis Feron 1 month ago
parent f3c229628c
commit 6934dddda4

@ -17,7 +17,7 @@
'opacity-0 scale-50 pointer-events-none': !isLoginModalOpen, 'opacity-0 scale-50 pointer-events-none': !isLoginModalOpen,
'opacity-100 scale-100': isLoginModalOpen 'opacity-100 scale-100': isLoginModalOpen
}" }"
class="fixed top-0 right-0 left-0 z-50 flex justify-center items-center w-full h-full transition-opacity transition-transform duration-300 ease-in-out" class="fixed top-0 right-0 left-0 z-50 flex justify-center items-center w-full h-full transition-transform duration-300 ease-in-out"
> >
<div class="relative p-4 w-full max-w-md max-h-full"> <div class="relative p-4 w-full max-w-md max-h-full">
<!-- Modal content --> <!-- Modal content -->
@ -29,7 +29,7 @@
class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600" class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600"
> >
<h3 class="text-xl font-semibold text-gray-900 dark:text-white"> <h3 class="text-xl font-semibold text-gray-900 dark:text-white">
Sign in to our platform Se connecter à Memory Map
</h3> </h3>
<button <button
type="button" type="button"
@ -51,7 +51,7 @@
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
/> />
</svg> </svg>
<span class="sr-only">Close modal</span> <span class="sr-only">Fermer la fenêtre</span>
</button> </button>
</div> </div>
<!-- Modal body --> <!-- Modal body -->
@ -61,7 +61,7 @@
<label <label
for="login" for="login"
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
>Your login</label >Identifiant</label
> >
<input <input
formControlName="login" formControlName="login"
@ -69,7 +69,7 @@
name="login" name="login"
id="login" id="login"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
placeholder="user" placeholder="ex: captain24"
required required
/> />
</div> </div>
@ -77,7 +77,7 @@
<label <label
for="password" for="password"
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
>Your password</label >Mot de passe</label
> >
<input <input
formControlName="password" formControlName="password"
@ -102,13 +102,13 @@
<label <label
for="remember" for="remember"
class="ms-2 text-sm font-medium text-gray-900 dark:text-gray-300" class="ms-2 text-sm font-medium text-gray-900 dark:text-gray-300"
>Remember me</label >Se souvenir de moi
> </label>
</div> </div>
<a <a
href="#" href="#"
class="text-sm text-blue-700 hover:underline dark:text-blue-500" class="text-sm text-blue-700 hover:underline dark:text-blue-500"
>Lost Password?</a >Mot de passe oublié ?</a
> >
</div> </div>
<div *ngIf="errorMessage" class="text-red-500 text-sm"> <div *ngIf="errorMessage" class="text-red-500 text-sm">
@ -118,12 +118,14 @@
(click)="login()" (click)="login()"
class="w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800" class="w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"
> >
Login to your account Se connecter
</button> </button>
<div class="text-sm font-medium text-gray-500 dark:text-gray-300"> <div class="text-sm font-medium text-gray-500 dark:text-gray-300">
Not registered? Vous n'êtes pas encore inscrit ?
<a href="#" class="text-blue-700 hover:underline dark:text-blue-500" <a
>Create account</a (click)="openRegisterModal()"
class="text-blue-700 hover:underline dark:text-blue-500"
>Créer un compte</a
> >
</div> </div>
</form> </form>

@ -90,4 +90,9 @@ export class LoginPageComponent {
closeLoginModal() { closeLoginModal() {
this.modalService.closeModal(this.modalId); this.modalService.closeModal(this.modalId);
} }
openRegisterModal() {
this.modalService.closeModal(this.modalId);
this.modalService.openModal('register-modal');
}
} }

@ -37,7 +37,7 @@
class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600" class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600"
> >
<h3 class="text-xl font-semibold text-gray-900 dark:text-white"> <h3 class="text-xl font-semibold text-gray-900 dark:text-white">
Formulaire d'inscription S'inscrire à Memory Map
</h3> </h3>
<button <button
type="button" type="button"
@ -59,7 +59,7 @@
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"
/> />
</svg> </svg>
<span class="sr-only">Close modal</span> <span class="sr-only">Fermer la fenêtre</span>
</button> </button>
</div> </div>
<!-- Modal body --> <!-- Modal body -->
@ -122,6 +122,14 @@
> >
Démarrer l'aventure ! Démarrer l'aventure !
</button> </button>
<div class="text-sm font-medium text-gray-500 dark:text-gray-300">
Déjà un compte ?
<a
(click)="openLoginModal()"
class="text-blue-700 hover:underline dark:text-blue-500"
>Se connecter</a
>
</div>
</form> </form>
</div> </div>
</div> </div>

@ -8,8 +8,10 @@ import {
Validators, Validators,
} from '@angular/forms'; } from '@angular/forms';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { Subscription } from 'rxjs';
import { User } from '../../model/User'; import { User } from '../../model/User';
import { LocalStorageService } from '../../services/local-storage/local-storage.service'; import { LocalStorageService } from '../../services/local-storage/local-storage.service';
import { ModalService } from '../../services/modal/modal.service';
import { RegisterService } from '../../services/register/register.service'; import { RegisterService } from '../../services/register/register.service';
@Component({ @Component({
@ -22,11 +24,14 @@ export class RegisterPageComponent {
user: User = { login: '', password: '' }; user: User = { login: '', password: '' };
errorMessage: string = ''; errorMessage: string = '';
isRegisterModalOpen: boolean = false; isRegisterModalOpen: boolean = false;
modalId: string = 'register-modal';
private modalSub!: Subscription;
constructor( constructor(
private registerService: RegisterService, private registerService: RegisterService,
private fb: FormBuilder, private fb: FormBuilder,
private localStorageService: LocalStorageService, private localStorageService: LocalStorageService,
private modalService: ModalService,
private router: Router private router: Router
) { ) {
this.userForm = this.fb.group( this.userForm = this.fb.group(
@ -45,6 +50,18 @@ export class RegisterPageComponent {
); );
} }
ngOnInit() {
this.modalSub = this.modalService
.getModalState(this.modalId)
.subscribe((open) => {
this.isRegisterModalOpen = open;
});
}
ngOnDestroy() {
this.modalSub.unsubscribe();
}
passwordMatchValidator(formGroup: FormGroup) { passwordMatchValidator(formGroup: FormGroup) {
const password = formGroup.get('password')?.value; const password = formGroup.get('password')?.value;
const verifyPassword = formGroup.get('verifyPassword')?.value; const verifyPassword = formGroup.get('verifyPassword')?.value;
@ -80,10 +97,15 @@ export class RegisterPageComponent {
} }
openRegisterModal() { openRegisterModal() {
this.isRegisterModalOpen = true; this.modalService.openModal(this.modalId);
} }
closeRegisterModal() { closeRegisterModal() {
this.isRegisterModalOpen = false; this.modalService.closeModal(this.modalId);
}
openLoginModal() {
this.modalService.closeModal(this.modalId);
this.modalService.openModal('login-modal');
} }
} }

Loading…
Cancel
Save