193 lines
6.6 KiB
TypeScript
193 lines
6.6 KiB
TypeScript
|
|
import { Component, Input, OnInit } from '@angular/core';
|
|
import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
import { Router } from '@angular/router';
|
|
import { Observable, Subscription } from 'rxjs';
|
|
import { EMPTY_RESTAU, Restaurant } from 'src/app/pages/models/restaurant';
|
|
import { ApiBackService } from 'src/app/services/api-back.service';
|
|
|
|
@Component({
|
|
selector: 'app-add-restau',
|
|
templateUrl: './add-restau.component.html',
|
|
styleUrls: ['./add-restau.component.scss']
|
|
})
|
|
export class AddRestauComponent implements OnInit {
|
|
|
|
|
|
public signupForm: FormGroup;
|
|
public errorMessage?: string;
|
|
public listCategories: any[];
|
|
public idRestau: Subscription | undefined;
|
|
public formArrayCheckbox: FormArray;
|
|
public idRestauAModifier?: number = 0; // On instancie a 0 ou undefined = on est en CREATION de Restau
|
|
public successMessage?: string;
|
|
|
|
constructor(private router: Router, private apiBackService: ApiBackService) {
|
|
this.signupForm = new FormGroup({});
|
|
this.listCategories = [];
|
|
this.formArrayCheckbox = new FormArray([]);
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
|
|
this.apiBackService.getCategories().subscribe(listCateg => this.listCategories = listCateg);
|
|
this.initForm(EMPTY_RESTAU);
|
|
this.formArrayCheckbox = this.signupForm.get('typerestausFc') as FormArray;
|
|
|
|
// lorsqu'on recoit l'evenement click sur le bouton modif dans le composant "update-del-restau"
|
|
// on rentre dans cette souscription
|
|
this.idRestau = this.apiBackService.restauAModif.subscribe(restau => {
|
|
//On enregistre un identifiant de restaurant, preuve qu'on est bien en MODIFICATION
|
|
this.idRestauAModifier = restau.id;
|
|
|
|
this.cleanCheckbox();
|
|
|
|
if (restau.typerestaus != undefined && restau.typerestaus != null) {
|
|
for (let index = 0; index < restau.typerestaus.length; index++) {
|
|
// juste l'affichage
|
|
const idCheckbox = document.getElementById(`categ${restau.typerestaus[index].id}`) as HTMLInputElement
|
|
idCheckbox.checked = true;
|
|
|
|
// pour reformer un formArray avec les données récupérées
|
|
this.formArrayCheckbox.push(new FormControl({ id: `${restau.typerestaus[index].id}` }));
|
|
}
|
|
}
|
|
this.initForm(restau);
|
|
})
|
|
}
|
|
|
|
public initForm(restau: Restaurant) {
|
|
|
|
this.signupForm = new FormGroup({
|
|
nomFc: new FormControl(restau.nom, [Validators.required]),
|
|
prixFc: new FormControl(restau.prix),
|
|
longitudeFc: new FormControl(restau.longitude, [Validators.required,]), // chercher une meilleure regex
|
|
latitudeFc: new FormControl(restau.latitude, [Validators.required]),
|
|
adresseFc: new FormControl(restau.adresse, [Validators.required]),
|
|
telephoneFc: new FormControl(restau.telephone),
|
|
websiteFc: new FormControl(restau.website, [Validators.pattern("/^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/")]), // voir une autre regex
|
|
surPlaceFc: new FormControl(restau.surPlace),
|
|
aEmporterFc: new FormControl(restau.aEmporter),
|
|
accesPMRFc: new FormControl(restau.accesPMR),
|
|
typerestausFc: new FormArray([])
|
|
})
|
|
}
|
|
|
|
|
|
public onSubmit(): void {
|
|
console.log("value : ", this.signupForm.value);
|
|
// console.log("form : ", this.signupForm);
|
|
const nomFc = this.signupForm.value['nomFc'];
|
|
const prixFc = this.signupForm.value['prixFc'];
|
|
const longitudeFc = this.signupForm.value['longitudeFc'];
|
|
const latitudeFc = this.signupForm.value['latitudeFc'];
|
|
const adresseFc = this.signupForm.value['adresseFc'];
|
|
const telephoneFc = this.signupForm.value['telephoneFc'];
|
|
const websiteFc = this.signupForm.value['websiteFc'];
|
|
const surPlaceFc = this.signupForm.value['surPlaceFc'];
|
|
const aEmporterFc = this.signupForm.value['aEmporterFc'];
|
|
const accesPMRFc = this.signupForm.value['accesPMRFc'];
|
|
const typerestausFc = this.formArrayCheckbox.value;
|
|
|
|
// console.log(this.formArray);
|
|
|
|
const restaurant: Restaurant = {
|
|
id: this.idRestauAModifier,
|
|
latitude: latitudeFc,
|
|
longitude: longitudeFc,
|
|
nom: nomFc,
|
|
prix: prixFc,
|
|
adresse: adresseFc,
|
|
telephone: telephoneFc,
|
|
website: websiteFc,
|
|
surPlace: surPlaceFc,
|
|
aEmporter: aEmporterFc,
|
|
accesPMR: accesPMRFc,
|
|
typerestaus: typerestausFc
|
|
}
|
|
|
|
if (restaurant.latitude !== '' &&
|
|
restaurant.longitude !== '' &&
|
|
restaurant.nom !== '' &&
|
|
restaurant.adresse !== '') {
|
|
|
|
// si l'identifiant du restaurant est rensigné alors on MODIFIE
|
|
if (this.idRestauAModifier != 0 &&
|
|
this.idRestauAModifier != null &&
|
|
this.idRestauAModifier != undefined) {
|
|
this.apiBackService.modifRestaurant(restaurant).subscribe(
|
|
resp => {
|
|
this.idRestauAModifier = 0
|
|
// Une fois le retour du subscribe qui est la preuve du bon enregistrement alors
|
|
// On reinitialise identifiant restau a 0 pour se remettre en mode CREATION
|
|
this.successMessage = "Restaurant modifié !"
|
|
this.initForm(EMPTY_RESTAU);
|
|
this.cleanCheckbox();
|
|
|
|
//this.router.navigate(['restaurants'])
|
|
}
|
|
)
|
|
} else { // sinon on crée un restau
|
|
this.apiBackService.addRestaurant(restaurant).subscribe(
|
|
resp => {
|
|
this.initForm(EMPTY_RESTAU)
|
|
this.successMessage = "Restaurant ajouté !"
|
|
this.cleanCheckbox()
|
|
|
|
//this.router.navigate(['restaurants'])
|
|
}
|
|
);
|
|
this.initForm(EMPTY_RESTAU);
|
|
}
|
|
} else {
|
|
|
|
this.errorMessage = "Renseigner les champs obligatoires **";
|
|
}
|
|
|
|
}
|
|
|
|
onCheckChange(event: any) {
|
|
// this.formArrayCheckbox = this.signupForm.get('typerestausFc') as FormArray;
|
|
// console.log(this.formArrayCheckbox);
|
|
|
|
if (event.target.checked) {
|
|
|
|
this.formArrayCheckbox.push(new FormControl({ id: event.target.value }));
|
|
|
|
} else {
|
|
let i: number = 0;
|
|
|
|
this.formArrayCheckbox.controls.forEach((ctrl) => {
|
|
|
|
if (ctrl.value['id'] == event.target.value) {
|
|
this.formArrayCheckbox.removeAt(i);
|
|
return;
|
|
}
|
|
|
|
i++;
|
|
});
|
|
}
|
|
}
|
|
|
|
cleanCheckbox(){
|
|
// on vide les checkbox si on en a coché avant de cliquer sur une modif
|
|
this.formArrayCheckbox.controls = [];
|
|
|
|
// on vide (pour l'affichage également)
|
|
let inputCategories = document.querySelectorAll('#checkboxes li input');
|
|
for (let i = 0; i < inputCategories.length; i++) {
|
|
let input = inputCategories[i] as HTMLInputElement
|
|
input.checked = false;
|
|
}
|
|
}
|
|
|
|
|
|
ngOnDestroy() {
|
|
if (this.idRestau) {
|
|
this.idRestau.unsubscribe();
|
|
this.idRestau = undefined;
|
|
}
|
|
}
|
|
|
|
}
|
|
|