{"version":3,"file":"main.js","mappings":"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","names":["AuthService","constructor","afs","afAuth","router","ngZone","this","authState","subscribe","user","SetUserData","localStorage","setItem","JSON","stringify","userData","parse","getItem","SignIn","email","password","signInWithEmailAndPassword","then","result","navigate","catch","error","window","alert","message","SignUp","createUserWithEmailAndPassword","SendVerificationMail","currentUser","u","sendEmailVerification","ForgotPassword","passwordResetEmail","sendPasswordResetEmail","isLoggedIn","emailVerified","GoogleAuth","AuthLogin","auth","res","provider","signInWithPopup","userRef","doc","uid","displayName","photoURL","isAdmin","getIdTokenResult","token","claims","admin","set","merge","SignOut","signOut","removeItem","core","factory","environment","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","CharacterSheetService","http","createCharacter","personnage","post","getPersonnage","id","params","HttpParams","fromString","get","getJoueur","updateJoueur","command","deletePersonnage","listPersonnages","createPersonnage","updateBackground","addAchatSort","removeAchatSort","addCompetence","removeCompetence","addNiveauCompetence","removeNiveauCompetence","addSort","removeSort","ConfirmationDialogComponent","activeModal","ngOnInit","decline","close","accept","dismiss","selectors","i0","ctx","ConfirmationDialogService","modalService","confirm","title","btnOkText","btnCancelText","dialogSize","modalRef","open","size","componentInstance","CharacterSheetsComponent","characterSheetService","confirmationDialogService","l","personnages","confirmDelete","nom","confirmed","personnageId","next","filter","p","e","console","Astres","Map","Legions","TypeDeSorts","Competences","CompetenceService","getCompetences","CharacterSheetCompetencesComponent","formBuilder","competenceService","EventEmitter","initializeCompetenceForm","pipe","first","competences","availableCompetences","getAvailableCompetences","addCompetenceForm","group","addedCompetenceId","Validators","f","controls","onSubmit","submitted","invalid","Object","keys","forEach","key","control","log","errors","competenceId","value","personnageChange","emit","setValue","RemoveCompetence","competencePersonnage","AddNiveauCompetence","RemoveNiveauCompetence","GetCompetence","c","isDisponible","pc","length","canAddNiveauCompetence","competence","niveau","niveau3","niveau2","canRemoveNiveauCompetence","canRemoveCompetence","SortService","getSorts","CharacterSheetSortsComponent","sortService","route","initializeSortForm","typeDeSortDisplay","values","typeDeSort","sorts","s","type","availableSorts","getSortsDisponible","addSortForm","addedSortId","sort1","getSortsPersonnage","sort2","canHaveNiveau2","canHaveNiveau3","find","ps","sortId","canRemoveSort","sort","canAddAchatSort","crimsonDisponible","coutAchatSort","canRemoveAchatSort","achatSortDisponible","achatSortAchete","AddAchatSort","RemoveAchatSort","CharacterSheetBackgroundComponent","initializeForm","backgroundForm","personnalite","background","concept","historique","butCourtTerme","butMoyenTerme","butLongTerme","switchMode","isRead","CharacterSheetComponent","initializePersonnageForm","characterSheetId","characterSheetForm","notePublic","achatDisponible","nombreGnParticipe","legion","astre1","astre2","updatePersonnage","updatedPersonnage","getLegionName","legionId","undefined","legions","getAstreName","astreId","astres","hasBoucherie","hasPharmacologie","hasSorcellerie","SignInComponent","authService","SignUpComponent","DashboardComponent","joueur","ForgotPasswordComponent","VerifyEmailComponent","CreatePersonnageCommand","CharacterSheetsCreateComponent","isHumain","commandResult","navigateByUrl","onLegionChange","addValidators","createEpouvantailValidator","clearValidators","updateValueAndValidity","epouvantailAstreError","CharacterSheetPrintComponent","getCompetencesPersonnage","map","description","comp","Array","from","typeDeSorts","entries","name","sortPersonnage","DashboardUpdateComponent","initializeDashboardForm","dashboardForm","nomComplet","adresse","telephone","dateDeNaissance","formatDate","contactNomComplet","contactUrgence","contactRelation","relation","contactNumero","numero","autreInformation","AdminComponent","AdminService","listPersonnage","dataDumpPersonnage","setPersonnageCrimson","desinscription","listReports","listAdminLog","AdminSetCrimsonComponent","adminService","commandId","crypto","randomUUID","AdminListReportComponent","reports","AdminListLogComponent","logs","appRoutingModule","RouterModule","path","redirectTo","pathMatch","component","AdminDatadumpPersonnageComponent","AdminDesinscriptionComponent","avoirs","coupDeGrace","notes","gnId","UserService","getAll","register","delete","report","AppComponent","userService","openFeedback","content","ariaLabelledBy","onSubmitReport","reportValue","dismissAll","JwtInterceptor","intercept","request","idToken","mergeMap","clone","setHeaders","Authorization","handle","AppModule","bootstrap","provide","HTTP_INTERCEPTORS","useClass","multi","imports","CommonModule","BrowserModule","NgbModule","NgSelectModule","BrowserAnimationsModule","FormsModule","ReactiveFormsModule","HttpClientModule","AngularFireModule","AngularFireAuthModule","AngularFirestoreModule","AngularFireStorageModule","AngularFireDatabaseModule","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","err"],"sourceRoot":"webpack:///","sources":["./src/app/_services/authentication.service.ts","./src/environments/environment.prod.ts","./src/app/_services/character-sheet.service.ts","./src/app/confirmation-dialog/confirmation-dialog.component.ts","./src/app/confirmation-dialog/confirmation-dialog.component.html","./src/app/confirmation-dialog/confirmation-dialog.service.ts","./src/app/character-sheets/character-sheets.component.html","./src/app/character-sheets/character-sheets.component.ts","./src/app/_enums/astre.ts","./src/app/_enums/legion.ts","./src/app/_enums/typeDeSort.ts","./src/app/_enums/competences.ts","./src/app/_services/competence.service.ts","./src/app/character-sheet/competences/competences.component.html","./src/app/character-sheet/competences/competences.component.ts","./src/app/_services/sort.service.ts","./src/app/character-sheet/sorts/sorts.component.html","./src/app/character-sheet/sorts/sorts.component.ts","./src/app/character-sheet/background/background.component.html","./src/app/character-sheet/background/background.component.ts","./src/app/character-sheet/character-sheet.component.html","./src/app/character-sheet/character-sheet.component.ts","./src/app/sign-in/sign-in.component.html","./src/app/sign-in/sign-in.component.ts","./src/app/sign-up/sign-up.component.ts","./src/app/sign-up/sign-up.component.html","./src/app/dashboard/dashboard.component.html","./src/app/dashboard/dashboard.component.ts","./src/app/forgot-password/forgot-password.component.ts","./src/app/forgot-password/forgot-password.component.html","./src/app/verify-email/verify-email.component.html","./src/app/verify-email/verify-email.component.ts","./src/app/_models/_commands/createPersonnageCommand.ts","./src/app/character-sheets/create/create.component.html","./src/app/character-sheets/create/create.component.ts","./src/app/character-sheet/print/print.component.html","./src/app/character-sheet/print/print.component.ts","./src/app/dashboard/update/dashboard.update.component.html","./src/app/dashboard/update/dashboard.update.component.ts","./src/app/admin/admin.component.ts","./src/app/admin/admin.component.html","./src/app/_services/admin.service.ts","./src/app/admin/setCrimson/setCrimson.component.html","./src/app/admin/setCrimson/setCrimson.component.ts","./src/app/admin/listReport/listReport.component.html","./src/app/admin/listReport/listReport.component.ts","./src/app/admin/listLog/listLog.component.html","./src/app/admin/listLog/listLog.component.ts","./src/app/admin/datadumpPersonnage/datadumpPersonnage.component.html","./src/app/admin/desinscription/desinscription.component.html","./src/app/app-routing.module.ts","./src/app/admin/datadumpPersonnage/datadumpPersonnage.component.ts","./src/app/admin/desinscription/desinscription.component.ts","./src/app/_services/user.service.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/_helpers/jwt.interceptor.ts","./src/app/app.module.ts","./src/main.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\r\nimport { User } from '../_models/user';\r\nimport * as auth from 'firebase/auth';\r\nimport { AngularFireAuth } from '@angular/fire/compat/auth';\r\nimport {\r\n AngularFirestore,\r\n AngularFirestoreDocument,\r\n} from '@angular/fire/compat/firestore';\r\nimport { Router } from '@angular/router';\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n userData: any; // Save logged in user data\r\n constructor(\r\n public afs: AngularFirestore, // Inject Firestore service\r\n public afAuth: AngularFireAuth, // Inject Firebase auth service\r\n public router: Router,\r\n public ngZone: NgZone // NgZone service to remove outside scope warning\r\n ) {\r\n /* Saving user data in localstorage when \r\n logged in and setting up null when logged out */\r\n this.afAuth.authState.subscribe((user) => {\r\n if (user) {\r\n this.SetUserData(user);\r\n localStorage.setItem('user', JSON.stringify(this.userData));\r\n JSON.parse(localStorage.getItem('user')!);\r\n } else {\r\n localStorage.setItem('user', 'null');\r\n JSON.parse(localStorage.getItem('user')!);\r\n }\r\n });\r\n }\r\n // Sign in with email/password\r\n SignIn(email: string, password: string) {\r\n return this.afAuth\r\n .signInWithEmailAndPassword(email, password)\r\n .then((result) => {\r\n this.SetUserData(result.user);\r\n this.afAuth.authState.subscribe((user) => {\r\n if (user) {\r\n this.router.navigate(['dashboard']);\r\n }\r\n });\r\n })\r\n .catch((error) => {\r\n window.alert(error.message);\r\n });\r\n }\r\n // Sign up with email/password\r\n SignUp(email: string, password: string) {\r\n return this.afAuth\r\n .createUserWithEmailAndPassword(email, password)\r\n .then((result) => {\r\n /* Call the SendVerificaitonMail() function when new user sign \r\n up and returns promise */\r\n this.SendVerificationMail();\r\n this.SetUserData(result.user);\r\n })\r\n .catch((error) => {\r\n window.alert(error.message);\r\n });\r\n }\r\n // Send email verfificaiton when new user sign up\r\n SendVerificationMail() {\r\n return this.afAuth.currentUser\r\n .then((u: any) => u.sendEmailVerification())\r\n .then(() => {\r\n this.router.navigate(['verify-email-address']);\r\n });\r\n }\r\n // Reset Forggot password\r\n ForgotPassword(passwordResetEmail: string) {\r\n return this.afAuth\r\n .sendPasswordResetEmail(passwordResetEmail)\r\n .then(() => {\r\n window.alert('Password reset email sent, check your inbox.');\r\n })\r\n .catch((error) => {\r\n window.alert(error);\r\n });\r\n }\r\n // Returns true when user is looged in and email is verified\r\n get isLoggedIn(): boolean {\r\n const user = JSON.parse(localStorage.getItem('user')!);\r\n return user !== null && user.emailVerified !== false ? true : false;\r\n }\r\n // Sign in with Google\r\n GoogleAuth() {\r\n return this.AuthLogin(new auth.GoogleAuthProvider()).then((res: any) => {\r\n this.router.navigate(['dashboard']);\r\n });\r\n }\r\n // Auth logic to run auth providers\r\n AuthLogin(provider: any) {\r\n return this.afAuth\r\n .signInWithPopup(provider)\r\n .then((result) => {\r\n this.router.navigate(['dashboard']);\r\n this.SetUserData(result.user);\r\n })\r\n .catch((error) => {\r\n window.alert(error);\r\n });\r\n }\r\n /* Setting up user data when sign in with username/password, \r\n sign up with username/password and sign in with social auth \r\n provider in Firestore database using AngularFirestore + AngularFirestoreDocument service */\r\n SetUserData(user: any) {\r\n const userRef: AngularFirestoreDocument = this.afs.doc(\r\n `users/${user.uid}`\r\n );\r\n this.userData = {\r\n uid: user.uid,\r\n email: user.email,\r\n displayName: user.displayName,\r\n photoURL: user.photoURL,\r\n emailVerified: user.emailVerified,\r\n isAdmin: false,\r\n };\r\n user.getIdTokenResult(false).then((token: any) => {\r\n this.userData.isAdmin = token.claims.admin;\r\n });\r\n return userRef.set(this.userData, {\r\n merge: true,\r\n });\r\n }\r\n // Sign out\r\n SignOut() {\r\n return this.afAuth.signOut().then(() => {\r\n this.userData = null;\r\n localStorage.removeItem('user');\r\n this.router.navigate(['sign-in']);\r\n });\r\n }\r\n}","export const environment = {\r\n production: true,\r\n apiUrl: 'https://ccgapi.azurewebsites.net',\r\n firebase: {\r\n apiKey: \"AIzaSyCpW-oXhcL2yjkj_Q-_b9mqtRKgoVw2G70\",\r\n authDomain: \"courbensaule-chargen.firebaseapp.com\",\r\n projectId: \"courbensaule-chargen\",\r\n storageBucket: \"courbensaule-chargen.appspot.com\",\r\n messagingSenderId: \"775558186475\",\r\n appId: \"1:775558186475:web:23995f472e5757153285ae\",\r\n measurementId: \"G-3ZGHZYTPQK\"\r\n }\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Personnage } from '../_models/personnage';\r\nimport { environment } from '../../environments/environment';\r\nimport { CreatePersonnageCommand, DeletePersonnageCommand, UpdateBackgroundCommand, UpdateJoueurCommand } from '../_models/_commands/createPersonnageCommand';\r\nimport { Observable } from 'rxjs';\r\nimport { CommandResult } from '../_models/commandResult';\r\nimport { AddCompetenceCommand, AddNiveauCompetenceCommand, RemoveCompetenceCommand, RemoveNiveauCompetenceCommand } from '../_models/_commands/competenceCommands';\r\nimport { AddAchatSortCommand, RemoveAchatSortCommand, AddSortCommand, RemoveSortCommand } from '../_models/_commands/sortCommands';\r\nimport { Joueur } from '../_models/joueur';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CharacterSheetService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n createCharacter(personnage: Personnage) {\r\n return this.http.post(`${environment.apiUrl}/users/register`, personnage);\r\n }\r\n\r\n getPersonnage(id: number) {\r\n var params = new HttpParams({fromString: `id=${id}`});\r\n return this.http.get(`${environment.apiUrl}/api/PersonnageFunctions_Get`, {params: params});\r\n }\r\n\r\n getJoueur() {\r\n return this.http.get(`${environment.apiUrl}/api/JoueurFunctions_Get`);\r\n }\r\n\r\n updateJoueur(command: UpdateJoueurCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/JoueurFunctions_Update`, command);\r\n }\r\n\r\n deletePersonnage(command: DeletePersonnageCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_Delete`, command);\r\n }\r\n\r\n listPersonnages() :Observable {\r\n return this.http.get(`${environment.apiUrl}/api/PersonnageFunctions_List`);\r\n }\r\n\r\n createPersonnage(command: CreatePersonnageCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_Create`, command);\r\n }\r\n\r\n updateBackground(command: UpdateBackgroundCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_UpdateBackground`, command);\r\n }\r\n\r\n addAchatSort(command: AddAchatSortCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_AddAchatSort`, command);\r\n }\r\n\r\n removeAchatSort(command: RemoveAchatSortCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_RemoveAchatSort`, command);\r\n }\r\n\r\n addCompetence(command: AddCompetenceCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_AddCompetence`, command);\r\n }\r\n\r\n removeCompetence(command: RemoveCompetenceCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_RemoveCompetence`, command);\r\n }\r\n\r\n addNiveauCompetence(command: AddNiveauCompetenceCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_AddNiveauCompetence`, command);\r\n }\r\n\r\n removeNiveauCompetence(command: RemoveNiveauCompetenceCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_RemoveNiveauCompetence`, command);\r\n }\r\n\r\n addSort(command: AddSortCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_AddSort`, command);\r\n }\r\n\r\n removeSort(command: RemoveSortCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/PersonnageFunctions_RemoveSort`, command);\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'app-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html',\r\n})\r\nexport class ConfirmationDialogComponent implements OnInit {\r\n\r\n @Input() title!: string;\r\n @Input() message!: string;\r\n @Input() btnOkText!: string;\r\n @Input() btnCancelText!: string;\r\n\r\n constructor(private activeModal: NgbActiveModal) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n public decline() {\r\n this.activeModal.close(false);\r\n }\r\n\r\n public accept() {\r\n this.activeModal.close(true);\r\n }\r\n\r\n public dismiss() {\r\n this.activeModal.dismiss();\r\n }\r\n\r\n}\r\n","
\r\n

{{ title }}

\r\n \r\n
\r\n
\r\n {{ message }}\r\n
\r\n
\r\n \r\n \r\n
","import { Injectable } from '@angular/core';\r\n\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nimport { ConfirmationDialogComponent } from './confirmation-dialog.component';\r\n\r\n@Injectable()\r\nexport class ConfirmationDialogService {\r\n\r\n constructor(private modalService: NgbModal) { }\r\n\r\n public confirm(\r\n title: string,\r\n message: string,\r\n btnOkText: string = 'Oui',\r\n btnCancelText: string = 'Non',\r\n dialogSize: 'sm'|'lg' = 'sm'): Promise {\r\n const modalRef = this.modalService.open(ConfirmationDialogComponent, { size: dialogSize });\r\n modalRef.componentInstance.title = title;\r\n modalRef.componentInstance.message = message;\r\n modalRef.componentInstance.btnOkText = btnOkText;\r\n modalRef.componentInstance.btnCancelText = btnCancelText;\r\n\r\n return modalRef.result;\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n

Personnages

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n {{ personnage.nom }} - \r\n Modifier\r\n [X]\r\n
  • \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { Personnage } from '../_models/personnage';\r\nimport { CharacterSheetService } from '../_services/character-sheet.service';\r\nimport { ConfirmationDialogService } from '../confirmation-dialog/confirmation-dialog.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheets',\r\n templateUrl: './character-sheets.component.html',\r\n styleUrls: ['./character-sheets.component.scss']\r\n})\r\nexport class CharacterSheetsComponent implements OnInit {\r\n public personnages!: Personnage[];\r\n\r\n constructor(private characterSheetService: CharacterSheetService, private confirmationDialogService: ConfirmationDialogService) {}\r\n\r\n ngOnInit(): void {\r\n this.characterSheetService.listPersonnages().subscribe(l => {\r\n this.personnages = l;\r\n });\r\n }\r\n\r\n public confirmDelete(personnage: Personnage): boolean {\r\n this.confirmationDialogService.confirm('Supprimer un personnage', 'Voulez-vous supprimer le personnage ' + personnage.nom + '?')\r\n .then((confirmed) => {\r\n if (confirmed) {\r\n this.characterSheetService.deletePersonnage({\r\n personnageId: personnage.id,\r\n })\r\n .subscribe({\r\n next: (result) => {\r\n this.personnages = this.personnages.filter(p => p.id != personnage.id);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n })\r\n return false;\r\n }\r\n}\r\n","export class Astre {\r\n id!: number;\r\n }\r\n\r\nexport class Astres {\r\n public static Saronide = 14;\r\n public static PortePeste = 15;\r\n public static Cannibale = 1;\r\n\r\n public values: Map = new Map([\r\n [0, \"Myrmidon\"],\r\n [1, \"Cannibale\"],\r\n [2, \"Pugiliste\"],\r\n [3, \"Chevalier\"],\r\n [4, \"Ombre\"],\r\n [5, \"Braconne\"],\r\n [6, \"Malhonnete\"],\r\n [7, \"Rhapsode\"],\r\n [8, \"Adepte\"],\r\n [9, \"Dement\"],\r\n [10, \"Saccageur\"],\r\n [11, \"Celestaire\"],\r\n [12, \"Chaman\"],\r\n [13, \"Malemort\"],\r\n [14, \"Saronide\"],\r\n [15, \"PortePeste\"]\r\n ]);\r\n}","export class Legion {\r\n id!: number;\r\n}\r\n\r\nexport class Legions {\r\n public static LegionHumain: number = 5\r\n public static LegionEpouvantail: number = 0\r\n\r\n public values: Map = new Map([\r\n [0, \"Epouvantail\"],\r\n [1, \"Vonstrogen\"],\r\n [2, \"Margul\"],\r\n [3, \"Vamnazul\"],\r\n [4, \"Lycan\"],\r\n [5, \"Humain\"],\r\n [6, \"Necropolitain\"],\r\n [7, \"Mentipede\"],\r\n [8, \"Escobar\"]\r\n ]);\r\n\r\n public pointTolerance: Map = new Map([\r\n [0, \"42\"],\r\n [1, \"42\"],\r\n [2, \"52\"],\r\n [3, \"2-6\"],\r\n [4, \"6-9\"],\r\n [5, \"4\"],\r\n [6, \"4\"],\r\n [7, \"4\"],\r\n [8, \"4\"]\r\n ]);\r\n}","export class TypeDeSorts {\r\n public static IdCompetenceBoucherie = 69;\r\n public static IdCompetenceSorcellerie = 68;\r\n public static IdCompetencePharmacologie = 67;\r\n \r\n public values: Map = new Map([\r\n [0, \"Boucherie\"],\r\n [1, \"Art\"],\r\n [2, \"Rituel\"],\r\n [3, \"Pharmacologie\"],\r\n ]);\r\n \r\n}","export class Competences {\r\n public static idDague = 27;\r\n}\r\n\r\nexport class TypeCompetence {\r\n id!: number;\r\n}\r\n\r\nexport class TypeCompetences {\r\n public values: Map = new Map([\r\n [0, \"Sans catégorie\"],\r\n [1, \"Maniement\"],\r\n [2, \"Gredin\"],\r\n [3, \"Art\"],\r\n [4, \"Talent\"]\r\n ]);\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { environment } from '../../environments/environment';\r\nimport { Sort } from '../_models/sort';\r\nimport { Competence } from '../_models/competence';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CompetenceService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n\r\n getCompetences() {\r\n return this.http.get(`${environment.apiUrl}/api/CompetenceFunctions_Get`);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n

Compétences

\r\n
\r\n
IMPORTANT: La description courte du menu déroulant est là à titre indicatif.
\r\n
Crimsons disponible: {{personnage?.crimsonDisponible}}
\r\n
Case de compétences disponible: {{personnage?.achatDisponible}}
\r\n
Points d'achat disponible: {{personnage?.achatSortDisponible}}
\r\n
\r\n
\r\n \r\n \r\n
\r\n {{item.nom}} - Niveau 1{{item.niveau2 != null? \"/2\":\"\"}}{{item.niveau3 != null? \"/3\":\"\"}} - \r\n {{item.niveau1.cout}}{{item.niveau2 != null? \"/\"+item.niveau2.cout:\"\"}}{{item.niveau3 != null? \"/\"+item.niveau3.cout:\"\"}} Crimsons\r\n
\r\n
{{item.descriptionCourte}}
\r\n
{{item.avertissement}}
\r\n
\r\n
\r\n
\r\n
Compétence requise
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{{GetCompetence(competencePersonnage.competenceId)?.nom}} - niveau {{competencePersonnage.niveau}}

\r\n
{{GetCompetence(competencePersonnage.competenceId)?.description}}
\r\n
{{GetCompetence(competencePersonnage.competenceId)?.niveau1?.description}}
\r\n
= 2\">{{GetCompetence(competencePersonnage.competenceId)?.niveau2?.description}}
\r\n
= 3\">{{GetCompetence(competencePersonnage.competenceId)?.niveau3?.description}}
\r\n
{{GetCompetence(competencePersonnage.competenceId)?.avertissement}}
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { first } from 'rxjs';\r\nimport { Competences } from 'src/app/_enums/competences';\r\nimport { Competence } from 'src/app/_models/competence';\r\nimport { CompetencePersonnage } from 'src/app/_models/competencePersonnage';\r\nimport { Personnage } from 'src/app/_models/personnage';\r\nimport { CharacterSheetService } from 'src/app/_services/character-sheet.service';\r\nimport { CompetenceService } from 'src/app/_services/competence.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheet-competences',\r\n templateUrl: './competences.component.html',\r\n styleUrls: ['./competences.component.scss']\r\n})\r\nexport class CharacterSheetCompetencesComponent implements OnInit {\r\n // Input decorator\r\n @Input() personnage!: Personnage;\r\n @Output() personnageChange = new EventEmitter();\r\n competences!: Competence[];\r\n addCompetenceForm!: FormGroup;\r\n\r\n availableCompetences!: Competence[];\r\n\r\n test: any;\r\n submitted: boolean = false;\r\n\r\n constructor(private formBuilder: FormBuilder, private competenceService: CompetenceService, private characterSheetService: CharacterSheetService) { }\r\n\r\n ngOnInit() {\r\n this.initializeCompetenceForm();\r\n this.competenceService.getCompetences() \r\n .pipe(first())\r\n .subscribe({\r\n next: (competences) => \r\n {\r\n this.competences = competences;\r\n this.availableCompetences = this.getAvailableCompetences(this.competences);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n\r\n }\r\n\r\n initializeCompetenceForm() {\r\n this.addCompetenceForm = this.formBuilder.group({\r\n addedCompetenceId: ['', Validators.required]\r\n })\r\n };\r\n\r\n // convenience getter for easy access to form fields\r\n get f() { return this.addCompetenceForm.controls; }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n if (this.addCompetenceForm.invalid)\r\n {\r\n // Get all Form Controls keys and loop them\r\n Object.keys(this.addCompetenceForm.controls).forEach(key => {\r\n // Get errors of every form control\r\n var control = this.addCompetenceForm.get(key);\r\n if(control != null)\r\n {\r\n console.log(key);\r\n console.log(control.errors);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.characterSheetService.addCompetence({\r\n personnageId: this.personnage.id,\r\n competenceId: this.addCompetenceForm.controls['addedCompetenceId'].value\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n\r\n this.addCompetenceForm.controls['addedCompetenceId'].setValue('');\r\n this.submitted = false;\r\n\r\n this.availableCompetences = this.getAvailableCompetences(this.competences);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n\r\n public RemoveCompetence(competencePersonnage: CompetencePersonnage): void {\r\n this.characterSheetService.removeCompetence({\r\n personnageId: competencePersonnage.personnageId,\r\n competenceId: competencePersonnage.competenceId\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n\r\n this.availableCompetences = this.getAvailableCompetences(this.competences);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n public AddNiveauCompetence(competencePersonnage: CompetencePersonnage): void {\r\n this.characterSheetService.addNiveauCompetence({\r\n personnageId: competencePersonnage.personnageId,\r\n competenceId: competencePersonnage.competenceId\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n\r\n this.availableCompetences = this.getAvailableCompetences(this.competences);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n}\r\n\r\n public RemoveNiveauCompetence(competencePersonnage: CompetencePersonnage): void {\r\n this.characterSheetService.removeNiveauCompetence({\r\n personnageId: competencePersonnage.personnageId,\r\n competenceId: competencePersonnage.competenceId\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n\r\n this.availableCompetences = this.getAvailableCompetences(this.competences);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n public GetCompetence(competenceId: number): Competence | null {\r\n if (this.competences)\r\n return this.competences.filter(c => c.id == competenceId)[0];\r\n else\r\n return null;\r\n }\r\n\r\n public getAvailableCompetences(competences: Competence[]): any[] {\r\n if (!competences) {\r\n return [];\r\n }\r\n\r\n return competences.filter(c => {\r\n return c.isDisponible && (this.personnage?.competences?.filter(pc => pc.competenceId == c.id).length == 0);\r\n });\r\n }\r\n\r\n public canAddNiveauCompetence(competencePersonnage: CompetencePersonnage): boolean {\r\n\r\n var competence = this.GetCompetence(competencePersonnage.competenceId);\r\n if (competencePersonnage.niveau == 3)\r\n return false;\r\n if (competencePersonnage.niveau == 2 && !competence?.niveau3 )\r\n return false;\r\n if (competencePersonnage.niveau == 1 && !competence?.niveau2 )\r\n return false; \r\n\r\n return true;\r\n }\r\n\r\n public canRemoveNiveauCompetence(competencePersonnage: CompetencePersonnage): boolean {\r\n\r\n var competence = this.GetCompetence(competencePersonnage.competenceId);\r\n if (competencePersonnage.niveau == 1)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public canRemoveCompetence(competencePersonnage: CompetencePersonnage): boolean {\r\n\r\n var competence = this.GetCompetence(competencePersonnage.competenceId);\r\n if (competencePersonnage.niveau != 1)\r\n return false;\r\n if (!competence?.isDisponible)\r\n return false;\r\n if (competencePersonnage.competenceId == Competences.idDague)\r\n return false;\r\n return true;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { environment } from '../../environments/environment';\r\nimport { Sort } from '../_models/sort';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SortService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n\r\n getSorts() {\r\n return this.http.get(`${environment.apiUrl}/api/SortFunctions_Get`);\r\n }\r\n}\r\n","\r\n
\r\n

{{typeDeSortDisplay}}

\r\n\r\n
\r\n
Crimsons disponible: {{personnage?.crimsonDisponible}}
\r\n
Case de compétences disponible: {{personnage?.achatDisponible}}
\r\n
Points d'achat disponible: {{personnage?.achatSortDisponible}}\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {{item.nom}} - Niveau {{item.niveau}} - {{item.cout}} Points\r\n
\r\n
{{item.description}}
\r\n
{{item.avertissement}}
\r\n
\r\n
\r\n
\r\n
Talent requis
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n

Niveau {{i+1}}

\r\n\r\n\r\n
\r\n
\r\n

{{sort.nom}}

\r\n
{{sort.description}}
\r\n
{{sort.avertissement}}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { TypeDeSorts } from 'src/app/_enums/typeDeSort';\r\nimport { Sort } from 'src/app/_models/sort';\r\nimport { SortService } from 'src/app/_services/sort.service';\r\nimport { Personnage } from '../../_models/personnage';\r\nimport { CharacterSheetService } from '../../_services/character-sheet.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheet-sorts',\r\n templateUrl: './sorts.component.html',\r\n styleUrls: ['./sorts.component.scss']\r\n})\r\nexport class CharacterSheetSortsComponent implements OnInit {\r\n @Input() personnage!: Personnage;\r\n @Output() personnageChange = new EventEmitter();\r\n @Input() typeDeSort!: number;\r\n coutAchatSort: number = 20;\r\n typeDeSortDisplay: string | undefined;\r\n addSortForm!: FormGroup;\r\n submitted: boolean = false;\r\n sorts!: Sort[];\r\n\r\n availableSorts!: Sort[];\r\n\r\n constructor(private formBuilder: FormBuilder, private characterSheetService: CharacterSheetService, private sortService: SortService, private route: ActivatedRoute, private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeSortForm();\r\n this.typeDeSortDisplay = new TypeDeSorts().values.get(this.typeDeSort);\r\n \r\n this.sortService.getSorts()\r\n .pipe(first())\r\n .subscribe({\r\n next: (sorts) => {\r\n this.sorts = sorts.filter(s => s.type == this.typeDeSort);\r\n this.availableSorts = this.getSortsDisponible();\r\n }\r\n });\r\n }\r\n\r\n initializeSortForm() {\r\n this.addSortForm = this.formBuilder.group({\r\n addedSortId: ['', Validators.required]\r\n })\r\n };\r\n \r\n public getSortsDisponible() {\r\n const sort1 = this.getSortsPersonnage(1).length;\r\n const sort2 = this.getSortsPersonnage(2).length;\r\n const sort3 = this.getSortsPersonnage(3).length;\r\n const canHaveNiveau2 = sort1 >= 2;\r\n const canHaveNiveau3 = sort2 >= 2;\r\n return this.sorts.filter((s) =>\r\n this.personnage.sorts.find((ps) => ps.sortId == s.id) == null\r\n && (\r\n s.niveau == 1\r\n || (s.niveau == 2 && canHaveNiveau2)\r\n || (s.niveau == 3 && canHaveNiveau3)\r\n ));\r\n }\r\n\r\n public getSortsPersonnage(niveau: number) {\r\n return this.sorts.filter((s) =>\r\n s.niveau == niveau \r\n && this.personnage.sorts.find((ps) => ps.sortId == s.id) != null);\r\n }\r\n\r\n // convenience getter for easy access to form fields\r\n get f() { return this.addSortForm.controls; }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n if (this.addSortForm.invalid)\r\n {\r\n // Get all Form Controls keys and loop them\r\n Object.keys(this.addSortForm.controls).forEach(key => {\r\n // Get errors of every form control\r\n var control = this.addSortForm.get(key);\r\n if(control != null)\r\n {\r\n console.log(key);\r\n console.log(control.errors);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.characterSheetService.addSort({\r\n personnageId: this.personnage.id,\r\n sortId: this.addSortForm.controls['addedSortId'].value\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n\r\n this.addSortForm.controls['addedSortId'].setValue('');\r\n this.submitted = false;\r\n\r\n this.availableSorts = this.getSortsDisponible();\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n public canRemoveSort(sort: Sort): boolean {\r\n if (sort.niveau == 3) return true;\r\n const sort2 = this.getSortsPersonnage(sort.niveau+1).length;\r\n if (sort2 == 0) return true;\r\n\r\n const sort1 = this.getSortsPersonnage(sort.niveau).length;\r\n return sort1 > (sort2+1);\r\n }\r\n\r\n public removeSort(sort: Sort) {\r\n this.characterSheetService.removeSort({\r\n personnageId: this.personnage.id,\r\n sortId: sort.id\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n \r\n this.availableSorts = this.getSortsDisponible();\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n\r\n\r\n public canAddAchatSort(): boolean {\r\n return this.personnage.crimsonDisponible >= this.coutAchatSort;\r\n }\r\n\r\n public canRemoveAchatSort(): boolean {\r\n return this.personnage.achatSortDisponible >= 2 && this.personnage.achatSortAchete >= 2;\r\n }\r\n\r\n public AddAchatSort() {\r\n this.characterSheetService.addAchatSort({\r\n personnageId: this.personnage.id,\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n\r\n public RemoveAchatSort() {\r\n this.characterSheetService.removeAchatSort({\r\n personnageId: this.personnage.id,\r\n })\r\n .pipe(first())\r\n .subscribe({\r\n next: (result) => {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n}","
\r\n
\r\n
\r\n Personnalité: {{personnage?.background?.personnalite}}\r\n
\r\n
\r\n Concept: {{personnage?.background?.concept}}\r\n
\r\n
\r\n But à court terme: {{personnage?.background?.butCourtTerme}}\r\n
\r\n
\r\n But à moyen terme: {{personnage?.background?.butMoyenTerme}}\r\n
\r\n
\r\n But à long terme: {{personnage?.background?.butLongTerme}}\r\n
\r\n
\r\n Historique: {{personnage?.background?.historique}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { TypeDeSorts } from 'src/app/_enums/typeDeSort';\r\nimport { CommandResult } from 'src/app/_models/commandResult';\r\nimport { Competence } from 'src/app/_models/competence';\r\nimport { Joueur } from 'src/app/_models/joueur';\r\nimport { Sort } from 'src/app/_models/sort';\r\nimport { CreatePersonnageCommand } from 'src/app/_models/_commands/createPersonnageCommand';\r\nimport { CompetenceService } from 'src/app/_services/competence.service';\r\nimport { SortService } from 'src/app/_services/sort.service';\r\nimport { Astre, Astres } from '../../_enums/astre';\r\nimport { Legion, Legions } from '../../_enums/legion';\r\nimport { Personnage } from '../../_models/personnage';\r\nimport { CharacterSheetService } from '../../_services/character-sheet.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheet-background',\r\n templateUrl: './background.component.html',\r\n styleUrls: ['./background.component.scss']\r\n})\r\nexport class CharacterSheetBackgroundComponent implements OnInit {\r\n isRead: boolean = true;\r\n @Input() personnage!: Personnage;\r\n @Output() personnageChange = new EventEmitter();\r\n backgroundForm!: FormGroup;\r\n submitted: boolean = false;\r\n constructor(private formBuilder: FormBuilder, private characterSheetService: CharacterSheetService, private sortService: SortService, private competenceService: CompetenceService, private route: ActivatedRoute, private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n }\r\n \r\n initializeForm() {\r\n this.backgroundForm = this.formBuilder.group({\r\n personnalite: [this.personnage.background?.personnalite],\r\n concept: [this.personnage.background?.concept],\r\n historique: [this.personnage.background?.historique],\r\n butCourtTerme: [this.personnage.background?.butCourtTerme],\r\n butMoyenTerme: [this.personnage.background?.butMoyenTerme],\r\n butLongTerme: [this.personnage.background?.butLongTerme],\r\n });\r\n }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n const command = this.backgroundForm.value;\r\n command.personnageId = this.personnage.id;\r\n this.characterSheetService.updateBackground(command)\r\n .pipe(first())\r\n .subscribe({\r\n next: (result: CommandResult) =>\r\n {\r\n this.personnage = result.result as Personnage;\r\n this.personnageChange.emit(this.personnage);\r\n this.submitted = false;\r\n this.switchMode();\r\n },\r\n error: (e) => \r\n {\r\n console.error(e)\r\n }\r\n }); \r\n }\r\n\r\n switchMode() {\r\n this.isRead = !this.isRead;\r\n }\r\n \r\n}","\r\n
\r\n
\r\n

{{personnage?.nom}}

\r\n \r\n Imprimer ma fiche de personnage\r\n
\r\n \r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Nom de personnage: {{personnage?.nom}}\r\n
\r\n
\r\n
Légion: {{getLegionName(personnage?.legion)}}
\r\n
\r\n
\r\n
Astre: {{getAstreName(personnage?.astre1)}}
\r\n
\r\n
\r\n
Second Astre: {{getAstreName(personnage?.astre2)}}
\r\n
\r\n
\r\n
Nombre de GN participés: {{personnage?.nombreGnParticipe}}
\r\n
\r\n
\r\n
Crimsons disponibles: {{personnage?.crimsonDisponible}}
\r\n
\r\n
\r\n
Case de compétences disponible: {{personnage?.achatDisponible}}
\r\n
\r\n
\r\n
Points d'achat disponible: {{personnage?.achatSortDisponible}}
\r\n
\r\n
\r\n Notes publiques: {{personnage?.notePublic}}\r\n
\r\n
\r\n Liste des avoirs: {{personnage?.avoirs}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { Astre, Astres } from '../_enums/astre';\r\nimport { Legion, Legions } from '../_enums/legion';\r\nimport { Personnage } from '../_models/personnage';\r\nimport { CharacterSheetService } from '../_services/character-sheet.service';\r\nimport { Router } from '@angular/router';\r\nimport { TypeDeSorts } from '../_enums/typeDeSort';\r\n\r\n@Component({\r\n selector: 'app-character-sheet',\r\n templateUrl: './character-sheet.component.html',\r\n styleUrls: ['./character-sheet.component.scss']\r\n})\r\nexport class CharacterSheetComponent implements OnInit {\r\n personnage!: Personnage;\r\n characterSheetForm!: FormGroup;\r\n submitted: boolean = false;\r\n\r\n public legions = new Legions;\r\n public astres = new Astres;\r\n \r\n constructor(private formBuilder: FormBuilder, private characterSheetService: CharacterSheetService, private route: ActivatedRoute, private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n var personnageId = 0;\r\n this.initializePersonnageForm();\r\n this.route.params.pipe(first()).subscribe(params => {\r\n personnageId = params['characterSheetId'];\r\n });\r\n \r\n if (personnageId != 0)\r\n {\r\n this.characterSheetService.getPersonnage(personnageId) \r\n .pipe(first())\r\n .subscribe({\r\n next: (personnage) => \r\n {\r\n this.personnage = personnage;\r\n this.initializePersonnageForm();\r\n },\r\n error: (e) => \r\n {\r\n console.error(e);\r\n this.router.navigate(['/characterSheets']);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n this.router.navigate(['/characterSheets']);\r\n }\r\n }\r\n\r\n // convenience getter for easy access to form fields\r\n get f() { return this.characterSheetForm.controls; }\r\n\r\n initializePersonnageForm() {\r\n this.characterSheetForm = this.formBuilder.group({\r\n nom: [this.personnage?.nom, Validators.required],\r\n notePublic: [this.personnage?.notePublic],\r\n crimsonDisponible: [this.personnage?.crimsonDisponible, Validators.required],\r\n achatDisponible: [this.personnage?.achatDisponible, Validators.required],\r\n achatSortDisponible: [this.personnage?.achatSortDisponible, Validators.required],\r\n nombreGnParticipe: [this.personnage?.nombreGnParticipe, Validators.required],\r\n legion: [this.personnage?.legion, Validators.required],\r\n astre1: [this.personnage?.astre1, Validators.required],\r\n astre2: [this.personnage?.astre2, Validators.required],\r\n });\r\n }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n if (this.characterSheetForm.invalid)\r\n {\r\n // Get all Form Controls keys and loop them\r\n Object.keys(this.characterSheetForm.controls).forEach(key => {\r\n // Get errors of every form control\r\n var control = this.characterSheetForm.get(key);\r\n if(control != null)\r\n {\r\n console.log(key);\r\n console.log(control.errors);\r\n }\r\n });\r\n return;\r\n } \r\n }\r\n\r\n updatePersonnage(updatedPersonnage: Personnage) : void {\r\n this.personnage = updatedPersonnage;\r\n }\r\n\r\n public getLegionName(legionId: number | undefined ) : string | undefined {\r\n if (legionId == undefined)\r\n return '';\r\n\r\n return this.legions.values.get(legionId);\r\n }\r\n\r\n public getAstreName(astreId: number | undefined ) : string | undefined {\r\n if (astreId == undefined)\r\n return '';\r\n\r\n return this.astres.values.get(astreId);\r\n }\r\n\r\n public hasBoucherie(): boolean {\r\n return this.personnage.competences.find(c => c.competenceId == TypeDeSorts.IdCompetenceBoucherie) != null;\r\n }\r\n\r\n public hasPharmacologie(): boolean {\r\n return this.personnage.competences.find(c => c.competenceId == TypeDeSorts.IdCompetencePharmacologie) != null;\r\n }\r\n\r\n public hasSorcellerie(): boolean {\r\n return this.personnage.competences.find(c => c.competenceId == TypeDeSorts.IdCompetenceSorcellerie) != null;\r\n }\r\n}\r\n","
\r\n
\r\n

Bonjour {{authService.userData.displayName}}!

\r\n
\r\n
\r\n
\r\n

Authentification

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n Ou\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n Vous n'avez pas un compte? S'enregistrer\r\n
\r\n
\r\n
\r\n","//Reference: https://www.positronx.io/full-angular-firebase-authentication-system/\r\n\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from \"../_services/authentication.service\";\r\n@Component({\r\n selector: 'app-sign-in',\r\n templateUrl: './sign-in.component.html',\r\n styleUrls: ['./sign-in.component.scss']\r\n})\r\nexport class SignInComponent implements OnInit {\r\n constructor(\r\n public authService: AuthService\r\n ) { }\r\n ngOnInit() { }\r\n}","//Reference: https://www.positronx.io/full-angular-firebase-authentication-system/\r\n\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from \"../_services/authentication.service\";\r\n@Component({\r\n selector: 'app-sign-up',\r\n templateUrl: './sign-up.component.html',\r\n styleUrls: ['./sign-up.component.scss']\r\n})\r\nexport class SignUpComponent implements OnInit {\r\n constructor(\r\n public authService: AuthService\r\n ) { }\r\n ngOnInit() { }\r\n}","
\r\n
\r\n
\r\n

Sign Up

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Or\r\n
\r\n \r\n
\r\n \r\n \r\n Continue with Google\r\n \r\n
\r\n
\r\n
\r\n Already have an account?\r\n Log In\r\n
\r\n
\r\n
","\r\n
\r\n
\r\n

Profil utilisateur

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n Bonjour {{(user.displayName) ? user.displayName : 'User'}}!\r\n
\r\n
\r\n

Nom: {{joueur.nomComplet}}

\r\n

Courriel: {{user.email}}

\r\n

Adresse: {{joueur.adresse}}

\r\n

Téléphone: {{joueur.telephone}}

\r\n

Date de naissance: {{joueur.dateDeNaissance | date:'yyyy-MM-dd'}}

\r\n

Contact d'urgence: {{joueur.contactUrgence.nomComplet}} - {{joueur.contactUrgence.relation}} ({{joueur.contactUrgence.numero}})

\r\n

Autres informations: {{joueur.autreInformation}}

\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
","//Reference: https://www.positronx.io/full-angular-firebase-authentication-system/\r\n\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { first } from 'rxjs/operators';\r\nimport { AuthService } from '../_services/authentication.service';\r\nimport { CharacterSheetService } from '../_services/character-sheet.service';\r\nimport { Joueur } from '../_models/joueur';\r\n@Component({\r\n selector: 'app-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n joueur!: Joueur;\r\n\r\n constructor(public authService: AuthService, private characterSheetService: CharacterSheetService) {}\r\n ngOnInit(): void {\r\n \r\n this.characterSheetService.getJoueur() \r\n .pipe(first())\r\n .subscribe({\r\n next: (joueur) => this.joueur = joueur,\r\n });\r\n\r\n }\r\n}","//Reference: https://www.positronx.io/full-angular-firebase-authentication-system/\r\n\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from \"../_services/authentication.service\";\r\n@Component({\r\n selector: 'app-forgot-password',\r\n templateUrl: './forgot-password.component.html',\r\n styleUrls: ['./forgot-password.component.scss']\r\n})\r\nexport class ForgotPasswordComponent implements OnInit {\r\n constructor(\r\n public authService: AuthService\r\n ) { }\r\n ngOnInit() {\r\n }\r\n}","
\r\n
\r\n
\r\n

Reset Password

\r\n

Please enter your email address to request a password reset.

\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n Go back to ? Log In\r\n
\r\n
\r\n
","
\r\n
\r\n
\r\n

Thank You for Registering

\r\n
\r\n

We have sent a confirmation email to {{user.email}}.

\r\n

Please check your email and click on the link to verfiy your email address.

\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n Go back to? Sign in\r\n
\r\n
\r\n
","//Reference: https://www.positronx.io/full-angular-firebase-authentication-system/\r\n\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from \"../_services/authentication.service\";\r\n@Component({\r\n selector: 'app-verify-email',\r\n templateUrl: './verify-email.component.html',\r\n styleUrls: ['./verify-email.component.scss']\r\n})\r\nexport class VerifyEmailComponent implements OnInit {\r\n constructor(\r\n public authService: AuthService\r\n ) { }\r\n ngOnInit() {\r\n }\r\n}","export class CreatePersonnageCommand {\r\n nom!: string;\r\n legion: number|undefined;\r\n astre1: number|undefined;\r\n astre2: number|undefined;\r\n }\r\n\r\n export class UpdateJoueurCommand {\r\n nomComplet!: string;\r\n adresse!: string;\r\n telephone!: string;\r\n dateDeNaissance: Date|undefined;\r\n autreInformation!: string;\r\n contactNomComplet!: string;\r\n contactRelation!: string;\r\n contactNumero!: string;\r\n }\r\n\r\n export class UpdateBackgroundCommand{\r\n personnageId: number = 0;\r\n personnalite!: string;\r\n concept!: string;\r\n historique!: string;\r\n butCourtTerme!: string;\r\n butMoyenTerme!: string;\r\n butLongTerme!: string;\r\n }\r\n\r\n export class DeletePersonnageCommand {\r\n personnageId!: number\r\n}","\r\n
\r\n
\r\n

Nouveau personnage

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
Nom requis
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
Légion requise
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
Premier Astre requis
\r\n
L'épouvantail ne peut pas être né sous cet astre.
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
Second Astre requis
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { CommandResult } from 'src/app/_models/commandResult';\r\nimport { CreatePersonnageCommand } from 'src/app/_models/_commands/createPersonnageCommand';\r\nimport { Astre, Astres } from '../../_enums/astre';\r\nimport { Legion, Legions } from '../../_enums/legion';\r\nimport { Personnage } from '../../_models/personnage';\r\nimport { CharacterSheetService } from '../../_services/character-sheet.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheets-create',\r\n templateUrl: './create.component.html',\r\n styleUrls: ['./create.component.scss']\r\n})\r\nexport class CharacterSheetsCreateComponent implements OnInit {\r\n personnage!: CreatePersonnageCommand;\r\n characterSheetForm!: FormGroup;\r\n submitted: boolean = false;\r\n isHumain: boolean = false;\r\n\r\n public legions = new Legions;\r\n public astres = new Astres;\r\n\r\n constructor(private formBuilder: FormBuilder, private characterSheetService: CharacterSheetService, private router:Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.personnage == undefined)\r\n {\r\n this.personnage = new CreatePersonnageCommand;\r\n }\r\n this.characterSheetForm = this.formBuilder.group({\r\n nom: [this.personnage.nom, Validators.required],\r\n legion: [this.personnage.legion, Validators.required],\r\n astre1: [this.personnage.astre1, Validators.required],\r\n astre2: [this.personnage.astre2]\r\n });\r\n\r\n }\r\n\r\n // convenience getter for easy access to form fields\r\n get f() { return this.characterSheetForm.controls; }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n if (this.characterSheetForm.invalid)\r\n {\r\n // Get all Form Controls keys and loop them\r\n Object.keys(this.characterSheetForm.controls).forEach(key => {\r\n // Get errors of every form control\r\n var control = this.characterSheetForm.get(key);\r\n if(control != null)\r\n {\r\n console.log(key);\r\n console.log(control.errors);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n const command = this.characterSheetForm.value;\r\n if (!this.isHumain)\r\n command.astre2 = null;\r\n this.characterSheetService.createPersonnage(command)\r\n .pipe(first())\r\n .subscribe({\r\n next: (commandResult: CommandResult) =>\r\n {\r\n console.log(commandResult);\r\n this.router.navigateByUrl(`/characterSheets/${(commandResult.result as Personnage).id}`);\r\n },\r\n error: (e) => \r\n {\r\n console.error(e)\r\n }\r\n }); \r\n }\r\n\r\n onLegionChange() {\r\n this.isHumain = this.characterSheetForm.value.legion == Legions.LegionHumain;\r\n\r\n if (this.characterSheetForm.value.legion == Legions.LegionEpouvantail) {\r\n this.characterSheetForm.controls['astre1'].addValidators(this.createEpouvantailValidator()); \r\n } else { \r\n this.characterSheetForm.controls['astre1'].clearValidators(); \r\n this.characterSheetForm.controls['astre1'].addValidators(Validators.required); \r\n }\r\n this.characterSheetForm.controls['astre1'].updateValueAndValidity();\r\n\r\n\r\n if(this.isHumain){\r\n this.characterSheetForm.controls['astre2'].addValidators(Validators.required); \r\n } else { \r\n this.characterSheetForm.controls['astre2'].clearValidators(); \r\n }\r\n this.characterSheetForm.controls['astre2'].updateValueAndValidity();\r\n }\r\n\r\n createEpouvantailValidator(): ValidatorFn {\r\n return (control:AbstractControl) : ValidationErrors | null => {\r\n\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const isValid = value != Astres.Saronide && value != Astres.PortePeste && value != Astres.Cannibale;\r\n return !isValid? {epouvantailAstreError: true}: null;\r\n }\r\n}\r\n}\r\n","\r\n
\r\n
\r\n

{{personnage.nom}}

\r\n {{joueur.nomComplet}}\r\n
\r\n
\r\n

Contact d'urgence

\r\n {{joueur.contactUrgence.nomComplet}}, {{joueur.contactUrgence.relation}} - {{joueur.contactUrgence.numero}}\r\n
\r\n
\r\n PT: {{this.legions.pointTolerance.get(personnage.legion)}}\r\n
\r\n
\r\n
\r\n {{this.legions.values.get(personnage.legion)}}\r\n
\r\n
\r\n {{this.astres.values.get(personnage.astre1)}}\r\n
\r\n
\r\n {{this.astres.values.get(personnage.astre2)}}\r\n
\r\n
\r\n

Compétence

\r\n
\r\n
    \r\n \r\n {{competencePersonnage.description?.nom}}\r\n \r\n \r\n
\r\n
\r\n
\r\n

{{sortPersonnages.name}}

\r\n
\r\n
    \r\n {{sort.description?.nom}}\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { TypeDeSorts } from 'src/app/_enums/typeDeSort';\r\nimport { CommandResult } from 'src/app/_models/commandResult';\r\nimport { Competence } from 'src/app/_models/competence';\r\nimport { Joueur } from 'src/app/_models/joueur';\r\nimport { Sort } from 'src/app/_models/sort';\r\nimport { CreatePersonnageCommand } from 'src/app/_models/_commands/createPersonnageCommand';\r\nimport { CompetenceService } from 'src/app/_services/competence.service';\r\nimport { SortService } from 'src/app/_services/sort.service';\r\nimport { Astre, Astres } from '../../_enums/astre';\r\nimport { Legion, Legions } from '../../_enums/legion';\r\nimport { Personnage } from '../../_models/personnage';\r\nimport { CharacterSheetService } from '../../_services/character-sheet.service';\r\n\r\n@Component({\r\n selector: 'app-character-sheet-print',\r\n templateUrl: './print.component.html',\r\n styleUrls: ['./print.component.scss']\r\n})\r\nexport class CharacterSheetPrintComponent implements OnInit {\r\n personnage!: Personnage;\r\n joueur!: Joueur;\r\n\r\n public legions = new Legions;\r\n public astres = new Astres;\r\n public typeDeSorts = new TypeDeSorts;\r\n sorts!: Sort[];\r\n competences!: Competence[];\r\n\r\n constructor(private characterSheetService: CharacterSheetService, private sortService: SortService, private competenceService: CompetenceService, private route: ActivatedRoute, private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n var personnageId = 0;\r\n this.route.params.pipe(first()).subscribe(params => {\r\n personnageId = params['characterSheetId'];\r\n });\r\n \r\n this.characterSheetService.getPersonnage(personnageId) \r\n .pipe(first())\r\n .subscribe({\r\n next: (personnage) => this.personnage = personnage,\r\n });\r\n \r\n this.characterSheetService.getJoueur() \r\n .pipe(first())\r\n .subscribe({\r\n next: (joueur) => this.joueur = joueur,\r\n });\r\n \r\n this.sortService.getSorts() \r\n .pipe(first())\r\n .subscribe({\r\n next: (sorts) => this.sorts = sorts,\r\n });\r\n \r\n this.competenceService.getCompetences() \r\n .pipe(first())\r\n .subscribe({\r\n next: (competences) => this.competences = competences,\r\n });\r\n }\r\n\r\n public getCompetencesPersonnage() {\r\n return this.personnage.competences.map((c) => {\r\n return { \r\n competence: c,\r\n description: this.competences.find((comp) => comp.id === c.competenceId)\r\n };\r\n });\r\n }\r\n\r\n public getSortsPersonnage() {\r\n return Array.from(this.typeDeSorts.values.entries()).map((typeDeSort) => {\r\n return {\r\n name: typeDeSort[1],\r\n sorts: this.personnage.sorts.map((s) => {\r\n return { \r\n sort: s,\r\n description: this.sorts\r\n .find((sort) => sort.id === s.sortId && sort.type === typeDeSort[0])\r\n };\r\n }).filter((sort) => sort.description != null)\r\n }\r\n }).filter((sortPersonnage) => sortPersonnage.sorts.length > 0);\r\n }\r\n}","\r\n
\r\n
\r\n

Profil utilisateur

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n

Contact d'urgence

\r\n
    \r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { formatDate } from '@angular/common';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { first } from 'rxjs/operators';\r\nimport { AuthService } from '../../_services/authentication.service';\r\nimport { CharacterSheetService } from '../../_services/character-sheet.service';\r\nimport { Joueur } from '../../_models/joueur';\r\nimport { CommandResult } from 'src/app/_models/commandResult';\r\nimport { UpdateJoueurCommand } from 'src/app/_models/_commands/createPersonnageCommand';\r\n@Component({\r\n selector: 'app-dashboard',\r\n templateUrl: './dashboard.update.component.html',\r\n styleUrls: ['./dashboard.update.component.scss'],\r\n})\r\nexport class DashboardUpdateComponent implements OnInit {\r\n dashboardForm!: FormGroup;\r\n joueur!: Joueur;\r\n submitted: boolean = false;\r\n\r\n constructor(private formBuilder: FormBuilder, public authService: AuthService, private characterSheetService: CharacterSheetService, private router:Router) {}\r\n ngOnInit(): void {\r\n \r\n this.characterSheetService.getJoueur() \r\n .pipe(first())\r\n .subscribe({\r\n next: (joueur) => {\r\n this.joueur = joueur;\r\n this.initializeDashboardForm();2\r\n }\r\n });\r\n }\r\n \r\n initializeDashboardForm() {\r\n this.dashboardForm = this.formBuilder.group({\r\n nomComplet: [this.joueur.nomComplet],\r\n adresse: [this.joueur.adresse],\r\n telephone: [this.joueur.telephone],\r\n dateDeNaissance: [this.joueur.dateDeNaissance ? formatDate(this.joueur.dateDeNaissance, 'yyyy-MM-dd', 'en') : ''],\r\n contactNomComplet: [this.joueur.contactUrgence?.nomComplet],\r\n contactRelation: [this.joueur.contactUrgence?.relation],\r\n contactNumero: [this.joueur.contactUrgence?.numero],\r\n autreInformation: [this.joueur.autreInformation]\r\n });\r\n }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n const command = this.dashboardForm.value;\r\n this.characterSheetService.updateJoueur(command)\r\n .pipe(first())\r\n .subscribe({\r\n next: (commandResult: CommandResult) =>\r\n {\r\n console.log(commandResult);\r\n this.router.navigateByUrl(`/dashboard`);\r\n },\r\n error: (e) => \r\n {\r\n console.error(e)\r\n }\r\n }); \r\n }\r\n}","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-admin',\r\n templateUrl: './admin.component.html',\r\n styleUrls: ['./admin.component.scss']\r\n})\r\nexport class AdminComponent implements OnInit {\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n}\r\n","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { environment } from '../../environments/environment';\r\nimport { AdminSetCrimsonCommand } from '../_models/_commands/admin/adminCommands';\r\nimport { Personnage } from '../_models/personnage';\r\nimport { AdminDesinscriptionCommand } from '../_models/_commands/admin/AdminDesinscriptionCommand';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AdminService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n\r\n listPersonnage() {\r\n return this.http.get(`${environment.apiUrl}/api/MgmtPersonnageFunctions_List`);\r\n }\r\n\r\n dataDumpPersonnage() {\r\n return this.http.get(`${environment.apiUrl}/api/MgmtPersonnageFunctions_DataDumpPersonnage`);\r\n }\r\n\r\n setPersonnageCrimson(command: AdminSetCrimsonCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/MgmtPersonnageFunctions_SetCrimson`, command);\r\n }\r\n\r\n desinscription(command: AdminDesinscriptionCommand) {\r\n return this.http.post(`${environment.apiUrl}/api/MgmtPersonnageFunctions_Desinscription`, command);\r\n }\r\n\r\n listReports() {\r\n return this.http.get(`${environment.apiUrl}/api/MgmtLogFunctions_ListReports`);\r\n }\r\n\r\n listAdminLog() {\r\n return this.http.get(`${environment.apiUrl}/api/MgmtLogFunctions_ListAdminLog`);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
JoueurPersonnageCrimson
{{personnage.joueur}}{{ personnage.nom }}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { AdminService } from 'src/app/_services/admin.service';\r\n\r\n@Component({\r\n selector: 'app-admin',\r\n templateUrl: './setCrimson.component.html',\r\n styleUrls: ['./setCrimson.component.scss']\r\n})\r\nexport class AdminSetCrimsonComponent implements OnInit {\r\n constructor(private adminService: AdminService) {}\r\n\r\n personnages!: any[];\r\n\r\n ngOnInit(): void {\r\n this.adminService.listPersonnage().subscribe(l => {\r\n this.personnages = l;\r\n });\r\n }\r\n\r\n\r\n\r\n onSubmit(id: any, crimsonDisponible: any) {\r\n this.adminService.setPersonnageCrimson({\r\n commandId: crypto.randomUUID(),\r\n personnageId: id,\r\n crimsonDisponible: crimsonDisponible\r\n })\r\n .subscribe({\r\n next: (result) => {\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • {{report}}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { AdminService } from 'src/app/_services/admin.service';\r\n\r\n@Component({\r\n selector: 'app-list-report',\r\n templateUrl: './listReport.component.html',\r\n styleUrls: ['./listReport.component.scss']\r\n})\r\nexport class AdminListReportComponent implements OnInit {\r\n constructor(private adminService: AdminService) {}\r\n\r\n reports!: string[];\r\n\r\n ngOnInit(): void {\r\n this.adminService.listReports().subscribe(l => {\r\n this.reports = l;\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • {{log}}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { AdminService } from 'src/app/_services/admin.service';\r\n\r\n@Component({\r\n selector: 'app-list-log',\r\n templateUrl: './listLog.component.html',\r\n styleUrls: ['./listLog.component.scss']\r\n})\r\nexport class AdminListLogComponent implements OnInit {\r\n constructor(private adminService: AdminService) {}\r\n\r\n logs!: string[];\r\n\r\n ngOnInit(): void {\r\n this.adminService.listAdminLog().subscribe(l => {\r\n this.logs = l;\r\n });\r\n }\r\n}\r\n","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
JoueurEmailPersonnageCrimsonBut long termeButCourtTermeConceptHistoriquePersonnalitéCompétencesTalent
{{personnage.joueurNomComplet}}{{personnage.joueurEmail}}{{personnage.personnage.nom }}{{personnage.personnage.crimsonDisponible }}{{personnage.personnage?.background?.butLongTerme}}{{personnage.personnage?.background?.butCourtTerme}}{{personnage.personnage?.background?.concept}}{{personnage.personnage?.background?.historique}}{{personnage.personnage?.background?.personnalite}}\r\n
    \r\n \r\n {{competencePersonnage.description?.nom}}\r\n \r\n \r\n
\r\n
\r\n
\r\n {{sortType.name}}\r\n
    \r\n {{sort.description?.nom}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","\r\n
\r\n
\r\n

Administration

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
Joueur
\r\n
Personnage
\r\n
Nb. GN
\r\n
Crimson
\r\n
Avoirs
\r\n
Coup de grâce
\r\n
Notes
\r\n
Action
\r\n
\r\n
\r\n
{{personnage.joueur}}
\r\n
{{ personnage.nom }}
\r\n
{{ personnage.nombreGnParticipe }}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Routes, RouterModule } from '@angular/router';\r\n\r\nimport { CharacterSheetsComponent } from './character-sheets/character-sheets.component';\r\nimport { CharacterSheetComponent } from './character-sheet/character-sheet.component';\r\nimport { AuthGuard } from './guard/auth.guard';\r\nimport { SignInComponent } from './sign-in/sign-in.component';\r\nimport { SignUpComponent } from './sign-up/sign-up.component';\r\nimport { DashboardComponent } from './dashboard/dashboard.component';\r\nimport { ForgotPasswordComponent } from './forgot-password/forgot-password.component';\r\nimport { VerifyEmailComponent } from './verify-email/verify-email.component';\r\nimport { CharacterSheetsCreateComponent } from './character-sheets/create/create.component';\r\nimport { CharacterSheetPrintComponent } from './character-sheet/print/print.component';\r\nimport { DashboardUpdateComponent } from './dashboard/update/dashboard.update.component';\r\nimport { AdminComponent } from './admin/admin.component';\r\nimport { AdminSetCrimsonComponent } from './admin/setCrimson/setCrimson.component';\r\nimport { AdminListReportComponent } from './admin/listReport/listReport.component';\r\nimport { AdminListLogComponent } from './admin/listLog/listLog.component';\r\nimport { AdminDatadumpPersonnageComponent } from './admin/datadumpPersonnage/datadumpPersonnage.component';\r\nimport { AdminDesinscriptionComponent } from './admin/desinscription/desinscription.component';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/sign-in', pathMatch: 'full' },\r\n { path: 'sign-in', component: SignInComponent },\r\n { path: 'register-user', component: SignUpComponent },\r\n { path: 'dashboard', component: DashboardComponent },\r\n { path: 'dashboard/update', component: DashboardUpdateComponent },\r\n { path: 'forgot-password', component: ForgotPasswordComponent },\r\n { path: 'verify-email-address', component: VerifyEmailComponent },\r\n { path: 'characterSheets', component: CharacterSheetsComponent}, \r\n { path: 'characterSheets/create', component: CharacterSheetsCreateComponent},\r\n { path: 'characterSheets/:characterSheetId', component: CharacterSheetComponent},\r\n { path: 'characterSheets/:characterSheetId/Print', component: CharacterSheetPrintComponent},\r\n { path: 'admin', component: AdminComponent},\r\n { path: 'admin/datadumpPersonnage', component: AdminDatadumpPersonnageComponent},\r\n { path: 'admin/setCrimson', component: AdminSetCrimsonComponent},\r\n { path: 'admin/desinscription', component: AdminDesinscriptionComponent},\r\n { path: 'admin/listReport', component: AdminListReportComponent},\r\n { path: 'admin/listLog', component: AdminListLogComponent},\r\n\r\n // otherwise redirect to home\r\n { path: '**', redirectTo: '' }\r\n];\r\n\r\nexport const appRoutingModule = RouterModule.forRoot(routes);","import { Component, OnInit } from '@angular/core';\r\nimport { TypeDeSorts } from 'src/app/_enums/typeDeSort';\r\nimport { Competence } from 'src/app/_models/competence';\r\nimport { Sort } from 'src/app/_models/sort';\r\nimport { AdminService } from 'src/app/_services/admin.service';\r\nimport { CompetenceService } from 'src/app/_services/competence.service';\r\nimport { SortService } from 'src/app/_services/sort.service';\r\n\r\n@Component({\r\n selector: 'app-admin',\r\n templateUrl: './datadumpPersonnage.component.html',\r\n styleUrls: ['./datadumpPersonnage.component.scss']\r\n})\r\nexport class AdminDatadumpPersonnageComponent implements OnInit {\r\n constructor(private adminService: AdminService, private competenceService: CompetenceService, private sortService: SortService) {}\r\n\r\n personnages!: any[];\r\n competences!: Competence[];\r\n sorts!: Sort[];\r\n public typeDeSorts = new TypeDeSorts;\r\n\r\n ngOnInit(): void {\r\n this.adminService.dataDumpPersonnage().subscribe(l => {\r\n this.personnages = l;\r\n });\r\n \r\n this.sortService.getSorts() \r\n .subscribe({\r\n next: (sorts) => this.sorts = sorts,\r\n });\r\n \r\n this.competenceService.getCompetences() \r\n //.pipe(first())\r\n .subscribe({\r\n next: (competences) => this.competences = competences,\r\n });\r\n }\r\n\r\n public getCompetencesPersonnage(personnage: any) {\r\n return personnage.competences.map((c: any) => {\r\n return { \r\n competence: c,\r\n description: this.competences.find((comp) => comp.id === c.competenceId)\r\n };\r\n });\r\n }\r\n\r\n public getSortsPersonnage(personnage: any) {\r\n return Array.from(this.typeDeSorts.values.entries()).map((typeDeSort) => {\r\n return {\r\n name: typeDeSort[1],\r\n sorts: personnage.sorts.map((s: any) => {\r\n return { \r\n sort: s,\r\n description: this.sorts\r\n .find((sort) => sort.id === s.sortId && sort.type === typeDeSort[0])\r\n };\r\n }).filter((sort: any) => sort.description != null)\r\n }\r\n }).filter((sortPersonnage) => sortPersonnage.sorts.length > 0);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AdminService } from 'src/app/_services/admin.service';\r\n\r\n@Component({\r\n selector: 'app-admin',\r\n templateUrl: './desinscription.component.html',\r\n styleUrls: ['./desinscription.component.scss']\r\n})\r\nexport class AdminDesinscriptionComponent implements OnInit {\r\n constructor(private adminService: AdminService) {}\r\n\r\n personnages!: any[];\r\n\r\n ngOnInit(): void {\r\n this.adminService.listPersonnage().subscribe(l => {\r\n this.personnages = l;\r\n });\r\n }\r\n\r\n\r\n\r\n onSubmit(id: any, crimsonDisponible: any, avoirs: any, coupDeGrace: any, notes: any) {\r\n const gnId = 1;\r\n this.adminService.desinscription({\r\n avoirs: avoirs,\r\n commandId: crypto.randomUUID(),\r\n personnageId: id,\r\n crimsonDisponible: crimsonDisponible,\r\n coupDeGrace: coupDeGrace,\r\n gnId: gnId,\r\n notes: notes\r\n })\r\n .subscribe({\r\n next: (result) => {\r\n },\r\n error: (e) => {console.error(e);}\r\n });\r\n }\r\n}\r\n","// Reference: https://jasonwatmore.com/post/2019/06/10/angular-8-user-registration-and-login-example-tutorial#login-component-html\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { User } from '../_models/user';\r\nimport { environment } from '../../environments/environment';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserService {\r\n constructor(private http: HttpClient) { }\r\n\r\n getAll() {\r\n return this.http.get(`${environment.apiUrl}/users`);\r\n }\r\n\r\n register(user: User) {\r\n return this.http.post(`${environment.apiUrl}/users/register`, user);\r\n }\r\n\r\n delete(id: number) {\r\n return this.http.delete(`${environment.apiUrl}/users/${id}`);\r\n }\r\n\r\n report(report: string) {\r\n return this.http.post(`${environment.apiUrl}/api/JoueurFunctions_Report`, report);\r\n }\r\n}","\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\t
\r\n\t\t

Signaler un problème

\r\n\t\t\r\n\t
\r\n\t
\r\n
Vous avez rencontré une problématique? Veuillez nous expliquer la situation, nous tâcherons d'y remédier dans les plus brefs délais.
\r\n\t\t\t
\r\n \r\n\t\t\t
\r\n\t
\r\n\t
\r\n\t\t\r\n\t
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from './_services/authentication.service';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { UserService } from './_services';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { CharacterSheetSortsComponent } from './character-sheet/sorts/sorts.component';\r\nimport { SortService } from './_services/sort.service';\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit {\r\n\r\n constructor(private sortService: SortService, public authService: AuthService, public userService: UserService, private modalService: NgbModal) {\r\n }\r\n\r\n ngOnInit(): void {\r\n //Make sure API is awake\r\n this.sortService.getSorts();\r\n }\r\n\r\n openFeedback(content: any) {\r\n\t\tthis.modalService.open(content, { ariaLabelledBy: 'modal-basic-title' }).result;\r\n return false;\r\n }\r\n\r\n onSubmitReport(reportValue: string) {\r\n if (reportValue === \"\")\r\n {\r\n this.modalService.dismissAll();\r\n return;\r\n }\r\n\r\n this.userService.report(reportValue)\r\n .subscribe({\r\n next: (result) => {\r\n this.modalService.dismissAll();\r\n },\r\n error: (e) => {\r\n console.error(e);\r\n this.modalService.dismissAll();\r\n }\r\n });\r\n }\r\n\r\n\r\n}","// Reference: https://jasonwatmore.com/post/2019/06/10/angular-8-user-registration-and-login-example-tutorial#login-component-html\r\n// Firebase reference: https://stackoverflow.com/questions/51053699/interceptor-with-firebase-authentication\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap } from 'rxjs/operators';\r\n\r\nimport { AngularFireAuth } from '@angular/fire/compat/auth';\r\n\r\n@Injectable()\r\nexport class JwtInterceptor implements HttpInterceptor {\r\n constructor(private auth: AngularFireAuth) {}\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n\r\n return this.auth.idToken.pipe(\r\n mergeMap((token: any) => {\r\n console.log(token);\r\n if (token) {\r\n request = request.clone({ setHeaders: { Authorization: `Bearer ${token}` } });\r\n }\r\n return next.handle(request);\r\n }));\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { AngularFireModule } from '@angular/fire/compat';\r\nimport { AngularFireAuthModule } from '@angular/fire/compat/auth';\r\nimport { AngularFireStorageModule } from '@angular/fire/compat/storage';\r\nimport { AngularFirestoreModule } from '@angular/fire/compat/firestore';\r\nimport { AngularFireDatabaseModule } from '@angular/fire/compat/database';\r\n\r\nimport { SignInComponent } from './sign-in/sign-in.component';\r\nimport { SignUpComponent } from './sign-up/sign-up.component';\r\nimport { ForgotPasswordComponent } from './forgot-password/forgot-password.component';\r\nimport { VerifyEmailComponent } from './verify-email/verify-email.component';\r\n\r\nimport { AuthService } from \"./_services/authentication.service\";\r\n\r\nimport { appRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { CharacterSheetComponent } from './character-sheet/character-sheet.component';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { AlertComponent } from './alert';\r\n\r\nimport { environment } from '../environments/environment';\r\nimport { DashboardComponent } from './dashboard/dashboard.component';\r\nimport { CharacterSheetsComponent } from './character-sheets/character-sheets.component';\r\nimport { CharacterSheetsCreateComponent } from './character-sheets/create/create.component';\r\nimport { JwtInterceptor } from './_helpers/jwt.interceptor';\r\nimport { CharacterSheetCompetencesComponent } from './character-sheet/competences/competences.component';\r\nimport { CharacterSheetPrintComponent } from './character-sheet/print/print.component';\r\nimport { CharacterSheetSortsComponent } from './character-sheet/sorts/sorts.component';\r\nimport { CharacterSheetBackgroundComponent } from './character-sheet/background/background.component';\r\nimport { DashboardUpdateComponent } from './dashboard/update/dashboard.update.component';\r\nimport { AdminComponent } from './admin/admin.component';\r\nimport { AdminSetCrimsonComponent } from './admin/setCrimson/setCrimson.component';\r\nimport { AdminListLogComponent } from './admin/listLog/listLog.component';\r\nimport { AdminListReportComponent } from './admin/listReport/listReport.component';\r\nimport { AdminDatadumpPersonnageComponent } from './admin/datadumpPersonnage/datadumpPersonnage.component';\r\nimport { ConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component';\r\nimport { ConfirmationDialogService } from './confirmation-dialog/confirmation-dialog.service';\r\nimport { AdminDesinscriptionComponent } from './admin/desinscription/desinscription.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AdminComponent,\r\n AdminDatadumpPersonnageComponent,\r\n AdminSetCrimsonComponent,\r\n AdminDesinscriptionComponent,\r\n AdminListReportComponent,\r\n AdminListLogComponent,\r\n AppComponent,\r\n CharacterSheetComponent,\r\n AlertComponent,\r\n SignInComponent,\r\n SignUpComponent,\r\n ForgotPasswordComponent,\r\n VerifyEmailComponent,\r\n DashboardComponent,\r\n DashboardUpdateComponent,\r\n CharacterSheetsComponent,\r\n CharacterSheetsCreateComponent,\r\n CharacterSheetCompetencesComponent,\r\n CharacterSheetSortsComponent,\r\n CharacterSheetBackgroundComponent,\r\n CharacterSheetPrintComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n BrowserModule,\r\n appRoutingModule,\r\n NgbModule,\r\n NgSelectModule,\r\n BrowserAnimationsModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n AngularFireModule.initializeApp(environment.firebase),\r\n AngularFireAuthModule,\r\n AngularFirestoreModule,\r\n AngularFireStorageModule,\r\n AngularFireDatabaseModule,\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },\r\n AuthService,\r\n ConfirmationDialogService], \r\n entryComponents: [ ConfirmationDialogComponent ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n"],"x_google_ignoreList":[]}