Skip to content
Snippets Groups Projects
Commit c5b10345 authored by Hamza Touizrat's avatar Hamza Touizrat
Browse files

Merge branch 'new_signup' into 'master'

New signup

See merge request !80
parents 9f776cff df97cf01
Branches
No related tags found
1 merge request!80New signup
Showing
with 780 additions and 45 deletions
...@@ -7,6 +7,7 @@ import { environment } from 'environments/environment'; ...@@ -7,6 +7,7 @@ import { environment } from 'environments/environment';
import { User } from './models'; import { User } from './models';
import { ObjectStoredItem, SimpleStoredItem } from '../storage'; import { ObjectStoredItem, SimpleStoredItem } from '../storage';
import { UserAdapter } from './adapters'; import { UserAdapter } from './adapters';
import { HttpParams } from '@angular/common/http';
class StoredUser extends ObjectStoredItem<User> { key = 'oser-cs-user-info'; } class StoredUser extends ObjectStoredItem<User> { key = 'oser-cs-user-info'; }
...@@ -21,6 +22,9 @@ export class AuthService { ...@@ -21,6 +22,9 @@ export class AuthService {
private loginUrl = environment.apiUrl + 'auth/get-token/'; private loginUrl = environment.apiUrl + 'auth/get-token/';
private resetUrl = environment.apiUrl + 'rest-auth/password/reset/'; private resetUrl = environment.apiUrl + 'rest-auth/password/reset/';
private resetConfirmUrl = environment.apiUrl + 'rest-auth/password/reset/confirm/'; private resetConfirmUrl = environment.apiUrl + 'rest-auth/password/reset/confirm/';
private mandatorySignatureUrl = environment.apiUrl + 'charter/';
//add the corresponding path in backend interface
fromGuard: boolean; fromGuard: boolean;
redirectUrl: string; redirectUrl: string;
...@@ -82,6 +86,13 @@ export class AuthService { ...@@ -82,6 +86,13 @@ export class AuthService {
return new HttpHeaders({ Authorization: 'Token ' + this.getToken() }); return new HttpHeaders({ Authorization: 'Token ' + this.getToken() });
} }
checkSignatureCharter(email: any) : Observable<Boolean> {
const parm = new HttpParams({fromString: 'email='+ email})
return this.http.get<Boolean>( this.mandatorySignatureUrl, { params: parm}).pipe(
map((data: any) => {
return data}),
);
}
get isLoggedIn(): boolean { get isLoggedIn(): boolean {
if (this.user.get()) { if (this.user.get()) {
return true; return true;
...@@ -89,6 +100,13 @@ export class AuthService { ...@@ -89,6 +100,13 @@ export class AuthService {
return false; return false;
} }
sendSignatureCharter(email: any) : Observable<Boolean> {
return this.http.post<Boolean>( this.mandatorySignatureUrl+'?email=' +email,{}).pipe(
map((data: any) => {
return data}),
);
}
logout() { logout() {
this.user.destroy(); this.user.destroy();
this.token.destroy(); this.token.destroy();
......
...@@ -4,7 +4,7 @@ import { FormGroup, FormBuilder } from '@angular/forms'; ...@@ -4,7 +4,7 @@ import { FormGroup, FormBuilder } from '@angular/forms';
import { MatSnackBar } from '@angular/material'; import { MatSnackBar } from '@angular/material';
import { AuthService, MessageService } from 'app/core'; import { AuthService, MessageService } from 'app/core';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { filter, map, tap, catchError } from 'rxjs/operators'; import { filter, map, tap, catchError, subscribeOn } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
...@@ -14,8 +14,11 @@ import { filter, map, tap, catchError } from 'rxjs/operators'; ...@@ -14,8 +14,11 @@ import { filter, map, tap, catchError } from 'rxjs/operators';
export class LoginComponent implements OnInit { export class LoginComponent implements OnInit {
loading: boolean = false; loading: boolean = false;
hassignedCharter = true;
defaultRedirectUrl: string = '/membres'; defaultRedirectUrl: string = '/membres';
charterUrl: string = 'inscription/student-charter';
formGroup: FormGroup; formGroup: FormGroup;
loginSuccess: boolean = false;
constructor( constructor(
private router: Router, private router: Router,
...@@ -42,23 +45,58 @@ export class LoginComponent implements OnInit { ...@@ -42,23 +45,58 @@ export class LoginComponent implements OnInit {
}); });
} }
login() { async login() {
var toto = false;
this.loading = true; this.loading = true;
const { email, password } = this.formGroup.value; const { email, password } = this.formGroup.value;
this.messageService.clear(); this.messageService.clear();
this.auth.login(email, password).pipe( await this.auth.login(email, password).pipe(
map(() => this.loginSuccess = true),
catchError(() => { catchError(() => {
this.messageService.error("L'identifiant ou le mot de passe est incorrect."); this.messageService.error("L'identifiant ou le mot de passe est incorrect.");
this.loginSuccess = false;
return of(false); return of(false);
}), }),
tap(() => this.loading = false), tap(() => this.loading = false),
// Only continue if no error // Only continue if no error
filter(Boolean), filter(Boolean),
// Get redirect URL from the auth service, provided by the auth guard. // Get redirect URL from the auth service, provided by the auth guard.
).subscribe({
complete() {
console.log("login unsuccess");
},
});
if(this.loginSuccess == true){
this.auth.checkSignatureCharter(email).pipe(
catchError(() => {
this.hassignedCharter = false;
this.messageService.error("Vous n'avez pas signé le(s) charte(s).");
map(() => this.auth.redirectUrl ? this.auth.redirectUrl : this.defaultRedirectUrl),
tap((redirectUrl: string) => this.router.navigate([redirectUrl]));
return of(false);
}),
map(() => this.auth.redirectUrl ? this.auth.redirectUrl : this.defaultRedirectUrl), map(() => this.auth.redirectUrl ? this.auth.redirectUrl : this.defaultRedirectUrl),
tap(() => this.snackBar.open('Connexion réussie !', 'OK', { duration: 2000 })), tap(() => this.snackBar.open('Connexion réussie !', 'OK', { duration: 2000 })),
tap((redirectUrl: string) => this.router.navigate([redirectUrl])), ).subscribe().add(() =>
).subscribe(); {
if(this.hassignedCharter == false)
{
this.router.navigate([this.charterUrl]);
}
else
{
this.router.navigate([this.defaultRedirectUrl]);
}
});
} }
} }
}
\ No newline at end of file
...@@ -18,8 +18,12 @@ ...@@ -18,8 +18,12 @@
<mat-option value="Autre">Autre</mat-option> <mat-option value="Autre">Autre</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field class="horizontal-display" > <mat-form-field class="horizontal-display" >
<input matInput type="text" formControlName="nationality" placeholder="Nationalité" required> <mat-label>Nationalité</mat-label>
<mat-select formControlName="nationality" required>
<mat-option *ngFor="let nationality of possibleNationalities" [value]="nationality.name"> {{ nationality.name }}</mat-option>
</mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
...@@ -82,7 +86,7 @@ ...@@ -82,7 +86,7 @@
<mat-form-field class="horizontal-display horizontal-center"> <mat-form-field class="horizontal-display horizontal-center">
<mat-label>Voie</mat-label> <mat-label>Voie</mat-label>
<mat-select formControlName="classType" required> <mat-select formControlName="classType" [(value)]="classType" required>
<mat-option value="General">General</mat-option> <mat-option value="General">General</mat-option>
<mat-option value="Technologique">Technologique</mat-option> <mat-option value="Technologique">Technologique</mat-option>
<mat-option value="Professionnelle">Professionnelle</mat-option> <mat-option value="Professionnelle">Professionnelle</mat-option>
...@@ -99,6 +103,14 @@ ...@@ -99,6 +103,14 @@
</div> </div>
<mat-form-field class="full-width" >
<mat-label>Enseignements de spécialité (entrer 'aucun' si jamais vous n'etes pas concerné) </mat-label>
<mat-select formControlName="specialTeaching" required >
<mat-option *ngFor="let specialTeaching of setSpeciality()" [value]="specialTeaching.id">{{ specialTeaching.name }}</mat-option>
</mat-select>
</mat-form-field>
<p class="text-center">Informations parentales</p> <p class="text-center">Informations parentales</p>
<div class="form-group"> <div class="form-group">
......
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { FormGroup, FormBuilder, Validators, ReactiveFormsModule, FormControlName, FormControl } from '@angular/forms';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { MatSnackBar } from '@angular/material'; import { MatSnackBar } from '@angular/material';
import {ActivatedRoute} from '@angular/router' import {ActivatedRoute} from '@angular/router'
import { PersonalData,PersonalDataService } from '../core'; import { PersonalData,PersonalDataService } from '../core';
import { tap, mergeMap } from 'rxjs/operators'; import { tap, mergeMap } from 'rxjs/operators';
import { AuthService } from 'app/core'; import { AuthService } from 'app/core';
import {User} from 'app/core' import {User} from 'app/core';
import {Observable} from 'rxjs';
import {map, startWith} from 'rxjs/operators';
export interface Nationality {
id : string;
name: string;
}
@Component({ @Component({
selector: 'app-edit-data', selector: 'app-edit-data',
templateUrl: './edit-data.component.html', templateUrl: './edit-data.component.html',
styleUrls: ['./edit-data.component.scss'] styleUrls: ['./edit-data.component.scss']
}) })
export class EditDataComponent implements OnInit { export class EditDataComponent implements OnInit {
personalData: PersonalData; personalData: PersonalData;
formGroup : FormGroup; formGroup : FormGroup;
loading = false; loading = false;
public error : String = ""; public error : String = "";
public postEditMessage : String = "" ; public postEditMessage : String = "" ;
classType="";
myControl = new FormControl();
public possibleParentsStatus = [ public possibleParentsStatus = [
{id:"maried",name:"Vos parents vivent ensemble"}, {id:"maried",name:"Vos parents vivent ensemble"},
{id:"cohabitation",name:"Vos parents vivent séparément"}, {id:"separated",name:"Vos parents vivent séparément"},
{id:"monoparental",name:"Vous avez un seul parent"} {id:"monoparental",name:"Vous avez un seul parent"},
{id:"noparents",name:"Vous ne dépendez pas de vos parents"},
] ]
public possibleParentsActivities = [ public possibleParentsActivities = [
...@@ -40,6 +58,104 @@ export class EditDataComponent implements OnInit { ...@@ -40,6 +58,104 @@ export class EditDataComponent implements OnInit {
{id:"Autre",name:"Autre"} {id:"Autre",name:"Autre"}
] ]
public possibleNationalities: Nationality[] = [
{id:"AFG", name:"Afghane"},
{id:"ALB", name:"Albanaise"},
{id:"DZA", name:"Algérienne"},
{id:"DEU", name:"Allemande"},
{id:"USA", name:"Americaine"},
{id:"AND", name:"Andorrane"},
{id:"AGO", name:"Angolaise"},
{id:"ATG", name:"Antiguaise-et-Barbudienne"},
{id:"ARG", name:"Argentine"},
{id:"ARM", name:"Armenienne"},
{id:"AUS", name:"Australienne"},
{id:"AUT", name:"Autrichienne"},
{id:"AZE", name:"Azerbaïdjanaise"},
{id:"BHS", name:"Bahamienne"},
{id:"BHR", name:"Bahreinienne"},
{id:"BGD", name:"Bangladaise"},
{id:"BRB", name:"Barbadienne"},
{id:"BEL", name:"Belge"},
{id:"BLZ", name:"Belizienne"},
{id:"BEN", name:"Béninoise"},
{id:"BTN", name:"Bhoutanaise"},
{id:"BLR", name:"Biélorusse"},
{id:"MMR", name:"Birmane"},
{id:"GNB", name:"Bissau-Guinéenne"},
{id:"BOL", name:"Bolivienne"},
{id:"BIH", name:"Bosnienne"},
{id:"BWA", name:"Botswanaise"},
{id:"BRA", name:"Brésilienne"},
{id:"GBR", name:"Britannique"},
{id:"BRN", name:"Brunéienne"},
{id:"BGR", name:"Bulgare"},
{id:"BFA", name:"Burkinabée"},
{id:"BDI", name:"Burundaise"},
{id:"KHM", name:"Cambodgienne"},
{id:"CMR", name:"Camerounaise"},
{id:"CAN", name:"Canadienne"},
{id:"CPV", name:"Cap-verdienne"},
{id:"CAF", name:"Centrafricaine"},
{id:"CHL", name:"Chilienne"},
{id:"CHN", name:"Chinoise"},
{id:"CYP", name:"Chypriote"},
{id:"COL", name:"Colombienne"},
{id:"COM", name:"Comorienne"},
{id:"COG", name:"Congolaise"},
{id:"COD", name:"Congolaise"},
{id:"COK", name:"Cookienne"},
{id:"CRI", name:"Costaricaine"},
{id:"HRV", name:"Croate"},
{id:"CUB", name:"Cubaine"},
{id:"DNK", name:"Danoise"},
{id:"DJI", name:"Djiboutienne"},
{id:"DOM", name:"Dominicaine"},
{id:"DMA", name:"Dominiquaise"},
{id:"EGY", name:"Égyptienne"},
{id:"ARE", name:"Émirienne"},
{id:"GNQ", name:"Équato-guineenne"},
{id:"ECU", name:"Équatorienne"},
{id:"ERI", name:"Érythréenne"},
{id:"ESP", name:"Espagnole"},
{id:"TLS", name:"Est-timoraise"},
{id:"EST", name:"Estonienne"},
{id:"ETH", name:"Éthiopienne"},
{id:"FJI", name:"Fidjienne"},
{id:"FIN", name:"Finlandaise"},
{id:"FRA", name:"Française"},
{id:"GAB", name:"Gabonaise"},
{id:"GMB", name:"Gambienne"},
{id:"GEO", name:"Georgienne"},
{id:"GHA", name:"Ghanéenne"},
{id:"GRD", name:"Grenadienne"},
{id:"GTM", name:"Guatémaltèque"},
{id:"GIN", name:"Guinéenne"},
{id:"GUY", name:"Guyanienne"},
{id:"HTI", name:"Haïtienne"},
{id:"GRC", name:"Hellénique"},
{id:"HND", name:"Hondurienne"},
{id:"HUN", name:"Hongroise"},
{id:"IND", name:"Indienne"},
{id:"IDN", name:"Indonésienne"},
{id:"IRQ", name:"Irakienne"},
{id:"IRN", name:"Iranienne"},{id:"IRL", name:"Irlandaise"},
{id:"ISL", name:"Islandaise"},
{id:"ISR", name:"Israélienne"},
{id:"ITA", name:"Italienne"},
{id:"CIV", name:"Ivoirienne"},
{id:"JAM", name:"Jamaïcaine"},
{id:"JPN", name:"Japonaise"},
{id:"JOR", name:"Jordanienne"},
{id:"KAZ", name:"Kazakhstanaise"},
{id:"KEN", name:"Kenyane"},
{id:"KGZ", name:"Kirghize"},
{id:"KIR", name:"Kiribatienne"},{id:"KNA", name:"Kittitienne"},{id:"KWT", name:"Koweïtienne"},{id:"LAO", name:"Laotienne"},{id:"LSO", name:"Lesothane"},{id:"LVA", name:"Lettone"},{id:"LBN", name:"Libanaise"},{id:"LBR", name:"Libérienne"},{id:"LBY", name:"Libyenne"},{id:"LIE", name:"Liechtensteinoise"},{id:"LTU", name:"Lituanienne"},{id:"LUX", name:"Luxembourgeoise"},{id:"MKD", name:"Macédonienne"},{id:"MYS", name:"Malaisienne"},{id:"MWI", name:"Malawienne"},{id:"MDV", name:"Maldivienne"},{id:"MDG", name:"Malgache"},{id:"MLI", name:"Maliennes"},{id:"MLT", name:"Maltaise"},{id:"MAR", name:"Marocaine"},{id:"MHL", name:"Marshallaise"},{id:"MUS", name:"Mauricienne"},{id:"MRT", name:"Mauritanienne"},{id:"MEX", name:"Mexicaine"},{id:"FSM", name:"Micronésienne"},{id:"MDA", name:"Moldave"},{id:"MCO", name:"Monegasque"},{id:"MNG", name:"Mongole"},{id:"MNE", name:"Monténégrine"},{id:"MOZ", name:"Mozambicaine"},{id:"NAM", name:"Namibienne"},{id:"NRU", name:"Nauruane"},{id:"NLD", name:"Néerlandaise"},{id:"NZL", name:"Néo-Zélandaise"},
{id:"NPL", name:"Népalaise"},{id:"NIC", name:"Nicaraguayenne"},{id:"NGA", name:"Nigériane"},{id:"NER", name:"Nigérienne"},{id:"NIU", name:"Niuéenne"},{id:"PRK", name:"Nord-coréenne"},{id:"NOR", name:"Norvégienne"},{id:"OMN", name:"Omanaise"},{id:"UGA", name:"Ougandaise"},{id:"UZB", name:"Ouzbéke"},{id:"PAK", name:"Pakistanaise"},{id:"PLW", name:"Palaosienne"},{id:"PSE", name:"Palestinienne"},{id:"PAN", name:"Panaméenne"},{id:"PNG", name:"Papouane-Néo-Guinéenne"},{id:"PRY", name:"Paraguayenne"},{id:"PER", name:"Péruvienne"},{id:"PHL", name:"Philippine"},{id:"POL", name:"Polonaise"},{id:"PRT", name:"Portugaise"},{id:"QAT", name:"Qatarienne"},{id:"ROU", name:"Roumaine"},{id:"RUS", name:"Russe"},{id:"RWA", name:"Rwandaise"},{id:"LCA", name:"Saint-Lucienne"},{id:"SMR", name:"Saint-Marinaise"},{id:"VCT", name:"Saint-Vincentaise"},{id:"SLB", name:"Salomonaise"},{id:"SLV", name:"Salvadorienne"},{id:"WSM", name:"Samoane"},{id:"STP", name:"Santoméenne"},{id:"SAU", name:"Saoudienne"},{id:"SEN", name:"Sénégalaise"},{id:"SRB", name:"Serbe"},{id:"SYC", name:"Seychelloise"},{id:"SLE", name:"Sierra-Léonaise"},{id:"SGP", name:"Singapourienne"},{id:"SVK", name:"Slovaque"},{id:"SVN", name:"Slovène"},{id:"SOM", name:"Somalienne"},{id:"SDN", name:"Soudanaise"},{id:"LKA", name:"Sri-Lankaise"},{id:"ZAF", name:"Sud-Africaine"},{id:"KOR", name:"Sud-Coréenne"},{id:"SSD", name:"Sud-Soudanaise"},{id:"SWE", name:"Suédoise"},{id:"CHE", name:"Suisse"},{id:"SUR", name:"Surinamaise"},{id:"SWZ", name:"Swazie"},{id:"SYR", name:"Syrienne"},{id:"TJK", name:"Tadjike"},{id:"TZA", name:"Tanzanienne"},{id:"TCD", name:"Tchadienne"},{id:"CZE", name:"Tchèque"},{id:"THA", name:"Thaïlandaise"},{id:"TGO", name:"Togolaise"},{id:"TON", name:"Tonguienne"},{id:"TTO", name:"Trinidadienne"},{id:"TUN", name:"Tunisienne"},{id:"TKM", name:"Turkmène"},{id:"TUR", name:"Turque"},{id:"TUV", name:"Tuvaluane"},{id:"UKR", name:"Ukrainienne"},{id:"URY", name:"Uruguayenne"},{id:"VUT", name:"Vanuatuane"},{id:"VAT", name:"Vaticane"},{id:"VEN", name:"Vénézuélienne"},{id:"VNM", name:"Vietnamienne"},{id:"YEM", name:"Yéménite"},{id:"ZMB", name:"Zambienne"},{id:"ZWE", name:"Zimbabwéenne"}
]
public possibleSchools = [ public possibleSchools = [
{id:"Jean Perrin (Longjumeau)", name:"Jean Perrin (Longjumeau)"}, {id:"Jean Perrin (Longjumeau)", name:"Jean Perrin (Longjumeau)"},
{id:"Robert Doisneau (Corbeil-Essonnes)",name:"Robert Doisneau (Corbeil-Essonnes)"}, {id:"Robert Doisneau (Corbeil-Essonnes)",name:"Robert Doisneau (Corbeil-Essonnes)"},
...@@ -48,8 +164,7 @@ export class EditDataComponent implements OnInit { ...@@ -48,8 +164,7 @@ export class EditDataComponent implements OnInit {
{id:"Charles Péguy (Bobigny)",name:"Charles Péguy (Bobigny)"}, {id:"Charles Péguy (Bobigny)",name:"Charles Péguy (Bobigny)"},
{id:"Jean Jaurès (Chatenay-Malabry)",name:"Jean Jaurès (Chatenay-Malabry)"}, {id:"Jean Jaurès (Chatenay-Malabry)",name:"Jean Jaurès (Chatenay-Malabry)"},
{id:"Parc des Loges (Evry)",name:"Parc des Loges (Evry)"}, {id:"Parc des Loges (Evry)",name:"Parc des Loges (Evry)"},
{id:"Jean-Baptiste Corot (Savigny-sur-Orge)",name:"Jean-Baptiste Corot (Savigny-sur-Orge)"}, {id:"Jean Jaurès (Argenteuil)",name:"Jean Jaurès (Argenteuil)"},
{id:"Gaspard Monge (Savigny-sur-Orge)",name:"Gaspard Monge (Savigny-sur-Orge)"},
] ]
public possibleScholarships = [ public possibleScholarships = [
...@@ -63,7 +178,113 @@ export class EditDataComponent implements OnInit { ...@@ -63,7 +178,113 @@ export class EditDataComponent implements OnInit {
] ]
public possibleSpecialitiesTechno = [
{id:"Aucun",name:"Aucun"},
{id:"STI2D",name:"Sciences et technologies de l’industrie et du développement durable"},
{id:"STD2A",name:"Sciences et technologies du design et des arts appliqués"},
{id:"STMG",name:"Sciences et technologies du management et de la gestion"},
{id:"ST2S",name:"Sciences et technologies de la santé et du social"},
{id:"STL",name:"Sciences et technologies de laboratoire"},
{id:"S2TMD",name:"Sciences et techniques du théâtre, de la musique et de la danse"},
{id:"STHR",name:"Sciences et technologies de l'hôtellerie et de la restauration"},
{id:"STAV",name:"Sciences et technologies de l'agronomie et du vivant"},
]
public possibleSpecialitiesGeneral = [
{id:"Aucun",name:"Tu es dans une filière générale, tu n'as pas besoin de remplir cette case."},
]
public possibleSpecialitiesPro = [
{id:"Aucun",name:"Aucun"},
{id:"Accompagnement soins et services à la personne",name:"Accompagnement soins et services à la personne"},
{id:"Aéronautique",name:"Aéronautique"},
{id:"Aménagement et finition du bâtiment",name:"Aménagement et finition du bâtiment"},
{id:"Animation - enfance et personnes âgées",name:"Animation - enfance et personnes âgées"},
{id:"Artisanat et métiers d'art",name:"Artisanat et métiers d'art"},
{id:"Assistance à la gestion des organisations et de leurs activités",name:"Assistance à la gestion des organisations et de leurs activités"},
{id:"Aviation générale",name:"Aviation générale"},
{id:"Bio-industries de transformation",name:"Bio-industries de transformation"},
{id:"Boucher charcutier traiteur",name:"Boucher charcutier traiteur"},
{id:"Boulanger - pâtissier",name:"Boulanger - pâtissier"},
{id:"Commerce",name:"Commerce"},
{id:"Commercialisation et services en restauration",name:"Commercialisation et services en restauration"},
{id:"Conducteur transport routier marchandises",name:"Conducteur transport routier marchandises"},
{id:"Construction des carrosseries",name:"Construction des carrosseries"},
{id:"Cuisine",name:"Cuisine"},
{id:"Esthétique cosmétique parfumerie",name:"Esthétique cosmétique parfumerie"},
{id:"Étude et définition de produits industriels",name:"Étude et définition de produits industriels"},
{id:"Etude et réalisation d'agencement",name:"Etude et réalisation d'agencement"},
{id:"Façonnage de produits imprimés, routage",name:"Façonnage de produits imprimés, routage"},
{id:"Fonderie",name:"Fonderie"},
{id:"Gestion administration",name:"Gestion administration"},
{id:"Gestion des pollutions et protection de l'environnement",name:"Gestion des pollutions et protection de l'environnement"},
{id:"Hygiène, propreté et stérilisation",name:"Hygiène, propreté et stérilisation"},
{id:"Installateur en chauffage, climatisation et énergies renouvelables ",name:"Installateur en chauffage, climatisation et énergies renouvelables "},
{id:"Interventions sur le patrimoine bâti",name:"Interventions sur le patrimoine bâti"},
{id:"Logistique",name:"Logistique"},
{id:"Maintenance des équipements industriels",name:"Maintenance des équipements industriels"},
{id:"Maintenance des matériels",name:"Maintenance des matériels"},
{id:"Maintenance des systèmes de production connectés",name:"Maintenance des systèmes de production connectés"},
{id:"Maintenance des véhicules",name:"Maintenance des véhicules"},
{id:"Maintenance et Efficacité Energétique",name:"Maintenance et Efficacité Energétique"},
{id:"Maintenance nautique",name:"Maintenance nautique"},
{id:"Menuiserie Aluminium-Verre",name:"Menuiserie Aluminium-Verre"},
{id:"Métiers de l'accueil",name:"Métiers de l'accueil"},
{id:"Métiers de l'électricité et de ses environnements connectés",name:"Métiers de l'électricité et de ses environnements connectés"},
{id:"Métiers de la coiffure",name:"Métiers de la coiffure"},
{id:"Métiers de la mode - vêtements",name:"Logistique"},
{id:"Métiers de la sécurité",name:"Métiers de la sécurité"},
{id:"Métiers du commerce et de la vente",name:"Métiers du commerce et de la vente"},
{id:"Métiers du cuir",name:"Métiers du cuir"},
{id:"Métiers du Froid et des Énergies Renouvelables",name:"Métiers du Froid et des Énergies Renouvelables"},
{id:"Métiers du pressing et de la blanchisserie",name:"Métiers du pressing et de la blanchisserie"},
{id:"Métiers et arts de la pierre",name:"Métiers et arts de la pierre"},
{id:"Microtechniques",name:"Microtechniques"},
{id:"Modélisation et prototypage 3D",name:"Modélisation et prototypage 3D"},
{id:"Optique lunetterie",name:"Optique lunetterie"},
{id:"Organisation de transport de marchandises",name:"Organisation de transport de marchandises"},
{id:"Ouvrage du bâtiment : métallerie",name:"Ouvrage du bâtiment : métallerie"},
{id:"Perruquier posticheur",name:"Perruquier posticheur"},
{id:"Photographie",name:"Photographie"},
{id:"Pilote de ligne de production",name:"Pilote de ligne de production"},
{id:"Plastiques et composites",name:"Plastiques et composites"},
{id:"Poissonnier écailler traiteur",name:"Poissonnier écailler traiteur"},
{id:"Procédés de la chimie, de l'eau et des papiers-cartons",name:"Procédés de la chimie, de l'eau et des papiers-cartons"},
{id:"Productique mécanique",name:"Productique mécanique"},
{id:"Prothèse dentaire",name:"Prothèse dentaire"},
{id:"Réalisation de produits imprimés et plurimédia",name:"Réalisation de produits imprimés et plurimédia"},
{id:"Réparation des carrosseries",name:"Réparation des carrosseries"},
{id:"Services de proximité et vie locale",name:"Services de proximité et vie locale"},
{id:"Systèmes numériques",name:"Systèmes numériques"},
{id:"Technicien Gaz",name:"Technicien Gaz"},
{id:"Technicien constructeur bois",name:"Technicien constructeur bois"},
{id:"Technicien de maintenance de systèmes énergétiques et climatiques",name:"Technicien de maintenance de systèmes énergétiques et climatiques"},
{id:"Technicien d'études du bâtiment",name:"Technicien d'études du bâtiment"},
{id:"Technicien du froid et du conditionnement de l'air",name:"Technicien du froid et du conditionnement de l'air"},
{id:"Technicien d'usinage",name:"Technicien d'usinage"},
{id:"Technicien de fabrication bois et matériaux associés",name:"Technicien de fabrication bois et matériaux associés"},
{id:"Technicien de maintenance de systèmes énergétiques et climatiques",name:"Technicien de maintenance de systèmes énergétiques et climatiques"},
{id:"Technicien du bâtiment : organisation et réalisation du gros oeuvre",name:"Technicien du bâtiment : organisation et réalisation du gros oeuvre"},
{id:"Technicien en appareillage orthopédique",name:"Technicien en appareillage orthopédique"},
{id:"Technicien en chaudronnerie industrielle",name:"Technicien en chaudronnerie industrielle"},
{id:"Technicien en installation des systèmes énergétiques et climatiques",name:"Technicien en installation des systèmes énergétiques et climatiques"},
{id:"Technicien en prothèse dentaire",name:"Technicien en prothèse dentaire"},
{id:"Technicien en réalisation de produits mécaniques",name:"Technicien en réalisation de produits mécaniques"},
{id:"Technicien géomètre topographe",name:"Technicien géomètre topographe"},
{id:"Technicien menuisier agenceur",name:"Technicien menuisier agenceur"},
{id:"Technicien modeleur",name:"Technicien modeleur"},
{id:"Technicien outilleur",name:"Technicien outilleur"},
{id:"Techniques d'interventions sur installations nucléaires",name:"Techniques d'interventions sur installations nucléaires"},
{id:"Traitements des matériaux",name:"Traitements des matériaux"},
{id:"Transport",name:"Transport"},
{id:"Transport fluvial",name:"Transport fluvial"},
{id:"Travaux publics",name:"Travaux publics"},
{id:"Vente",name:"Vente"},
]
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private personalDataService : PersonalDataService, private personalDataService : PersonalDataService,
...@@ -73,11 +294,23 @@ export class EditDataComponent implements OnInit { ...@@ -73,11 +294,23 @@ export class EditDataComponent implements OnInit {
private snackBar: MatSnackBar, private snackBar: MatSnackBar,
) { } ) { }
filteredOptions: Observable<Nationality[]>;
ngOnInit() { ngOnInit() {
this.personalData = this.route.snapshot.data['personalData']; this.personalData = this.route.snapshot.data['personalData'];
this.createForm() this.createForm();
this.classType=this.personalData.classType;
}
public _filter(value: string): string[] {
const filterValue = value.toLowerCase();
let entryNatList : Array<string>;
for (let nationality of this.possibleNationalities)
{
entryNatList.push(nationality.name);
}
return entryNatList.filter(option => option.toLowerCase().includes(filterValue));
} }
...@@ -111,6 +344,21 @@ export class EditDataComponent implements OnInit { ...@@ -111,6 +344,21 @@ export class EditDataComponent implements OnInit {
} }
setSpeciality(){
if (this.classType=="Technologique")
{
return this.possibleSpecialitiesTechno;
}
else if (this.classType=="Professionnelle")
{
return this.possibleSpecialitiesPro;
}
else (this.classType=="General")
{
return this.possibleSpecialitiesGeneral;
}
}
submit(){ submit(){
this.loading = true; this.loading = true;
const {firstName,lastName,gender,nationality,classType,addressNumber,street,zipCode,city,personalPhone,parentsPhone,parentsEmail,school,grade,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber} = this.formGroup.value; const {firstName,lastName,gender,nationality,classType,addressNumber,street,zipCode,city,personalPhone,parentsPhone,parentsEmail,school,grade,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber} = this.formGroup.value;
......
...@@ -5,6 +5,7 @@ class RegistrationSchema { ...@@ -5,6 +5,7 @@ class RegistrationSchema {
email: string; email: string;
firstName: string; firstName: string;
lastName: string; lastName: string;
dateOfBirth : Date;
phoneNumber : string; phoneNumber : string;
} }
...@@ -28,6 +29,7 @@ export class RegistrationAdapter { ...@@ -28,6 +29,7 @@ export class RegistrationAdapter {
email: obj.email, email: obj.email,
first_name: obj.firstName, first_name: obj.firstName,
last_name: obj.lastName, last_name: obj.lastName,
dateOfBirth : obj.dateOfBirth,
phone_number : obj.phoneNumber, phone_number : obj.phoneNumber,
} }
} }
......
<app-form-page >
<h1>
Signature de l'accord des parents
</h1>
<a>
Cette partie de l'inscription est à destination de tes parents.
</a>
<h2>
Qu'est-ce que OSER ?
</h2>
<p>
OSER est une association étudiante de CentraleSupélec affiliée au programme national des <a>Cordées de la Réussite</a>.
Elle propose à des collégien·ne·s et des lycéen·ne·s des <strong class=important>séances de tutorat</strong> d’ouverture culturelle et scientifique,
des <strong class=important>sorties</strong> en Île-de-France, ainsi que de nombreux projets incluant des voyages et des stages leur permettant de vivre
de nombreuses expériences enrichissantes. <a>L’objectif ?</a> Permettre à nos tutoré·e·s de développer leur aisance à l’oral,
leur esprit critique, le travail d’équipe ainsi qu’enrichir leur culture générale. Enfin, les tutoré·e·s peuvent compter
sur leurs tuteurs et tutrices pour les guider dans leur orientation.
</p>
<p>
Pour plus d’informations, vous pouvez nous contacter par mail : <a href="mailto:contact@oser-cs.fr" >contact@oser-cs.fr</a>.
</p>
<a>
<mat-checkbox class="text-center" [checked]="$state_general" (click)="toggleGeneral()">J'autorise mon enfant à participer à OSER.</mat-checkbox>
</a>
<p>
<mat-hint>
Cette signature est obligatoire.
</mat-hint>
</p>
<h2>
Quelles sont les données récupérées par OSER ?
</h2>
<p>
Dans le cadre de la récente mise en place du <a>RGPD</a> (Règlement Général sur la Protection des Données), nous aimerions attirer
votre attention sur les collectes d’informations qu’OSER effectue. Les données que nous récoltons sont les coordonnées de votre enfant,
celles des personnes à contacter en cas d’urgence, ainsi que des données sociales qui nous sont indispensables pour justifier
nos activités auprès des <strong class=important>organismes de subventions publics</strong> (région, département et rectorat).
La collecte de ces données se fait lors de l’inscription à OSER via un formulaire sur notre site internet en début d’année
et peut aussi se faire lors des inscriptions aux divers projets proposés par l’association.
Le <strong class=important>stockage de ces informations</strong> se fait en partie dans un Google Drive accessible aux membres du bureau de l’association,
sur notre site internet et en partie au format papier. Les documents papiers sont conservés sous clés. <a>Nous nous engageons
à ce que seuls les tuteurs et tutrices de l’association aient accès aux informations collectées et à ce qu’ells soient exclusivement utilisées
dans le cadre des actions d’OSER.</a>
</p>
<p>
De plus, nous vous informons que la communication avec les lycéen·ne·s se fait via l’application <strong class=important>WhatsApp</strong>.
Cet outil nous permet de leur rappeler les dates des prochaines séances, de leur communiquer des informations sur nos
projets et de répondre à leurs questions.
</p>
<p>
Les données récoltées peuvent être modifiées à tout moment via l'onglet "Mon compte" sur le site. Vous pouvez également demander à tout moment
la supression des données par mail : <a href="mailto:contact@oser-cs.fr" >contact@oser-cs.fr</a>
</p>
<a>
<mat-checkbox class="text-center" [checked]="$state_data" (click)="toggleData()">J'autorise OSER à récupérer les données de mon enfant.</mat-checkbox>
</a>
<p>
<mat-hint>
Cette signature est obligatoire.
</mat-hint>
</p>
<h2>
Autorisation de droit à l'image
</h2>
<p>
En cochant la case ci-dessous, vous autorisez les tuteurs et tutrices d’OSER à prendre des <strong class=important>photos</strong> et des <strong class=important>vidéos</strong> représentant votre enfant,
lors de sa présence en séance de tutorat et lors des activités organisées par l'association (sorties ou projets).
Ces films et/ou photos peuvent être utilisées par <a>OSER</a> ainsi que <a>CentraleSupélec</a> sur des outils de communication internes et
externes (site internet, réseaux sociaux, présentation en séance) afin de présenter nos activités aux financeurs et de faire
de la publicité auprès des tutoré·e·s pour les projets pour les années à venir.
</p>
<mat-checkbox class="text-center" [checked]="$state_image" (click)="toggleImage()">J'autorise OSER à prendre en photo/vidéo mon enfant.</mat-checkbox>
<p>
<mat-hint>
Cette signature n'est pas obligatoire.
</mat-hint>
</p>
<div class="text-center">
<button mat-raised-button color="primary" (click)="signChart()" [disabled]="!toggleSuivant()" routerLink='/membres/compte/modifier_donnees'>
Terminer l'inscription
</button>
</div>
</app-form-page>
\ No newline at end of file
.important{
color: rgb(17, 180, 185);
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { AuthService } from 'app/core';
import { Registration, RegistrationService, PasswordErrorStateMatcher,PersonnalData,PersonnalDataService } from '../core';
import { StudentSignupComponent } from '../student-signup/student-signup.component';
@Component({
selector: 'app-parents-charter',
templateUrl: './parents-charter.component.html',
styleUrls: ['./parents-charter.component.scss']
})
export class ParentsCharterComponent implements OnInit {
state_general:boolean;
state_data:boolean;
state_image:boolean;
state_button:boolean;
constructor(
private auth: AuthService,
) { }
ngOnInit() {
}
toggleGeneral(){
this.state_general=!this.state_general;
}
toggleData(){
this.state_data=!this.state_data;
}
toggleImage(){
this.state_image=!this.state_image;
}
toggleSuivant(){
this.state_button = !this.state_general || !this.state_data;
return !this.state_button;
}
submit(){
}
// send post to url
signChart()
{
console.log("signChart");
this.auth.sendSignatureCharter(this.auth.getUserSnapshot().email).subscribe();
}
}
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { StudentCharterComponent } from './student-charter/student-charter.component';
import { StudentSignupComponent } from './student-signup/student-signup.component'; import { StudentSignupComponent } from './student-signup/student-signup.component';
import { ValidEmailComponent } from './valid-email/valid-email.component';
import { WaitingEmailVerificationComponent } from './waiting-email-verification/waiting-email-verification.component';
import { ParentsCharterComponent } from './parents-charter/parents-charter.component';
const routes: Routes = [ const routes: Routes = [
...@@ -8,6 +12,23 @@ const routes: Routes = [ ...@@ -8,6 +12,23 @@ const routes: Routes = [
path: '', path: '',
component: StudentSignupComponent component: StudentSignupComponent
}, },
{
path:'waiting',
component : WaitingEmailVerificationComponent
},
{
path:'valid-email',
component : ValidEmailComponent
},
{
path:'student-charter',
component : StudentCharterComponent
},
{
path:'parents-charter',
component : ParentsCharterComponent
}
]; ];
@NgModule({ @NgModule({
......
...@@ -18,10 +18,18 @@ import { ...@@ -18,10 +18,18 @@ import {
import { SharedModule } from 'app/shared'; import { SharedModule } from 'app/shared';
import { SignupRoutingModule } from './signup-routing.module'; import { SignupRoutingModule } from './signup-routing.module';
import { StudentSignupComponent } from './student-signup/student-signup.component'; import { StudentSignupComponent } from './student-signup/student-signup.component';
import { WaitingEmailVerificationComponent } from './waiting-email-verification/waiting-email-verification.component';
import { ValidEmailComponent } from './valid-email/valid-email.component';
import { StudentCharterComponent } from './student-charter/student-charter.component';
import { ParentsCharterComponent } from './parents-charter/parents-charter.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
StudentSignupComponent, StudentSignupComponent,
WaitingEmailVerificationComponent,
ValidEmailComponent,
StudentCharterComponent,
ParentsCharterComponent,
], ],
imports: [ imports: [
CommonModule, CommonModule,
......
<app-form-page>
<h1>
Signature charte du tutoré
</h1>
<p>
Nous allons te présenter la charte du tutoré.
</p>
<p>
Tu vas devoir la lire <b>attentivement</b> et la signer pour continuer ton inscription.
</p>
<h2>
Charte du tutoré
</h2>
<p>
Tu t’es inscrit·e à OSER, <strong class=important>bienvenue à toi</strong> !
Afin de passer une année formidable, nous te demandons de t’engager sur <a>trois</a> points
concernant les différentes activités d’OSER. De notre côté,
nous nous engageons à t’accueillir à chaque séance et à te proposer des <strong class=important>séances de tutorat</strong>,
des <strong class=important>sorties</strong> et des <strong class=important>projets</strong> enrichissants et passionnants.
Voici donc ces trois points :
</p>
<p>
• Tu t’engages à être présent·e, à l’heure, aux séances de tutorat, et à nous prévenir
lorsque tu as un empêchement. Il en va de même pour les sorties et les projets :
il est <a>capital</a> que tu préviennes un membre de l’association si tu ne peux plus venir.
</p>
<p>
• Tu t’engages à <strong class=important>respecter</strong> les autres tutoré·e·s ainsi que les tuteurs et tutrices pendant les séances,
les sorties et les projets.
</p>
<p>
• Tu t’engages à suivre les <a>consignes de sécurité</a> et d’encadrement des tuteurs et des tutrices,
notamment lors des sorties et des projets.
</p>
<p>
Enfin, pour que les activités d’OSER soient vraiment intéressantes pour toi,
nous pensons qu’il est important que tu <strong class=important>participes activement</strong> aux séances,
aux sorties et aux projets.
</p>
<a>
<mat-checkbox class="text-center" [checked]="$state" (click)="toggle()">J'ai lu la charte du tutoré et
je m'engage à la respecter.</mat-checkbox>
</a>
<p>
<mat-hint>
Cette signature est obligatoire.
</mat-hint>
</p>
<div class="text-center">
<button mat-raised-button color="primary" [disabled]="!state" routerLink='/inscription/parents-charter'>
Suivant
</button>
</div>
</app-form-page>
\ No newline at end of file
.checkbox-field {
display: block;
margin: .5em 0;
}
.form-group{
display:flex;
flex-direction: row;
justify-content: space-between;
}
.horizontal-display{
width:45%;
}
.adress-input{
margin:5px;
}
.quarter-display{
width:25%;
}
.important{
color: rgb(17, 180, 185);
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { StaticInjector } from '@angular/core/src/di/injector';
import { Observable, BehaviorSubject } from 'rxjs';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-student-charter',
templateUrl: './student-charter.component.html',
styleUrls: ['./student-charter.component.scss']
})
export class StudentCharterComponent implements OnInit {
state:boolean;
// private studentCharterUrl = environment.apiUrl + '';
constructor() { }
ngOnInit() {
}
toggle(){
this.state=!this.state;
}
// sendStudentSignatureCharter(email: string, state:boolean) : Observable<boolean> {
// return this.http.post<any>(this.studentCharterUrl, { params: email, state }).pipe(
// map(() => true
// ));
// }
}
...@@ -18,20 +18,27 @@ ...@@ -18,20 +18,27 @@
<input matInput type="text" formControlName="lastName" placeholder="Nom" required> <input matInput type="text" formControlName="lastName" placeholder="Nom" required>
</mat-form-field> </mat-form-field>
<!--Date of birth-->
<mat-form-field class="full-width">
<input matInput type="date" formControlName="dateOfBirth" placeholder="Date de naissance" required>
</mat-form-field>
<!-- Email --> <!-- Email -->
<mat-form-field class="full-width"> <mat-form-field class="full-width">
<input matInput type="email" formControlName="email" placeholder="Adresse email" required> <input matInput type="email" formControlName="email" placeholder="Adresse email" onkeyup="this.value = this.value.toLowerCase();" required>
<mat-hint> <mat-hint>
Elle te servira d'identifiant de connexion. Elle te servira d'identifiant de connexion.
</mat-hint> </mat-hint>
</mat-form-field> </mat-form-field>
<mat-form-field class="full-width">
<input matInput type="tel" formControlName="phoneNumber" placeholder="Numéro de téléphone" required>
<!-- <mat-form-field class="full-width">
<input matInput type="tel" minlength="10" maxlength="10" formControlName="phoneNumber" placeholder="Numéro de téléphone" required>
<mat-hint> <mat-hint>
Il nous permettra de te contacter en cas de nécessité. Il nous permettra de te contacter en cas de nécessité.
</mat-hint> </mat-hint>
</mat-form-field> </mat-form-field> -->
<p> <p>
...@@ -54,7 +61,7 @@ ...@@ -54,7 +61,7 @@
<div class="text-center"> <div class="text-center">
<button mat-raised-button color="primary" [disabled]="!formGroup.valid || loading"> <button mat-raised-button color="primary" [disabled]="!formGroup.valid || loading">
M'inscrire Suivant
<app-load-spinner *ngIf="loading" [block]="false"></app-load-spinner> <app-load-spinner *ngIf="loading" [block]="false"></app-load-spinner>
</button> </button>
</div> </div>
......
...@@ -73,6 +73,7 @@ export class StudentSignupComponent implements OnInit { ...@@ -73,6 +73,7 @@ export class StudentSignupComponent implements OnInit {
firstName: '', firstName: '',
lastName: '', lastName: '',
email: ['', Validators.email], email: ['', Validators.email],
dateOfBirth:'',
phoneNumber: '', phoneNumber: '',
gender:'', gender:'',
adressNumber:'', adressNumber:'',
...@@ -108,28 +109,56 @@ export class StudentSignupComponent implements OnInit { ...@@ -108,28 +109,56 @@ export class StudentSignupComponent implements OnInit {
toggleShowPersonnalDataForm(){ toggleShowPersonnalDataForm(){
this.showPersonnalDataForm = !this.showPersonnalDataForm; this.showPersonnalDataForm = !this.showPersonnalDataForm;
} }
submit() { submit() {
this.loading = true; this.loading = true;
const {email,firstName,lastName,phoneNumber} = this.formGroup.value const {email,firstName,lastName,dateOfBirth,phoneNumber} = this.formGroup.value
//const {gender,adressNumber,street,zipCode,city,personnalPhone,parentsPhone,parentsEmail,school,grade,section,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber} = this.formGroup.value; //const {gender,adressNumber,street,zipCode,city,personnalPhone,parentsPhone,parentsEmail,school,grade,section,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber} = this.formGroup.value;
const registration: Registration = {email,firstName,lastName,phoneNumber}; const registration: Registration = {email,firstName,lastName,dateOfBirth,phoneNumber};
// const personnalData: PersonnalData = {gender,adressNumber,street,zipCode,city,personnalPhone,parentsPhone,parentsEmail,school,grade,section,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber}; // const personnalData: PersonnalData = {gender,adressNumber,street,zipCode,city,personnalPhone,parentsPhone,parentsEmail,school,grade,section,specialTeaching,scholarship,fatherActivity,motherActivity,parentsStatus,dependantsNumber};
const password: string = this.formGroup.controls.password.value; const password: string = this.formGroup.controls.password.value;
this.registrationService.create(registration, password).pipe(
mergeMap(() => this.auth.login(registration.email, password)), // this.registrationService.create(registration, password).pipe(
tap(() => this.snackBar.open( // mergeMap(() => this.auth.login(registration.email, password)),
`Ton compte a été créé ! Tu es maintenant connecté.`, // tap(() => this.snackBar.open(
'OK', // `Ton compte a été créé ! Tu es maintenant connecté.`,
{ duration: 3000 }, // 'OK',
// { duration: 3000 },
// )),
// tap(()=> this.error = ""),
// tap(() => this.loading = false),
// tap(() => {
// setTimeout(()=>{
// this.router.navigate(['inscription/waiting'])
// },3000)})
// ).subscribe(
// () => {},
// (error) => {
// this.loading=false
// if(error.error.email){
// this.error = "Erreur, cet email est déjà utilisé !"
// }
// }
// );
this.registrationService.create(registration, password).pipe(tap(() => this.snackBar.open(
`Les informations sont valides ! Nous allons t'envoyer un mail d'activation.`,'OK',
{ duration: 2000 },
)), )),
tap(()=> this.error = ""), tap(()=> this.error = ""),
tap(() => this.loading = false), tap(() => this.loading = false),
tap(() => { tap(() => {
setTimeout(()=>{ setTimeout(()=>{
this.router.navigate(['./membres/compte/donnees']) this.router.navigate(['inscription/waiting'])
},3000)}) },2000)})
).subscribe( ).subscribe(
() => {}, () => {},
...@@ -151,4 +180,5 @@ export class StudentSignupComponent implements OnInit { ...@@ -151,4 +180,5 @@ export class StudentSignupComponent implements OnInit {
// (error) => this.loading = false, // (error) => this.loading = false,
// ); // );
} }
} }
<app-form-page>
<h2>
Adresse email validée !
</h2>
<p>
Tu viens de valider ton adresse email ! Il ne reste plus que quelques étapes avant la fin de l'inscription.
</p>
<div class="text-center">
<button mat-raised-button color="primary" routerLink='/inscription/student-charter' >
Suivant
</button>
</div>
</app-form-page>
.checkbox-field {
display: block;
margin: .5em 0;
}
.form-group{
display:flex;
flex-direction: row;
justify-content: space-between;
}
.horizontal-display{
width:45%;
}
.adress-input{
margin:5px;
}
.quarter-display{
width:25%;
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-valid-email',
templateUrl: './valid-email.component.html',
styleUrls: ['./valid-email.component.scss']
})
export class ValidEmailComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
<app-form-page>
<h1>
Vérification de l'adresse email
</h1>
<p>
Nous venons de t'envoyer un mail sur l'adresse renseignée.
</p>
<p>
Pour continuer ton inscription, il faut cliquer sur le lien de d'activation.
</p>
</app-form-page>
\ No newline at end of file
.checkbox-field {
display: block;
margin: .5em 0;
}
.form-group{
display:flex;
flex-direction: row;
justify-content: space-between;
}
.horizontal-display{
width:45%;
}
.adress-input{
margin:5px;
}
.quarter-display{
width:25%;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment