$(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(); } }); }); });