From ab58fd0c6a93a94127ff11bf4dff469a50433a7d Mon Sep 17 00:00:00 2001 From: Sana EL HIRI <sanaze.elhiri@gmail.com> Date: Wed, 2 Mar 2022 19:14:43 +0100 Subject: [PATCH 1/3] =?UTF-8?q?avanc=C3=A9es=20page=20account/=20modif=20s?= =?UTF-8?q?ide=20bar/modif=20card-member?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../card-member/card-member.component.scss | 4 +- .../side-bar/side-bar.component.scss | 2 +- .../page-account/page-account.component.html | 60 +++++++------------ .../page-account/page-account.component.scss | 26 ++++++++ .../page-account/page-account.component.ts | 24 ++++++-- 5 files changed, 73 insertions(+), 43 deletions(-) diff --git a/src/app/components/card-member/card-member.component.scss b/src/app/components/card-member/card-member.component.scss index 24db781..c779114 100644 --- a/src/app/components/card-member/card-member.component.scss +++ b/src/app/components/card-member/card-member.component.scss @@ -7,7 +7,7 @@ } .card { - min-height: 22rem; + min-height: 14rem; border: none; position: relative; overflow: hidden; @@ -22,6 +22,7 @@ .buttons button:nth-child(1) { margin-top: 5px; + margin-right: 5px; border: 1px solid #7879F1 !important; color: #7879F1; height: 40px; @@ -30,6 +31,7 @@ .buttons button:nth-child(1):hover { margin-top: 5px; + margin-right: 5px; border: 1px solid #7879F1 !important; color: #fff; height: 40px; diff --git a/src/app/components/side-bar/side-bar.component.scss b/src/app/components/side-bar/side-bar.component.scss index 3bc4acc..b0cb2f5 100644 --- a/src/app/components/side-bar/side-bar.component.scss +++ b/src/app/components/side-bar/side-bar.component.scss @@ -5,7 +5,7 @@ width: auto; height: 100%; position: absolute; - background-color: rgb(238, 238, 238); + background-color: #c3c3e7; } .nav{ margin-top: 20px; diff --git a/src/app/pages/page-account/page-account.component.html b/src/app/pages/page-account/page-account.component.html index 5fbe7e2..8542b99 100644 --- a/src/app/pages/page-account/page-account.component.html +++ b/src/app/pages/page-account/page-account.component.html @@ -1,47 +1,33 @@ <app-header></app-header> +<app-side-bar></app-side-bar> <div class="container-fluid"> <div class="row"> - <app-side-bar></app-side-bar> <div class="col-9 offset-2" id="main"> - <h1>Ma team</h1> - <div class="d-flex justify-content-center"> - <button - button - type="button" - class="btn btn-primary btn-lg" - routerLink="../modifier-compte" - routerLinkActive="active-custom" - > - Modifier mon compte - </button> - </div> - <div class="d-flex justify-content-center"> - <button - button - type="button" - class="btn btn-primary btn-lg" - routerLink="../supprimer-compte" - routerLinkActive="active-custom" - > - Supprimer mon compte - </button> - </div> - <div class="d-flex justify-content-center"> - <button - button - type="button" - class="btn btn-primary btn-lg" - routerLink="../ajout-membre" - routerLinkActive="active-custom" - > - Ajouter un membre - </button> + <h1>{{currentTeam.nom}}</h1> + <div class="row"> + <div class="d-flex justify-content-center"> + <app-card-member [membre]="currentUser"> </app-card-member> + </div> + <div class="d-flex justify-content-center"> + <button + id = "bouton-ajout" + type="button" + class="btn btn-primary btn-lg" + routerLink="../ajout-membre" + routerLinkActive="active-custom" + >Ajouter un membre + </button> + </div> </div> <div class="row"> - <div class="col" *ngFor="let membreData of listMembres"> - <app-card-member [membre]="membreData"> </app-card-member> - </div> + + <ng-container *ngFor="let membreData of listMembres"> + <div class="col" *ngIf= "membreData.id != currentUser.id" > + <app-card-member [membre]="membreData"> </app-card-member> + </div> + </ng-container> </div> </div> </div> </div> +<app-footer></app-footer> diff --git a/src/app/pages/page-account/page-account.component.scss b/src/app/pages/page-account/page-account.component.scss index d8b4580..790a2af 100644 --- a/src/app/pages/page-account/page-account.component.scss +++ b/src/app/pages/page-account/page-account.component.scss @@ -1,3 +1,29 @@ button{ margin-bottom: 5px; } + +#main{ + margin-top: 20px; +} + +ng-container{ + display: flex; +} + +#bouton-ajout { + margin-top: 5px; + border: 1px solid #7879F1 !important; + background-color: #7879F1; + color: #fff; + height: 50px; + width: 250px; +} + +#bouton-ajout:hover { + margin-top: 5px; + border: 1px solid #191933 !important; + background-color: #191933; + color: #fff; + height: 50px; + width: 250px; +} diff --git a/src/app/pages/page-account/page-account.component.ts b/src/app/pages/page-account/page-account.component.ts index 19a8af8..0814759 100644 --- a/src/app/pages/page-account/page-account.component.ts +++ b/src/app/pages/page-account/page-account.component.ts @@ -1,5 +1,9 @@ import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; import { MembreService } from 'src/app/services/membre.service'; +import { TeamService } from 'src/app/services/team.service'; +import { TokenService } from 'src/app/services/token.service'; + @Component({ @@ -9,16 +13,28 @@ import { MembreService } from 'src/app/services/membre.service'; }) export class PageAccountComponent implements OnInit { public listMembres: any[]; + currentUser: any; + currentTeam: any; - constructor(private membreService: MembreService) { + constructor(private membreService: MembreService, + private teamService: TeamService, + private tokenService: TokenService, + private router: Router) { this.listMembres = []; } ngOnInit(): void { + /** Récuperer la team du membre connecté **/ + this.teamService.getTeamById()?.subscribe((team) => { + this.currentTeam = team; + }); + /** Récuperer le membre connecté **/ + this.membreService.getMembreId(this.tokenService.getCurrentMembreId()).subscribe((user) => { + this.currentUser = user; + }); + /** Récuperer la liste des membres de la team **/ this.membreService.getMembresByTeamId()?.subscribe((membres: any[]) => { - console.log(membres); this.listMembres = membres; - - }); + }); } } From f2f790211c53862e4abdfd8f4f9d2163169d8b50 Mon Sep 17 00:00:00 2001 From: Sana EL HIRI <sanaze.elhiri@gmail.com> Date: Thu, 3 Mar 2022 21:59:06 +0100 Subject: [PATCH 2/3] =?UTF-8?q?avanc=C3=A9es=20sur=20update=20member/=20pa?= =?UTF-8?q?ge=20account=20ok=20/=20add=20Member=20ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app-routing.module.ts | 2 +- .../card-member/card-member.component.html | 2 +- src/app/components/signin/signin.component.ts | 7 +- src/app/models/membre.ts | 1 + .../page-account/page-account.component.html | 10 +- .../page-add-member.component.html | 47 ++++---- .../page-add-member.component.scss | 5 + .../page-add-member.component.ts | 31 +++-- .../page-forgot-password.component.ts | 8 +- .../page-reset-password.component.ts | 1 + .../page-signup/page-signup.component.html | 40 +++++-- .../page-signup/page-signup.component.ts | 7 +- .../page-update-member.component.html | 99 +++++++++++++-- .../page-update-member.component.scss | 80 +++++++++++++ .../page-update-member.component.ts | 113 +++++++++++++++++- src/app/services/membre.service.ts | 2 +- 16 files changed, 383 insertions(+), 72 deletions(-) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index d43e8ef..2a8b141 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -40,7 +40,7 @@ const routes: Routes = [ { path: 'creation-compte', component: PageSignupComponent }, { path: 'page-support', component: PageSupportComponent}, { path: 'to-do-list', canActivate: [AuthGuard], component: PageToDoListComponent }, - { path: 'modifier-membre', canActivate: [AuthGuard], component: PageUpdateMemberComponent }, + { path: 'modifier-membre/:id', canActivate: [AuthGuard], component: PageUpdateMemberComponent }, { path: 'modifier-compte', canActivate: [AuthGuard], component: PageUpdateAccountComponent }, { path: 'ajouter-contact', canActivate: [AuthGuard], component: PageAjoutContactComponent }, { path: 'creation-team', canActivate: [AuthGuard], component: PageCreationTeamComponent }, diff --git a/src/app/components/card-member/card-member.component.html b/src/app/components/card-member/card-member.component.html index f5c02f7..d6eb7af 100644 --- a/src/app/components/card-member/card-member.component.html +++ b/src/app/components/card-member/card-member.component.html @@ -7,7 +7,7 @@ <div class="text-center mt-3"> <h3 class="mt-2 mb-0">{{membre.prenom }} {{membre.nom }}</h3> <div class="buttons text-center"><button button type="button" class="btn btn-outline-primary px-4" - routerLink="../modifier-membre" + routerLink="../modifier-membre/{{membre.id}}" routerLinkActive="active-custom"> Modifier </button><button button type="button" class="btn btn-primary px-4" diff --git a/src/app/components/signin/signin.component.ts b/src/app/components/signin/signin.component.ts index b055fc5..f5461e6 100644 --- a/src/app/components/signin/signin.component.ts +++ b/src/app/components/signin/signin.component.ts @@ -1,12 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { AuthService } from '../../services/auth.service'; -import { - FormBuilder, - FormControl, - FormGroup, - Validators, -} from '@angular/forms'; + @Component({ selector: 'app-signin', diff --git a/src/app/models/membre.ts b/src/app/models/membre.ts index 3ebf4b5..8b21154 100644 --- a/src/app/models/membre.ts +++ b/src/app/models/membre.ts @@ -1,4 +1,5 @@ export interface Membre { + id: string; nom: string; prenom: string; email: string; diff --git a/src/app/pages/page-account/page-account.component.html b/src/app/pages/page-account/page-account.component.html index 8542b99..14bd38e 100644 --- a/src/app/pages/page-account/page-account.component.html +++ b/src/app/pages/page-account/page-account.component.html @@ -3,8 +3,9 @@ <div class="container-fluid"> <div class="row"> <div class="col-9 offset-2" id="main"> - <h1>{{currentTeam.nom}}</h1> - <div class="row"> + <h1 class="col-md-auto">{{currentTeam.nom}}</h1> + <div> + <!-- Pour récupérer le membre connecté--> <div class="d-flex justify-content-center"> <app-card-member [membre]="currentUser"> </app-card-member> </div> @@ -20,8 +21,11 @@ </div> </div> <div class="row"> - + <!-- Pour exclure le membre connecté de la liste car il est récupéré plus haut--> + <!-- ng-container pour gérer l'espace vide que laissé le membre exclu à cause du dom --> + <!-- cf. : https://angular.io/guide/built-in-directives#hosting-a-directive-without-a-dom-element--> <ng-container *ngFor="let membreData of listMembres"> + <!-- Condition dans ngIf mais une div à la place du ng-container pour le style--> <div class="col" *ngIf= "membreData.id != currentUser.id" > <app-card-member [membre]="membreData"> </app-card-member> </div> diff --git a/src/app/pages/page-add-member/page-add-member.component.html b/src/app/pages/page-add-member/page-add-member.component.html index c7d87a6..5731f66 100644 --- a/src/app/pages/page-add-member/page-add-member.component.html +++ b/src/app/pages/page-add-member/page-add-member.component.html @@ -1,12 +1,12 @@ <app-header></app-header> - +<app-side-bar></app-side-bar> <div class="container-fluid"> <div class="row"> - <app-side-bar></app-side-bar> <div class="col-9 offset-2" id="main"> + <h1 class="d-flex justify-content-center">Ajouter un nouveau membre à {{currentTeam.nom}}</h1> <div class="form-addMember"> <form (ngSubmit)="onSubmit()" [formGroup]="addMemberForm"> - <div class="form-floating"> + <div class="form-floating input"> <input type="color" class="form-control" @@ -16,6 +16,7 @@ formControlName="couleurFc" /> </div> + <label for="floatingInputcouleur" class="d-flex justify-content-center" >Choisissez une couleur</label> <div class="form-floating"> <input type="text" @@ -33,7 +34,7 @@ !addMemberForm.controls['lastNameFc'].valid }" /> - <label for="floatingInputlastName">VOTRE NOM</label> + <label for="floatingInputlastName">Nom</label> </div> <div class="form-floating"> <input @@ -52,9 +53,9 @@ !addMemberForm.controls['firstNameFc'].valid }" /> - <label for="floatingInputfirstName">VOTRE PRENOM</label> + <label for="floatingInputfirstName">Prénom</label> </div> - <div class="form-floating"> + <div class="form-floating "> <input type="date" class="form-control" @@ -72,7 +73,7 @@ }" /> <label for="floatingInputdateNaissance" - >VOTRE DATE DE NAISSANCE</label + >Date de naissance</label > </div> <div class="form-floating"> @@ -92,20 +93,7 @@ !addMemberForm.controls['emailFc'].valid }" /> - <label for="floatingInputemail">Votre Email</label> - </div> - <div class="form-floating"> - <select - class="form-control" - id="floatingInputRole" - placeholder="" - name="Role" - formControlName="roleFc" - > - <option value="ROLE_PARENT">Adulte</option> - <option value="ROLE_ENFANT">Enfant</option> - </select> - <label value="ROLE_PARENT">Sélectionner un profil</label> + <label for="floatingInputemail">Email</label> </div> <div class="form-floating"> <input @@ -124,7 +112,7 @@ !addMemberForm.controls['passwordFc'].valid }" /> - <label for="floatingPassword">MOT DE PASSE</label> + <label for="floatingPassword">Mot de passe</label> </div> <div class="form-floating"> <input @@ -144,9 +132,22 @@ }" /> <label for="floatingPasswordConfirm" - >CONFIRMEZ VOTRE MOT DE PASSE</label + >Confirmez le mot de passe</label > </div> + <div class="form-floating select"> + <select + class="form-control" + id="floatingInputRole" + placeholder="" + name="Role" + formControlName="roleFc" + > + <option value="ROLE_PARENT">Adulte</option> + <option value="ROLE_ENFANT">Enfant</option> + </select> + <label value="ROLE_PARENT">Sélectionnez un profil</label> + </div> <button class="w-100 btn btn-lg btn-outline-success" diff --git a/src/app/pages/page-add-member/page-add-member.component.scss b/src/app/pages/page-add-member/page-add-member.component.scss index 43a4849..55ab414 100644 --- a/src/app/pages/page-add-member/page-add-member.component.scss +++ b/src/app/pages/page-add-member/page-add-member.component.scss @@ -3,6 +3,11 @@ padding-top: 40px; background-color: #f5f5f5; } + h1{ + color: rgba(0, 0, 0, 0.658); + font-size: 34px; + margin-top: 20px; + } .form-addMember { width: 100%; diff --git a/src/app/pages/page-add-member/page-add-member.component.ts b/src/app/pages/page-add-member/page-add-member.component.ts index d685097..5867f19 100644 --- a/src/app/pages/page-add-member/page-add-member.component.ts +++ b/src/app/pages/page-add-member/page-add-member.component.ts @@ -3,9 +3,9 @@ import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms' import { Router } from '@angular/router'; import { Mail } from 'src/app/models/mail'; import { Membre } from 'src/app/models/membre'; -import { AuthService } from 'src/app/services/auth.service'; import { MailService } from 'src/app/services/mail.service'; import { MembreService } from 'src/app/services/membre.service'; +import { TeamService } from 'src/app/services/team.service'; @Component({ selector: 'app-page-add-member', @@ -13,12 +13,17 @@ import { MembreService } from 'src/app/services/membre.service'; styleUrls: ['./page-add-member.component.scss'] }) export class PageAddMemberComponent implements OnInit { - public addMemberForm: FormGroup; + alert: any; + isShow!: boolean; + currentTeam: any; + + + constructor( private membreService: MembreService, + private teamService: TeamService, private mailService: MailService, - private authService: AuthService, private router: Router, private fb: FormBuilder ) { @@ -26,7 +31,11 @@ export class PageAddMemberComponent implements OnInit { } ngOnInit(): void { - // *********************************pensser a changer group car déprécié******************************** + /** Récuperer la team du membre connecté **/ + this.teamService.getTeamById()?.subscribe((team) => { + this.currentTeam = team; + }); + /** group est déprécié mais pas d'autres solutions sinon revoir la fonction confirmeValidator **/ this.addMemberForm = this.fb.group( { firstNameFc: new FormControl('', [Validators.required]), @@ -38,7 +47,7 @@ export class PageAddMemberComponent implements OnInit { Validators.email, Validators.required, Validators.pattern(/^([\w\.\-_]+)?\w+@[\w-_]+(\.\w+){1,}/gim), - ]), // chercher une meilleure regex + ]), passwordFc: new FormControl('', [ Validators.minLength(8), Validators.required, @@ -55,8 +64,7 @@ export class PageAddMemberComponent implements OnInit { } public onSubmit(): void { - console.log('value : ', this.addMemberForm.value); - console.log('form : ', this.addMemberForm); + const idValue = this.addMemberForm.value['']; const lastNameValue = this.addMemberForm.value['lastNameFc']; const firstNameValue = this.addMemberForm.value['firstNameFc']; const emailValue = this.addMemberForm.value['emailFc']; @@ -68,6 +76,7 @@ export class PageAddMemberComponent implements OnInit { const membre: Membre = { + id: idValue, nom: lastNameValue, prenom: firstNameValue, email: emailValue, @@ -89,17 +98,19 @@ export class PageAddMemberComponent implements OnInit { if (membre.email !== '' && membre.password !== '') { - this.membreService.addMembre(membre)?.subscribe((resp) => { + this.membreService.addMembre(membre)?.subscribe((_resp) => { this.mailService.envoiMailText(mail)?.subscribe((respMail) =>{ - console.log("Mail envoyé"); + return respMail }) this.router.navigate(['compte']); }); } else { - // affichage erreur + this.alert={"type":"danger", "content":"Le membre n'a pas été rajouté"}; + this.isShow = true; } } + /** Méthode pour compare le mot de passe et la confirmation de mot de passe **/ ConfirmedValidator(controlName: string, matchingControlName: string) { return (formGroup: FormGroup) => { const control = formGroup.controls[controlName]; diff --git a/src/app/pages/page-forgot-password/page-forgot-password.component.ts b/src/app/pages/page-forgot-password/page-forgot-password.component.ts index e10943a..24a7e7c 100644 --- a/src/app/pages/page-forgot-password/page-forgot-password.component.ts +++ b/src/app/pages/page-forgot-password/page-forgot-password.component.ts @@ -1,16 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { AuthService } from '../../services/auth.service'; -import { - FormBuilder, - FormControl, - FormGroup, - Validators, -} from '@angular/forms'; import { Membre } from 'src/app/models/membre'; import { MailService } from 'src/app/services/mail.service'; import { Mail } from 'src/app/models/mail'; + @Component({ selector: 'app-page-forgot-password', templateUrl: './page-forgot-password.component.html', @@ -30,6 +25,7 @@ export class PageForgotPasswordComponent implements OnInit { public onSubmit(submittedForm: any): void { const membre: Membre = { + id: "", nom: "", prenom: "", dateNaissance: new Date(), diff --git a/src/app/pages/page-reset-password/page-reset-password.component.ts b/src/app/pages/page-reset-password/page-reset-password.component.ts index 53c6f28..6e31529 100644 --- a/src/app/pages/page-reset-password/page-reset-password.component.ts +++ b/src/app/pages/page-reset-password/page-reset-password.component.ts @@ -44,6 +44,7 @@ export class PageResetPasswordComponent implements OnInit { const passwordConfirmValue = this.resetForm.value['passwordConfirmFc']; const membre: Membre = { + id: "", nom: "", prenom: "", dateNaissance: new Date(), diff --git a/src/app/pages/page-signup/page-signup.component.html b/src/app/pages/page-signup/page-signup.component.html index c41025d..7d2a6ca 100644 --- a/src/app/pages/page-signup/page-signup.component.html +++ b/src/app/pages/page-signup/page-signup.component.html @@ -4,10 +4,30 @@ <label for="floatingInputcouleur">Choisissez une couleur</label> <main class="form-signup"> <form (ngSubmit)="onSubmit()" [formGroup]="signupForm"> - <div class="form-floating"> - <input type="color" class="form-control" id="floatingInputcouleur" placeholder="" name="couleur" - formControlName="couleurFc"> - </div> + <div class="form-floating"> + <input type="color" class="form-control" id="floatingInputcouleur" placeholder="" + name="couleur" + formControlName="couleurFc"> + </div> + <div class="form-floating"> + <input + type="text" + class="form-control" + id="floatingInputteamName" + placeholder="" + name="teamName" + formControlName="teamNameFc" + [ngClass]="{ + 'is-valid': + signupForm.controls['teamNameFc'].touched && + signupForm.controls['teamNameFc'].valid, + 'is-invalid': + signupForm.controls['teamNameFc'].touched && + !signupForm.controls['teamNameFc'].valid + }" + /> + <label for="floatingInputlastName">Le nom de votre team</label> + </div> <div class="form-floating"> <input type="text" @@ -25,7 +45,7 @@ !signupForm.controls['lastNameFc'].valid }" /> - <label for="floatingInputlastName">VOTRE NOM</label> + <label for="floatingInputlastName">Votre nom</label> </div> <div class="form-floating"> <input @@ -44,7 +64,7 @@ !signupForm.controls['firstNameFc'].valid }" /> - <label for="floatingInputfirstName">VOTRE PRENOM</label> + <label for="floatingInputfirstName">Votre prénom</label> </div> <div class="form-floating"> <input @@ -63,7 +83,7 @@ !signupForm.controls['dateNaissanceFc'].valid }" /> - <label for="floatingInputdateNaissance">VOTRE DATE DE NAISSANCE</label> + <label for="floatingInputdateNaissance">Votr date de naissance</label> </div> <div class="form-floating"> <input @@ -82,7 +102,7 @@ !signupForm.controls['emailFc'].valid }" /> - <label for="floatingInputemail">VOTRE EMAIL</label> + <label for="floatingInputemail">Votre adresse mail</label> </div> <div class="form-floating"> <input @@ -101,7 +121,7 @@ !signupForm.controls['passwordFc'].valid }" /> - <label for="floatingPassword">MOT DE PASSE</label> + <label for="floatingPassword">Votre mot de passe</label> </div> <div class="form-floating"> <input @@ -120,7 +140,7 @@ !signupForm.controls['passwordConfirmFc'].valid }" /> - <label for="floatingPasswordConfirm">CONFIRMEZ VOTRE MOT DE PASSE</label> + <label for="floatingPasswordConfirm">Confirmez votre mot de passe</label> </div> <button diff --git a/src/app/pages/page-signup/page-signup.component.ts b/src/app/pages/page-signup/page-signup.component.ts index 9f28e40..fb27614 100644 --- a/src/app/pages/page-signup/page-signup.component.ts +++ b/src/app/pages/page-signup/page-signup.component.ts @@ -16,6 +16,7 @@ import { AuthService } from '../../services/auth.service'; }) export class PageSignupComponent implements OnInit { public signupForm: FormGroup; + constructor( private authService: AuthService, private router: Router, @@ -54,8 +55,7 @@ export class PageSignupComponent implements OnInit { } public onSubmit(): void { - console.log('value : ', this.signupForm.value); - console.log('form : ', this.signupForm); + const idValue = this.signupForm.value['']; const prenomValue = this.signupForm.value['firstNameFc']; const nomValue = this.signupForm.value['lastNameFc']; const emailValue = this.signupForm.value['emailFc']; @@ -66,6 +66,7 @@ export class PageSignupComponent implements OnInit { const roleValue = ['ROLE_PARENT']; const membre: Membre = { + id: idValue, nom: nomValue, prenom: prenomValue, email: emailValue, @@ -84,7 +85,7 @@ export class PageSignupComponent implements OnInit { // affichage erreur } } - + /** Méthode pour compare le mot de passe et la confirmation de mot de passe **/ ConfirmedValidator(controlName: string, matchingControlName: string) { return (formGroup: FormGroup) => { const control = formGroup.controls[controlName]; diff --git a/src/app/pages/page-update-member/page-update-member.component.html b/src/app/pages/page-update-member/page-update-member.component.html index 764bae0..7d94ef3 100644 --- a/src/app/pages/page-update-member/page-update-member.component.html +++ b/src/app/pages/page-update-member/page-update-member.component.html @@ -1,11 +1,96 @@ <app-header></app-header> +<app-side-bar></app-side-bar> +<div class="container-fluid"> + <div class="row"> + <div class="col-9 offset-2" id="main"> + <h1 class="d-flex justify-content-center">Modifier profil</h1> + <div class="form-updateMember"> + <form (ngSubmit)="onSubmit()" [formGroup]="updateMembreForm"> + <div class="form-floating input"> + <input + type="color" + class="form-control" + id="floatingInputcouleur" + placeholder="" + name="couleur" + formControlName="couleurFc" + value="{{membreInfos.couleur}}" + /> + </div> + <label for="floatingInputcouleur" class="d-flex justify-content-center" >Choisissez une couleur</label> + <div class="form-floating"> + <input + type="text" + class="form-control" + id="floatingInputlastName" + placeholder="" + name="lastName" + formControlName="lastNameFc" + value="{{membreInfos.nom}}" + /> + <label for="floatingInputlastName">Nom</label> + </div> + <div class="form-floating"> + <input + type="text" + class="form-control" + id="floatingInputfirstName" + placeholder="" + name="firstName" + formControlName="firstNameFc" + value="{{membreInfos.prenom}}" + /> + <label for="floatingInputfirstName">Prénom</label> + </div> + <div class="form-floating "> + <input + type="date" + class="form-control" + id="floatingInputdateNaissance" + placeholder="" + name="dateNaissance" + formControlName="dateNaissanceFc" + value="{{membreInfos.dateNaissance}}" + /> + <label for="floatingInputdateNaissance" + >Date de naissance</label + > + </div> + <div class="form-floating"> + <input + type="email" + class="form-control" + id="floatingInputemail" + placeholder="" + name="email" + formControlName="emailFc" + value="{{membreInfos.email}}" + /> + <label for="floatingInputemail">Email</label> + </div> + <div class="form-floating select"> + <select + class="form-control" + id="floatingInputRole" + placeholder="" + name="Role" + formControlName="roleFc" + value="{{membreInfos.roleList}}" + > + <option value="ROLE_PARENT">Adulte</option> + <option value="ROLE_ENFANT">Enfant</option> + </select> + <label value="ROLE_PARENT">Sélectionnez un profil</label> + </div> -<div class="row"> - <div class="col-md-auto"> - <app-side-bar></app-side-bar> - </div> - <div class="col compte text-center"> - <h1>Modifier ce membre</h1> - <main class="contenu-compte"></main> + <button + class="w-100 btn btn-lg btn-outline-success" + type="submit" + + >Valider + </button> + </form> + </div> + </div> </div> </div> diff --git a/src/app/pages/page-update-member/page-update-member.component.scss b/src/app/pages/page-update-member/page-update-member.component.scss index e69de29..b66b171 100644 --- a/src/app/pages/page-update-member/page-update-member.component.scss +++ b/src/app/pages/page-update-member/page-update-member.component.scss @@ -0,0 +1,80 @@ +.login-form { + height: 100vh; + padding-top: 40px; + background-color: #f5f5f5; +} + h1{ + color: rgba(0, 0, 0, 0.658); + font-size: 34px; + margin-top: 20px; + } + +.form-updateMember { + width: 100%; + max-width: 330px; + padding: 15px; + margin-top: 50px; + margin-left: auto; + margin-right: auto; + border: solid 1px; + border-radius: 10px; + background-color: #fcddec; + border-color: #ef5da8; +} + +.form-updateMember .checkbox { + font-weight: 400; +} + +.form-updateMember .form-floating:focus-within { + z-index: 2; +} + +.form-updateMember input[type="email"] { + margin-bottom: 10px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-updateMember input[type="color"] { + border: none; + margin-bottom: 10px; + margin-top: -70px; + margin-left: 100px; + border-radius: 50%; + width: 100px; + height: 100px; +} + +.form-updateMember input[type="color"]::-webkit-color-swatch { + border: none; + margin-top: -15px; + border-radius: 80%; + width: 80px; + height: 80px; +} + +.form-updateMember input[type="text"] { + margin-bottom: 10px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-updateMember input[type="date"] { + margin-bottom: 10px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-updateMember input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-outline-success { + margin-top: 10px; + background-color: #ffff; + color: #ef5da8 !important; + border-color: #ef5da8 !important; +} diff --git a/src/app/pages/page-update-member/page-update-member.component.ts b/src/app/pages/page-update-member/page-update-member.component.ts index be0f66e..555f450 100644 --- a/src/app/pages/page-update-member/page-update-member.component.ts +++ b/src/app/pages/page-update-member/page-update-member.component.ts @@ -1,4 +1,8 @@ import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Membre } from 'src/app/models/membre'; +import { MembreService } from 'src/app/services/membre.service'; @Component({ selector: 'app-page-update-member', @@ -6,10 +10,117 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./page-update-member.component.scss'] }) export class PageUpdateMemberComponent implements OnInit { + public updateMembreForm: FormGroup; + public membreData: FormGroup; + public membreInfos: any; + public membreId: any; - constructor() { } + + constructor(private membreService: MembreService, + private router: Router, + private fb: FormBuilder, + private route: ActivatedRoute) { + this.updateMembreForm = new FormGroup({}); + this.membreData = this.initForm(); + this.membreInfos = ''; + } ngOnInit(): void { + /** Pour récuperer l'id du membre à modifier **/ + this.membreId = this.route.snapshot.paramMap.get('id'); + + /** Appel Api **/ + this.membreService + .getMembreId(this.membreId) + .subscribe((membreInfos: any) => { + this.membreInfos = membreInfos; + }); + + /** group est déprécié mais pas d'autres solutions sinon revoir la fonction confirmeValidator **/ + this.updateMembreForm = this.fb.group( + { + firstNameFc: new FormControl('', [Validators.required]), + lastNameFc: new FormControl('', [Validators.required]), + dateNaissanceFc: new FormControl('', [Validators.required]), + roleFc: new FormControl('', []), + couleurFc: new FormControl('', []), + emailFc: new FormControl('', [ + Validators.email, + Validators.required, + Validators.pattern(/^([\w\.\-_]+)?\w+@[\w-_]+(\.\w+){1,}/gim), + ]), + passwordFc: new FormControl('', [ + Validators.minLength(8), + ]), + passwordConfirmFc: new FormControl('', [ + Validators.minLength(8), + ]), + }, + { + validator: this.ConfirmedValidator('passwordFc', 'passwordConfirmFc'), + } + )}; + + /** Méthode qui initialise les champs du formulaire avec les infos de la BDD **/ + private initForm(membre?: Membre): FormGroup { + return this.fb.group({ + nom:[membre ? membre.nom : ''], + prenom: [membre ? membre.prenom : ''], + email: [membre ? membre.email : ''], + password: [membre ? membre.password : ''], + couleur: [membre ? membre.couleur : ''], + dateNaissance: [membre ? membre.dateNaissance : ''], + passwordConfirm: [membre ? membre.passwordConfirm : ''], + roleList: [membre ? membre.roleList : ['']], + }); } + /** Méthode qui envoie les champs modifiés pour mise à jour **/ + public onSubmit(): void { + const firstNameValue = this.updateMembreForm.value['firstNameFc']; + const lastNameValue = this.updateMembreForm.value['lastNameFc']; + const emailValue = this.updateMembreForm.value['emailFc']; + const passwordValue = this.updateMembreForm.value['passwordFc']; + const dateNaissanceValue = this.updateMembreForm.value['dateNaissanceFc']; + const couleurValue = this.updateMembreForm.value['couleurFc']; + const passwordConfirmValue = this.updateMembreForm.value['passwordConfirmFc']; + const roleValue = this.updateMembreForm.value['roleFc']; + + const membre: Membre = { + id: this.membreId, + nom: lastNameValue, + prenom: firstNameValue, + email: emailValue, + password: passwordValue, + dateNaissance: dateNaissanceValue, + couleur: couleurValue, + passwordConfirm: passwordConfirmValue, + roleList: [roleValue] + }; + + this.membreService.updateMembre(membre).subscribe((resp) => { + this.router.navigate(['compte']); + }); + } + + + + /** Méthode pour compare le mot de passe et la confirmation de mot de passe **/ + ConfirmedValidator(controlName: string, matchingControlName: string) { + return (formGroup: FormGroup) => { + const control = formGroup.controls[controlName]; + const matchingControl = formGroup.controls[matchingControlName]; + if ( + matchingControl.errors && + !matchingControl.errors['confirmedValidator'] + ) { + return; + } + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ confirmedValidator: true }); + } else { + matchingControl.setErrors(null); + } + }; + } } diff --git a/src/app/services/membre.service.ts b/src/app/services/membre.service.ts index 98d19a0..d721522 100644 --- a/src/app/services/membre.service.ts +++ b/src/app/services/membre.service.ts @@ -48,7 +48,7 @@ export class MembreService { deleteMembre(membre: Membre): Observable<any> { return this.http.delete(`${this.apiUrl}/membres/delete/1`); } - + //modifier pour récupérer id et pas mettre un id par défaut updateMembre(membre: Membre): Observable<any> { return this.http.put(`${this.apiUrl}/membres/update/1`, membre); } From 1191176e251f76d9d9c1104c8e9d69c64aa6785c Mon Sep 17 00:00:00 2001 From: Sana EL HIRI <sanaze.elhiri@gmail.com> Date: Fri, 4 Mar 2022 15:50:51 +0100 Subject: [PATCH 3/3] =?UTF-8?q?avanc=C3=A9es=20=C3=A0=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../side-bar/side-bar.component.html | 10 +++++----- .../page-update-member.component.html | 20 +++++++++++++++++-- .../page-update-member.component.ts | 8 ++++++-- src/app/services/membre.service.ts | 13 ++++++++---- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/app/components/side-bar/side-bar.component.html b/src/app/components/side-bar/side-bar.component.html index 40e86e3..6e3baaf 100644 --- a/src/app/components/side-bar/side-bar.component.html +++ b/src/app/components/side-bar/side-bar.component.html @@ -1,12 +1,12 @@ <nav class="wrapper md-auto position-fixed "> <ul class="nav flex-column" id="sticky-sidebar"> <li class="nav-item" ngbNavItem="maTeam" > - <a routerLink="../compte" routerLinkActive="active-custom" class="nav-link"> + <a routerLink="/compte" routerLinkActive="active-custom" class="nav-link"> <i class="bi bi-people-fill"></i> Ma Team</a> </li> <li class="nav-item" ngbNavItem="maTeam" > - <a routerLink="../tableau-de-bord" routerLinkActive="active-custom" class="nav-link"> + <a routerLink="/tableau-de-bord" routerLinkActive="active-custom" class="nav-link"> <i class="bi bi-clipboard-data"></i> Dashboard</a> </li> @@ -16,17 +16,17 @@ Répertoire</a> </li> <li class="nav-item"> - <a routerLink="../to-do-list" routerLinkActive="active-custom" class="nav-link"> + <a routerLink="/to-do-list" routerLinkActive="active-custom" class="nav-link"> <i class="bi bi-check2-square"></i> To-Do-List</a> </li> <li class="nav-item"> - <a routerLink="../menu" routerLinkActive="active-custom" class="nav-link"> + <a routerLink="/menu" routerLinkActive="active-custom" class="nav-link"> <i class='fas fa-pizza-slice'></i> Menus</a> </li> <li class="nav-item"> - <a routerLink="../agenda" routerLinkActive="active-custom" class="nav-link"> + <a routerLink="/agenda" routerLinkActive="active-custom" class="nav-link"> <i class="bi bi-calendar-event"></i> Agenda</a> </li> diff --git a/src/app/pages/page-update-member/page-update-member.component.html b/src/app/pages/page-update-member/page-update-member.component.html index 7d94ef3..3d9a20b 100644 --- a/src/app/pages/page-update-member/page-update-member.component.html +++ b/src/app/pages/page-update-member/page-update-member.component.html @@ -15,6 +15,7 @@ name="couleur" formControlName="couleurFc" value="{{membreInfos.couleur}}" + [(ngModel)]="membreInfos.couleur" /> </div> <label for="floatingInputcouleur" class="d-flex justify-content-center" >Choisissez une couleur</label> @@ -27,6 +28,7 @@ name="lastName" formControlName="lastNameFc" value="{{membreInfos.nom}}" + [(ngModel)]="membreInfos.nom" /> <label for="floatingInputlastName">Nom</label> </div> @@ -39,6 +41,7 @@ name="firstName" formControlName="firstNameFc" value="{{membreInfos.prenom}}" + [(ngModel)]="membreInfos.prenom" /> <label for="floatingInputfirstName">Prénom</label> </div> @@ -51,6 +54,7 @@ name="dateNaissance" formControlName="dateNaissanceFc" value="{{membreInfos.dateNaissance}}" + [(ngModel)]="membreInfos.dateNaissance" /> <label for="floatingInputdateNaissance" >Date de naissance</label @@ -65,6 +69,7 @@ name="email" formControlName="emailFc" value="{{membreInfos.email}}" + [(ngModel)]="membreInfos.email" /> <label for="floatingInputemail">Email</label> </div> @@ -76,17 +81,28 @@ name="Role" formControlName="roleFc" value="{{membreInfos.roleList}}" + [(ngModel)]="membreInfos.roleList" > <option value="ROLE_PARENT">Adulte</option> <option value="ROLE_ENFANT">Enfant</option> </select> <label value="ROLE_PARENT">Sélectionnez un profil</label> </div> - + <div class="form-floating"> + <input hidden + type="password" + class="form-control" + id="floatingPassword" + placeholder="" + name="password" + formControlName="passwordFc" + value="{{membreInfos.password}}" + [(ngModel)]="membreInfos.password" + /> + </div> <button class="w-100 btn btn-lg btn-outline-success" type="submit" - >Valider </button> </form> diff --git a/src/app/pages/page-update-member/page-update-member.component.ts b/src/app/pages/page-update-member/page-update-member.component.ts index 555f450..e97f81a 100644 --- a/src/app/pages/page-update-member/page-update-member.component.ts +++ b/src/app/pages/page-update-member/page-update-member.component.ts @@ -63,6 +63,7 @@ export class PageUpdateMemberComponent implements OnInit { /** Méthode qui initialise les champs du formulaire avec les infos de la BDD **/ private initForm(membre?: Membre): FormGroup { + return this.fb.group({ nom:[membre ? membre.nom : ''], prenom: [membre ? membre.prenom : ''], @@ -75,6 +76,7 @@ export class PageUpdateMemberComponent implements OnInit { }); } + /** Méthode qui envoie les champs modifiés pour mise à jour **/ public onSubmit(): void { const firstNameValue = this.updateMembreForm.value['firstNameFc']; @@ -98,8 +100,10 @@ export class PageUpdateMemberComponent implements OnInit { roleList: [roleValue] }; - this.membreService.updateMembre(membre).subscribe((resp) => { - this.router.navigate(['compte']); + console.log(membre); + + this.membreService.updateMembre(membre)?.subscribe((resp) => { + //this.router.navigate(['compte']); }); } diff --git a/src/app/services/membre.service.ts b/src/app/services/membre.service.ts index d721522..38d2567 100644 --- a/src/app/services/membre.service.ts +++ b/src/app/services/membre.service.ts @@ -48,8 +48,13 @@ export class MembreService { deleteMembre(membre: Membre): Observable<any> { return this.http.delete(`${this.apiUrl}/membres/delete/1`); } - //modifier pour récupérer id et pas mettre un id par défaut - updateMembre(membre: Membre): Observable<any> { - return this.http.put(`${this.apiUrl}/membres/update/1`, membre); - } + + updateMembre(membre: Membre): Observable<any> | void { + const teamId = this.tokenService.getCurrentTeamId(); + if (teamId){ + return this.http.put(`${this.apiUrl}/membres/update/${teamId}/${membre.id}`, membre); + }else { + this.router.navigate(['accueil']); + } +} }