From 8d5cd03d337492b48bfdcf1c28228564574b6e59 Mon Sep 17 00:00:00 2001 From: Blandine Bajard <83599148+BlandineBajard@users.noreply.github.com> Date: Thu, 20 Jan 2022 09:44:19 +0100 Subject: [PATCH 1/4] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 07be01d..3ffd157 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ This project was generated with [Angular CLI](https://github.com/angular/angular ## Development server +Run npm install + Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. ## Code scaffolding From 4a55d75da77cfd7d7bcb1e5c9dd82d018ff48b3d Mon Sep 17 00:00:00 2001 From: AlineRinquin <90188226+AlineRinquin@users.noreply.github.com> Date: Thu, 20 Jan 2022 17:30:17 +0100 Subject: [PATCH 2/4] mise en place du html et lien vers le back de repertoire --- .../fiche-contact.component.html | 19 +++++++- .../fiche-contact.component.scss | 8 ++++ .../fiche-contact/fiche-contact.component.ts | 11 ++--- src/app/models/contact.ts | 8 ++++ src/app/models/menu.ts | 10 ++++ src/app/models/to-do-list.ts | 7 +++ .../page-repertoire.component.html | 32 ++++++++++++- .../page-repertoire.component.scss | 15 ++++++ .../page-repertoire.component.ts | 43 ++++++++++++++++-- src/app/services/auth.service.ts | 2 +- src/app/services/organizee.service.spec.ts | 16 +++++++ src/app/services/organizee.service.ts | 18 ++++++++ src/app/services/repertoire.service.spec.ts | 16 +++++++ src/app/services/repertoire.service.ts | 28 ++++++++++++ src/assets/images/adresse.jpg | Bin 0 -> 11538 bytes src/assets/images/contact-1.png | Bin 0 -> 10678 bytes src/assets/images/gateau.png | Bin 0 -> 1362 bytes src/assets/images/logo-gmail.png | Bin 0 -> 914 bytes src/assets/images/phone.png | Bin 0 -> 887 bytes src/environments/environment.ts | 2 +- 20 files changed, 221 insertions(+), 14 deletions(-) create mode 100644 src/app/models/contact.ts create mode 100644 src/app/models/menu.ts create mode 100644 src/app/models/to-do-list.ts create mode 100644 src/app/services/organizee.service.spec.ts create mode 100644 src/app/services/organizee.service.ts create mode 100644 src/app/services/repertoire.service.spec.ts create mode 100644 src/app/services/repertoire.service.ts create mode 100644 src/assets/images/adresse.jpg create mode 100644 src/assets/images/contact-1.png create mode 100644 src/assets/images/gateau.png create mode 100644 src/assets/images/logo-gmail.png create mode 100644 src/assets/images/phone.png diff --git a/src/app/components/fiche-contact/fiche-contact.component.html b/src/app/components/fiche-contact/fiche-contact.component.html index 6c65a73..5499a7d 100644 --- a/src/app/components/fiche-contact/fiche-contact.component.html +++ b/src/app/components/fiche-contact/fiche-contact.component.html @@ -1 +1,18 @@ -

fiche-contact works!

+
+ + + +

{{ personne.prenom }} {{ personne.nom }}

+

+ {{ personne.telephone }}

+

+ {{ personne.email }}

+

+ {{ personne.dateNaissance }}

+

+ {{ personne.adresse }}

+
diff --git a/src/app/components/fiche-contact/fiche-contact.component.scss b/src/app/components/fiche-contact/fiche-contact.component.scss index e69de29..d0f4200 100644 --- a/src/app/components/fiche-contact/fiche-contact.component.scss +++ b/src/app/components/fiche-contact/fiche-contact.component.scss @@ -0,0 +1,8 @@ +.btn-secondary { + color: #fff; + background-color: #5a1e63 !important; + width: 100%; + max-width: 330px; + padding: 15px; + margin: auto; +} diff --git a/src/app/components/fiche-contact/fiche-contact.component.ts b/src/app/components/fiche-contact/fiche-contact.component.ts index 7496ca9..25ae576 100644 --- a/src/app/components/fiche-contact/fiche-contact.component.ts +++ b/src/app/components/fiche-contact/fiche-contact.component.ts @@ -1,15 +1,14 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'app-fiche-contact', templateUrl: './fiche-contact.component.html', - styleUrls: ['./fiche-contact.component.scss'] + styleUrls: ['./fiche-contact.component.scss'], }) export class FicheContactComponent implements OnInit { + @Input() personne: any; - constructor() { } - - ngOnInit(): void { - } + constructor() {} + ngOnInit(): void {} } diff --git a/src/app/models/contact.ts b/src/app/models/contact.ts new file mode 100644 index 0000000..2c632a4 --- /dev/null +++ b/src/app/models/contact.ts @@ -0,0 +1,8 @@ +export interface Contact { + nom: string; + prenom: string; + telephone: string; + email: string; + adresse: string; + dateNaissance: Date; +} diff --git a/src/app/models/menu.ts b/src/app/models/menu.ts new file mode 100644 index 0000000..990f122 --- /dev/null +++ b/src/app/models/menu.ts @@ -0,0 +1,10 @@ +import { Membre } from './membre'; +import { Team } from './team'; + +export interface Menu { + libelle: string; + dateMenu: Date; + membre: Membre; + team: Team; + validationProposition: boolean; +} diff --git a/src/app/models/to-do-list.ts b/src/app/models/to-do-list.ts new file mode 100644 index 0000000..48fba0f --- /dev/null +++ b/src/app/models/to-do-list.ts @@ -0,0 +1,7 @@ +import { Team } from './team'; + +export interface ToDoList { + nom: string; + team: Team; + tache: string; +} diff --git a/src/app/pages/page-repertoire/page-repertoire.component.html b/src/app/pages/page-repertoire/page-repertoire.component.html index 2d3d7d1..8919361 100644 --- a/src/app/pages/page-repertoire/page-repertoire.component.html +++ b/src/app/pages/page-repertoire/page-repertoire.component.html @@ -1,2 +1,32 @@ - \ No newline at end of file + + +
+ + + + +
+ + +
+ +
+
+ +
+ +

{{ personne.prenom }} {{ personne.nom }}

+
+
+ +
diff --git a/src/app/pages/page-repertoire/page-repertoire.component.scss b/src/app/pages/page-repertoire/page-repertoire.component.scss index e69de29..6634178 100644 --- a/src/app/pages/page-repertoire/page-repertoire.component.scss +++ b/src/app/pages/page-repertoire/page-repertoire.component.scss @@ -0,0 +1,15 @@ +.btn-secondary { + color: #fff; + background-color: #5a1e63 !important; + width: 100%; + max-width: 330px; + padding: 15px; + margin: auto; +} + +.input-group mb-3 { + width: 100%; + max-width: 330px; + padding: 15px; + margin: auto; +} diff --git a/src/app/pages/page-repertoire/page-repertoire.component.ts b/src/app/pages/page-repertoire/page-repertoire.component.ts index 5e2707e..c4fff1b 100644 --- a/src/app/pages/page-repertoire/page-repertoire.component.ts +++ b/src/app/pages/page-repertoire/page-repertoire.component.ts @@ -1,15 +1,50 @@ import { Component, OnInit } from '@angular/core'; +import { RepertoireService } from 'src/app/services/repertoire.service'; @Component({ selector: 'app-page-repertoire', templateUrl: './page-repertoire.component.html', - styleUrls: ['./page-repertoire.component.scss'] + styleUrls: ['./page-repertoire.component.scss'], }) export class PageRepertoireComponent implements OnInit { + public listContact: any[]; + public listFull: any[]; + keyword: any; + openDetails: any; - constructor() { } - - ngOnInit(): void { + constructor(private repertoireService: RepertoireService) { + this.listContact = []; + this.listFull = []; } + ngOnInit(): void { + this.repertoireService.getContact().subscribe((listContact: any[]) => { + console.log(listContact); + this.listContact = listContact; + this.listFull = listContact; + }); + } + + // Méthode pour récuper ce qui est saisi dans l'input + onSearchChange(prenom: string): void { + this.keyword = prenom; + if (prenom == '') { + this.listContact = this.listFull; + } else { + this.applyFilter(prenom); + } + } + + // Méthode qui applique un filtre sur ce qui est récupéré de l'input sur le prénom + applyFilter(filter: any) { + let prenom = this.listFull.filter((contact) => + contact.prenom.toLowerCase().includes(filter.toLowerCase()) + ); + this.listContact = prenom; + } + + onClick(personne: any) { + console.log(personne); + this.openDetails = personne; + } } diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 918bfd9..8fafb7b 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -20,7 +20,7 @@ export class AuthService { signup(membre: Membre): Observable { console.log(membre); - return this.http.post(`${this.apiUrl}/creation-compte`, membre); + return this.http.post(`${this.apiUrl}/membres/sign-up`, membre); } signin(email: string, password: string): Observable { diff --git a/src/app/services/organizee.service.spec.ts b/src/app/services/organizee.service.spec.ts new file mode 100644 index 0000000..6148a1d --- /dev/null +++ b/src/app/services/organizee.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { OrganizeeService } from './organizee.service'; + +describe('OrganizeeService', () => { + let service: OrganizeeService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(OrganizeeService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/organizee.service.ts b/src/app/services/organizee.service.ts new file mode 100644 index 0000000..3e88f65 --- /dev/null +++ b/src/app/services/organizee.service.ts @@ -0,0 +1,18 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { map, Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; + +@Injectable({ + providedIn: 'root', +}) +export class OrganizeeService { + apiUrl: string; + tokenKey: string; + + constructor(private http: HttpClient) { + // On se sert des variables d'environnement de notre application + this.apiUrl = environment.apiUrl; + this.tokenKey = environment.tokenKey; + } +} diff --git a/src/app/services/repertoire.service.spec.ts b/src/app/services/repertoire.service.spec.ts new file mode 100644 index 0000000..bc77b79 --- /dev/null +++ b/src/app/services/repertoire.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { RepertoireService } from './repertoire.service'; + +describe('RepertoireService', () => { + let service: RepertoireService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(RepertoireService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/repertoire.service.ts b/src/app/services/repertoire.service.ts new file mode 100644 index 0000000..2c5c5ec --- /dev/null +++ b/src/app/services/repertoire.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { map, Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; +import { Contact } from '../models/contact'; + +@Injectable({ + providedIn: 'root', +}) +export class RepertoireService { + apiUrl: string; + tokenKey: string; + + constructor(private http: HttpClient) { + // On se sert des variables d'environnement de notre application + this.apiUrl = environment.apiUrl; + this.tokenKey = environment.tokenKey; + } + + getContact(): Observable { + return this.http.get(`${this.apiUrl}/contacts/team/1`); + } + + //sur le component fiche contact de la page repertoire + // sur clic de btn modifier ou supproimer ca renvois vers page modifier contact + //page modifier contact faire un get by id du contact en question + // appeler methode/ update /delette/ add et contact by id +} diff --git a/src/assets/images/adresse.jpg b/src/assets/images/adresse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deca31c859cd48674a381a2abdce3d75cf1c92e9 GIT binary patch literal 11538 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 Lg6I#7=hgoMNc0kQ literal 0 HcmV?d00001 diff --git a/src/assets/images/contact-1.png b/src/assets/images/contact-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cf254afe353d83f034098ac44df4916030901d66 GIT binary patch literal 10678 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/gateau.png b/src/assets/images/gateau.png new file mode 100644 index 0000000000000000000000000000000000000000..b97d3b3e597a6699793aafbbf173279afcd587b4 GIT binary patch literal 1362 zcmV-Y1+DstP)HHogF&8=djUg*BsHP#xeDK^io}O&Nc3*f*d~Pj47uDIJOcrmIh&u~EDa-iB_fRU z>gbG;8R~VV2Z@;o*aqcep!EmRk^y3$0U5PKyR?$?JyvCXVM6(6b-t1vrP82SdLDSu z-gU3#Frl`ljvZznSR@!)tAhd&czyG0_~Q4c#qvp$^vMU0%GoL#BO(-@hAf9P3F=9$ z+gT{r1z~hUqy_-J-ccmwQIM?js8pR5%cS!%L_}zH7KSm7iy%CRyY3?`-$ivW#>LZL zLsbzWPfWtV7^=kn4G;DjYfv?4yPP~@BO(^VDtRJ^{~Y9*P`Ifq5qOLM-W4=$3}uN3 zQB@XvE08%C6;XP8&t<=sqa@rp9alxQ^X){kIl$|&b+zxtaUGPMpUv8u_F&aAjTEeS z7ZACebFgmjMkZ4Yz7eD|xD4t~GG@6HQfZ_bYe(3ojmWD=WDEj9WJqB$Nf|R&wN7?D z{Q|0%heq*|$jg(>?MNhWN<@}0X%mhgo2=hDc!9B)RnL1~lB~b8!rl;|d&8MQI>r`j zO#^&&eAI9)u)bu97MCjaY1T<%+w2uZlB9cPlM$x~_xOs!yj5JhUZ9rJxT4@vU}Jnb zn1B%Wu|#n@B^eJCL+CMCl8c5@G`X?CYVYk^Ub@+4jj?CkZi|rOGW}}vmQHhZ!}25( zF!J@iHDcH#ti5R+QR!G?z)gPE0yz=!IM1+3n8B!F>=KxmJcgG@7@KUw-^Dp4w zsHlhY6vtrC?V^li%*#e9^Qh3ywzpbFctY$icf5dXLzTH_6~PKRa2{1yhc|B3L; zDZusSg`ePC-*8l7#tH8;$55$<3gaA@WioW){T>{BIhb!r^S3%WM!9wx@|wUyqGw+B zS&&&ff{iDV&Lj%sWk{Udy;CGXwlpCo3S+kC#NRtR<3g5BuW{b32wE1N!4*5fb)eHW z9DX%~%D_5`uVEP1;hVS|hVf=nSO0udsaDY2}tPznQ3wQ#NNq!a9}_@8NA&v;t3 zR2nw2;C3kvQ5pw@i!^PbY4CF?fhzT8L%GBJgl3de{!*BdC=Q1dU-WkSVKK|SJ^i9X zOmdiAizw7T@1;NykhysYv7$v`cNAH=%*J0K^KO^S6&avWrbkAVI0PD`adV4o0c|uK z3!4ATVkkvmvA27k>nJ_P*BV4AP6Y&DJ@RH&H0z1`;Sc56^_Tty=ULbcSC}kRXi3oy znaenFbM?xwE7B*6#E{%8jVCbL_Zr^0QFxM1?evnj6?Vb^`=No7=cH<0t)D^o*EzG7 zc#!%tWM5nqLzjbQ1PUDJ=YQ+KcDc zBB(*3<#0v)tL`G0?YId=x$m69c-Ii>9j<6-^&%GZLuKdKgCLVi7juQ5S}z1xWg2@7 zWj&^yM+Ua{%PvJ*Kr59RjdVPj&<)~Y)f#HY(G1q(f!C>3tE>vd)2hv;k545$RG=Z) z44X`dU(0(~C{GbejcHg+%Va{;1?sV)kSpS~EwPU(tmiA+)Ffr&0<=yhwCW1C6!BWv zh(YNDK{gYG1#Lx86%^W3R15?|BbwU0!q6V0h7>BSQBgkZ^%G6`Cer3(Z|K=DY)&bc zoWkG6p)R|M3SiPY)y-*}K<1PvY(GJHD5j@P(`vdQ6Nu6fpH3c#Cw8wf%+%EkRdd*$ zoAbSi<_?SA)Uo@A)&B~`U=qGDwQ#BItHXo>2Dn%JD-LtN3b#vPb_6n^?lwj#$#~dH o^9AZoBZTyIy)AKTER6k-zq=%3&7Ds=SpWb407*qoM6N<$g5dm}LjV8( literal 0 HcmV?d00001 diff --git a/src/assets/images/phone.png b/src/assets/images/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..2d41a02569533ba5e753a4f905d8e0881af0550b GIT binary patch literal 887 zcmV--1Bm>IP)j50#r4efb;|qRR#5l^aSu&)CbHB!VTOT@Kixt zy#0@}8;_mcBvRaw9CTl}rC467iW2#vM{Me)$ zL-bNXhRsLnR1K&V?gLLVpf>n4aL9m&YLF_}7`g}P6P^y{jxd$x^Y~u$L|?`YszD}V z9MSszcTVjvIe%-eK)%6yTl5~9bcy%Q!fyZa+U!OVU8t$S{x$Da^J@ z^Jp;G>Vl}+0 zCEMR$^C^<&YCOTz^BG{4R2ec2Yk}trGxbXoFyQQs>FO!Kw$w1G4Q}I^mia|8O17iS z;@nU)8%e<0;1-tZ@n0@N!3GD7d$(Sy6^<>nidPzbu-R>Qy{$BpTH!f>i-daOq5`6f z-cb>Pf$M(3_A1GOF4RID4^*oR3fy{Wis3--8jYt{D5B?EnSkp(uwNr>FT4ZdsDRD4B$hx5e|VpoPk)az3>@LV|l3zmXplsd_}DT*mK{Z=dbAn zc}}pF)IM!er6k8Fp3dP99?JM^(`>_Ymx{Dj4PV0tmW9xxubyy7ETJ*zM5;oaK{!S` z2X=9sbfO=0_t+lKj!Ui+LDKXj_T-m7V%&4L69Hq#H+Wpx_2KTW?}rg?nO*H_Bgz#k zG4AOswUXpUVqpiC9ME8R>{|#d(tzTIDiNvAp-)i^fCr?cUgV3GkH>0q Date: Thu, 20 Jan 2022 17:58:46 +0100 Subject: [PATCH 3/4] creation-team incomplet --- src/app/app-routing.module.ts | 2 + src/app/app.module.ts | 2 + src/app/models/membre.ts | 6 +- src/app/models/team.ts | 3 + .../page-creation-team.component.html | 30 ++++++++ .../page-creation-team.component.scss | 32 +++++++++ .../page-creation-team.component.spec.ts | 25 +++++++ .../page-creation-team.component.ts | 72 +++++++++++++++++++ .../page-signup/page-signup.component.ts | 11 +-- src/app/services/auth.service.ts | 18 ++++- src/environments/environment.ts | 2 +- 11 files changed, 193 insertions(+), 10 deletions(-) create mode 100644 src/app/models/team.ts create mode 100644 src/app/pages/page-creation-team/page-creation-team.component.html create mode 100644 src/app/pages/page-creation-team/page-creation-team.component.scss create mode 100644 src/app/pages/page-creation-team/page-creation-team.component.spec.ts create mode 100644 src/app/pages/page-creation-team/page-creation-team.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index ac4db0b..463ee54 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -4,6 +4,7 @@ import { PageAccountComponent } from './pages/page-account/page-account.componen import { PageAccueilComponent } from './pages/page-accueil/page-accueil.component'; import { PageAddMemberComponent } from './pages/page-add-member/page-add-member.component'; import { PageAgendaComponent } from './pages/page-agenda/page-agenda.component'; +import { PageCreationTeamComponent } from './pages/page-creation-team/page-creation-team.component'; import { PageDashboardComponent } from './pages/page-dashboard/page-dashboard.component'; import { PageDeleteMemberComponent } from './pages/page-delete-member/page-delete-member.component'; import { PageForgotPasswordComponent } from './pages/page-forgot-password/page-forgot-password.component'; @@ -30,6 +31,7 @@ const routes: Routes = [ { path: 'creation-compte', component: PageSignupComponent }, { path: 'to-do-list', component: PageToDoListComponent }, { path: 'modifier-membre', component: PageUpdateMemberComponent }, + { path: 'creation-team', component : PageCreationTeamComponent}, { path: '**', component: PageNotFoundComponent }, ]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 9b55ae7..8c02ccc 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -33,6 +33,7 @@ import { PaginationComponent } from './components/pagination/pagination.componen import { CreneauComponent } from './components/creneau/creneau.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HttpClientModule } from '@angular/common/http'; +import { PageCreationTeamComponent } from './pages/page-creation-team/page-creation-team.component'; @NgModule({ declarations: [ @@ -65,6 +66,7 @@ import { HttpClientModule } from '@angular/common/http'; FicheContactComponent, PaginationComponent, CreneauComponent, + PageCreationTeamComponent, ], imports: [ BrowserModule, diff --git a/src/app/models/membre.ts b/src/app/models/membre.ts index 798a31c..cea8af4 100644 --- a/src/app/models/membre.ts +++ b/src/app/models/membre.ts @@ -1,10 +1,10 @@ export interface Membre { - firstName: string; - lastName: string; + nom: string; + prenom: string; email: string; password: string; dateNaissance: Date; - teamName: string; profil: boolean; + roleList: string[]; passwordConfirm: string; } diff --git a/src/app/models/team.ts b/src/app/models/team.ts new file mode 100644 index 0000000..2b5752e --- /dev/null +++ b/src/app/models/team.ts @@ -0,0 +1,3 @@ +export interface Team { + nom : string; +} diff --git a/src/app/pages/page-creation-team/page-creation-team.component.html b/src/app/pages/page-creation-team/page-creation-team.component.html new file mode 100644 index 0000000..27d1f6c --- /dev/null +++ b/src/app/pages/page-creation-team/page-creation-team.component.html @@ -0,0 +1,30 @@ + + + diff --git a/src/app/pages/page-creation-team/page-creation-team.component.scss b/src/app/pages/page-creation-team/page-creation-team.component.scss new file mode 100644 index 0000000..333e617 --- /dev/null +++ b/src/app/pages/page-creation-team/page-creation-team.component.scss @@ -0,0 +1,32 @@ +.login-form { + height: 100vh; + padding-top: 40px; + background-color: #f5f5f5; +} + +.form-signup { + width: 100%; + max-width: 330px; + padding: 15px; + margin: auto; +} + +.form-signup .checkbox { + font-weight: 400; +} + +.form-signup .form-floating:focus-within { + z-index: 2; +} + +.form-signup input[type="email"] { + margin-bottom: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-signup input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} diff --git a/src/app/pages/page-creation-team/page-creation-team.component.spec.ts b/src/app/pages/page-creation-team/page-creation-team.component.spec.ts new file mode 100644 index 0000000..5386127 --- /dev/null +++ b/src/app/pages/page-creation-team/page-creation-team.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PageCreationTeamComponent } from './page-creation-team.component'; + +describe('PageCreationTeamComponent', () => { + let component: PageCreationTeamComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PageCreationTeamComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PageCreationTeamComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/page-creation-team/page-creation-team.component.ts b/src/app/pages/page-creation-team/page-creation-team.component.ts new file mode 100644 index 0000000..9326242 --- /dev/null +++ b/src/app/pages/page-creation-team/page-creation-team.component.ts @@ -0,0 +1,72 @@ +import { Component, OnInit } from '@angular/core'; +import { + FormBuilder, + FormControl, + FormGroup, + Validators, +} from '@angular/forms'; +import { Router } from '@angular/router'; +import { Team } from 'src/app/models/team'; +import { AuthService } from '../../services/auth.service'; + +@Component({ + selector: 'app-page-creation-team', + templateUrl: './page-creation-team.component.html', + styleUrls: ['./page-creation-team.component.scss'], +}) +export class PageCreationTeamComponent implements OnInit { + public teamForm: FormGroup; + constructor( + private authService: AuthService, + private router: Router, + private fb: FormBuilder + ) { + this.teamForm = new FormGroup({}); + } + + ngOnInit(): void { + // *********************************penser a changer group car déprécié******************************** + this.teamForm = new FormGroup({ + nameFc : new FormControl('', [Validators.required]) + }); + } + + public onSubmit(): void { + console.log('value : ', this.teamForm.value); + console.log('form : ', this.teamForm); + const nameValue = this.teamForm.value['nameFc']; + + const team: Team = { + nom : nameValue, + }; + + + + if (team.nom !== '' ) { + this.authService.creationTeam(team).subscribe((resp) => { + this.router.navigate(['compte']); + }); + } else { + // affichage erreur + } + } + + 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/pages/page-signup/page-signup.component.ts b/src/app/pages/page-signup/page-signup.component.ts index 4a5243a..210033c 100644 --- a/src/app/pages/page-signup/page-signup.component.ts +++ b/src/app/pages/page-signup/page-signup.component.ts @@ -25,7 +25,7 @@ export class PageSignupComponent implements OnInit { } ngOnInit(): void { - // *********************************pensser a changer group car déprécié******************************** + // *********************************penser a changer group car déprécié******************************** this.signupForm = this.fb.group( { firstNameFc: new FormControl('', [Validators.required]), @@ -64,21 +64,22 @@ export class PageSignupComponent implements OnInit { const teamNameValue = this.signupForm.value['teamNameFc']; const profilValue = this.signupForm.value['profilFc']; const passwordConfirmValue = this.signupForm.value['passwordConfirmFc']; + const teamValue = ''; const membre: Membre = { - firstName: firstNameValue, - lastName: lastNameValue, + nom: firstNameValue, + prenom: lastNameValue, email: emailValue, password: passwordValue, dateNaissance: dateNaissanceValue, - teamName: teamNameValue, profil: profilValue, passwordConfirm: passwordConfirmValue, + roleList: ["ROLE_PARENT"] }; if (membre.email !== '' && membre.password !== '') { this.authService.signup(membre).subscribe((resp) => { - this.router.navigate(['account/signin']); + this.router.navigate(['accueil']); }); } else { // affichage erreur diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 918bfd9..debe9a4 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -3,6 +3,7 @@ import { Injectable } from '@angular/core'; import { map, Observable } from 'rxjs'; import { environment } from 'src/environments/environment'; import { Membre } from '../models/membre'; +import { Team } from '../models/team'; @Injectable({ providedIn: 'root', @@ -20,9 +21,10 @@ export class AuthService { signup(membre: Membre): Observable { console.log(membre); - return this.http.post(`${this.apiUrl}/creation-compte`, membre); + return this.http.post(`${this.apiUrl}/membres/sign-up`, membre); } + signin(email: string, password: string): Observable { const body = { email: email, @@ -55,4 +57,18 @@ export class AuthService { return this.http.post(`${this.apiUrl}/forgot-psw`, body); } + + creationTeam(team: Team): Observable { + console.log(team); + + return this.http.post(`${this.apiUrl}/creation-compte`, team); + } + + + addMember(membre: Membre): Observable { + console.log(membre); + + return this.http.post(`${this.apiUrl}/tableau-de-bord`, membre); + } + } diff --git a/src/environments/environment.ts b/src/environments/environment.ts index ecf1531..90149fd 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -4,7 +4,7 @@ export const environment = { production: false, - apiUrl: 'http://localhost:3306', + apiUrl: 'http://localhost:8088', tokenKey: 'TOKEN-ORGANIZEE', }; From 5904f64103165feaf9bf395437836fb84c332f8b Mon Sep 17 00:00:00 2001 From: HarmandI Date: Thu, 20 Jan 2022 18:01:32 +0100 Subject: [PATCH 4/4] =?UTF-8?q?d=C3=A9but=20add=20Member?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/models/membre.ts | 6 +- .../page-add-member.component.html | 108 ++++++++++++++++++ .../page-add-member.component.scss | 32 ++++++ .../page-add-member.component.ts | 93 ++++++++++++++- .../page-signup/page-signup.component.ts | 11 +- src/app/services/auth.service.ts | 9 +- src/environments/environment.ts | 2 +- 7 files changed, 248 insertions(+), 13 deletions(-) diff --git a/src/app/models/membre.ts b/src/app/models/membre.ts index 798a31c..cea8af4 100644 --- a/src/app/models/membre.ts +++ b/src/app/models/membre.ts @@ -1,10 +1,10 @@ export interface Membre { - firstName: string; - lastName: string; + nom: string; + prenom: string; email: string; password: string; dateNaissance: Date; - teamName: string; profil: boolean; + roleList: string[]; passwordConfirm: string; } 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 e91fa55..8614282 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 +1,109 @@ + +