class UIManager { constructor(mapSelector) { this.mapSelector = mapSelector; } updateSelectedAreasList() { const list = this._getElement('#selectedAreasList'); if (!list) return; list.innerHTML = ''; if (this.mapSelector.selectedAreas.length === 0) { const li = document.createElement('li'); li.className = 'no-areas'; list.appendChild(li); return; } this.mapSelector.selectedAreas.forEach((area, index) => { const li = document.createElement('li'); li.className = 'selectedAreaItem'; let zoneLabel = this._createZoneLabel(area, index); li.innerHTML = ` ${zoneLabel} `; list.appendChild(li); }); this._bindRemoveAreaEvents(); } _createZoneLabel(area, index) { return this.mapSelector.geoJSONHandler.createZoneLabel(area, index); } _bindRemoveAreaEvents() { document.querySelectorAll('.removeAreaBtn').forEach(btn => { btn.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); const index = parseInt(e.target.dataset.index); this.mapSelector.selectedAreas.splice(index, 1); this.mapSelector.drawnItems.clearLayers(); this.mapSelector.searchResultsLayer.clearLayers(); this.mapSelector.selectedAreas.forEach(area => { this.mapSelector.geoJSONHandler.renderGeoJSONOnMap(area); }); this.updateSelectedAreasList(); }); }); } _getElement(selector) { const element = document.querySelector(selector); if (!element) { console.warn(`Element not found: ${selector}`); } return element; } bindEvents() { const confirmButton = document.querySelector('#confirmSelectionBtn'); const clearButton = document.querySelector('#clearSelectionBtn'); const closeButton = document.querySelector('.mapSelectorCloseBtn'); if (confirmButton) { confirmButton.addEventListener('click', () => { const selectedAreas = this.mapSelector.getSelectedAreas(); let totalArea = 0; selectedAreas.forEach(area => { const areaSize = GeoJSONHandler.calculateArea(area); totalArea += areaSize / 1000000; }); if (totalArea > 1300) { alert('La zone sélectionnée est trop grande. Maximum autorisé: 1300 km²'); return; } this.mapSelector.options.onSelectionConfirmed(selectedAreas); this.mapSelector.close(); }); } if (clearButton) { clearButton.addEventListener('click', () => { this.mapSelector.clearSelection(); }); } if (closeButton) { closeButton.addEventListener('click', () => { if (this.mapSelector.isEditing) { e.preventDefault(); alert('Veuillez terminer ou annuler vos modifications avant de fermer'); return; } this.mapSelector.close(); }); } if (this.mapSelector._eventsBound) return; this.mapSelector._eventsBound = true; if (this.mapSelector.modalWrapper) { this.mapSelector.modalWrapper.addEventListener('click', (e) => { e.stopPropagation(); }); const mapContainer = this.mapSelector.modalWrapper.querySelector('#mapSelectorContainer'); if (mapContainer) { mapContainer.addEventListener('click', (e) => { e.stopPropagation(); }); } } window.addEventListener('resize', () => { if (this.mapSelector.map) { const isMobile = window.innerWidth <= 768; if (isMobile) { const controls = document.querySelectorAll(".leaflet-control"); controls.forEach((control) => { if (control.classList.contains("leaflet-draw")) { control.style.marginRight = "10px"; } if (control.classList.contains("leaflet-control-zoom")) { control.style.marginLeft = "10px"; } }); } } }); } setupModalEvents() { const closeBtn = document.querySelector('.mapSelectorCloseBtn'); const confirmBtn = document.querySelector('#confirmSelectionBtn'); if (closeBtn) { closeBtn.addEventListener('click', (e) => { if (this.mapSelector.isEditing) { e.preventDefault(); alert('Veuillez terminer ou annuler vos modifications avant de fermer'); return; } this.mapSelector.close(); }); } if (confirmBtn) { confirmBtn.addEventListener('click', (e) => { if (this.mapSelector.isEditing) { e.preventDefault(); alert('Veuillez terminer ou annuler vos modifications avant de confirmer'); return; } this.mapSelector.options.onSelectionConfirmed(this.mapSelector.getSelectedAreas()); this.mapSelector.close(); }); } } }