$(document).ready(function() {
function addNewArea(geoJSON) {
const areasInput = $('#mapSelectionsInput');
try {
const areas = JSON.parse(areasInput.val() || '[]');
selectedAreas = areas;
selectedAreas.push(geoJSON);
updateSelectedAreasDisplay(selectedAreas);
mapSelector.setInitialSelections(selectedAreas);
areasInput.val(JSON.stringify(selectedAreas));
} catch (error) {
console.error("Erreur lors de l'ajout de la nouvelle zone:", error);
}
}
if (typeof showLoading === "undefined") {
console.error("showLoading n'est pas défini !");
}
if (typeof hideLoading === "undefined") {
console.error("hideLoading n'est pas défini !");
}
const addressInput = document.getElementById("address");
if (addressInput) {
const autocomplete = new google.maps.places.Autocomplete(addressInput, {
types: ["geocode"], // Suggest addresses
componentRestrictions: { country: "fr" }, // Limiter à la France
});
autocomplete.addListener("place_changed", () => {
const place = autocomplete.getPlace();
if (place.geometry) {
console.log("Selected Address:", place.formatted_address);
} else {
console.error("Aucune géométrie pour l'adresse sélectionnée !");
}
});
}
let selectedAreas = [];
const mapSelector = new MapSelector({
onSelectionConfirmed: function(areas) {
selectedAreas = areas;
$('#mapSelectionsInput').val(JSON.stringify(areas));
updateSelectedAreasDisplay(areas);
}
});
const localitySearch = new LocalitySearch((geoJSON) => addNewArea(geoJSON), 'localitySearchContainer');
localitySearch.init();
function updateSelectedAreasDisplay(areas) {
const $container = $('#selectedAreasDisplay');
$container.empty();
if (areas.length === 0) {
return;
}
const $list = $('
');
areas.forEach((area, index) => {
const description = mapSelector.geoJSONHandler.createZoneLabel(area, index);
const $item = $(`
${description}
`);
$list.append($item);
});
$container.append($list);
bindRemoveEvents();
}
function bindRemoveEvents() {
$('.removeAreaBtn').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
const index = parseInt($(this).data('index'));
selectedAreas.splice(index, 1);
$('#mapSelectionsInput').val(JSON.stringify(selectedAreas));
updateSelectedAreasDisplay(selectedAreas);
mapSelector.setInitialSelections(selectedAreas);
});
}
$(document).on('click', '#openMapSelectorBtn', function(e) {
e.preventDefault();
mapSelector.open();
});
$('#typeSelect').on('change', function() {
const selectedType = $(this).val();
const preselectOptions = ['Garage', 'Bureau', 'Terrain', 'Immeuble', 'Studio'];
if (preselectOptions.includes(selectedType)) {
$('#bedroomSelect').val('0');
} else {
$('#bedroomSelect').val('');
}
});
// Modification de la validation du formulaire pour l'étape 1
$('#nextToStep2').on('click', function() {
let isValid = true;
// Vérification des champs input et select requis
$('#step1').find('input[required], select[required]').each(function() {
if (!$(this).val()) {
$(this).addClass('input-error');
isValid = false;
} else {
$(this).removeClass('input-error');
}
});
// Vérifier que des zones ont été sélectionnées
if (!$('#mapSelectionsInput').val()) {
$('#selectedAreasDisplay').addClass('input-error');
isValid = false;
} else {
$('#selectedAreasDisplay').removeClass('input-error');
}
// Vérification de la textarea 'externalNote'
const externalNoteValue = $('#externalNote').val().trim();
if (!externalNoteValue) {
$('#externalNote').addClass('input-error');
isValid = false;
} else {
$('#externalNote').removeClass('input-error');
}
if (isValid) {
$('#step1').fadeOut(400, function() {
$('#step2').fadeIn(400);
});
}
});
// Revenir de l'étape 2 à l'étape 1
$('#backToStep1').on('click', function() {
$('#step2').fadeOut(400, function() {
$('#step1').fadeIn(400);
});
});
$('#buyerForm').submit(function(event) {
event.preventDefault(); // Empêche l'envoi classique du formulaire
console.log("Formulaire soumis");
// Affiche le loader
showLoading();
console.log("Loader affiché");
// Récupère les données du formulaire
const formData = $(this).serialize();
console.log("Données du formulaire : ", formData);
// Envoie les données en AJAX
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: formData,
success: function(response) {
console.log("Réponse du serveur : ", response);
try {
if (typeof response === 'string') {
response = JSON.parse(response);
}
if (response.redirectUrl) {
console.log("Redirection vers : ", response.redirectUrl);
window.location.href = response.redirectUrl;
} else {
alert(response.message || "Aucune URL de redirection fournie.");
}
} catch (error) {
console.error("Erreur lors du traitement de la réponse :", error);
alert("Erreur de réponse du serveur.");
}
},
error: function(xhr, status, error) {
console.error("Erreur AJAX : ", error);
const errorMessage = xhr.responseJSON ? xhr.responseJSON.error : "Erreur lors de l'envoi du formulaire";
alert(errorMessage);
},
complete: function() {
console.log("Requête terminée");
// Cache le loader une fois la réponse reçue (success ou error)
hideLoading();
}
});
});
});