️ Improve pins perf and modal background

pull/26/head^2
Alexis Feron 4 weeks ago
parent 25fd24ffdf
commit 69b8adec7e

@ -15,7 +15,7 @@ import {
} from 'rxjs/operators'; } from 'rxjs/operators';
import { AutocompleteService } from '../../services/auto-complete/auto-complete.service'; import { AutocompleteService } from '../../services/auto-complete/auto-complete.service';
import { ExifService } from '../../services/exif/exif.service'; import { ExifService } from '../../services/exif/exif.service';
import { MapReloadService } from '../../services/map-reload/map-reload.service'; // Assurez-vous d'importer le service de rechargement de la carte import { MapReloadService } from '../../services/map-reload/map-reload.service';
import { PinService } from '../../services/pin/pin.service'; import { PinService } from '../../services/pin/pin.service';
import { DragDropComponent } from '../drag-drop/drag-drop.component'; import { DragDropComponent } from '../drag-drop/drag-drop.component';
@Component({ @Component({

@ -6,6 +6,7 @@
'opacity-100': isOpen 'opacity-100': isOpen
}" }"
(click)="cancel()" (click)="cancel()"
id="confirm-modal-background"
></div> ></div>
<!-- Contenu principal --> <!-- Contenu principal -->

@ -67,5 +67,9 @@ export class ConfirmModalComponent implements OnInit, OnDestroy {
if (modal && modal.parentElement !== document.body) { if (modal && modal.parentElement !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
const bg = document.getElementById('confirm-modal-background');
if (bg && bg.parentElement !== document.body) {
document.body.appendChild(bg);
}
} }
} }

@ -31,6 +31,7 @@
'opacity-100': isPinModalOpen 'opacity-100': isPinModalOpen
}" }"
(click)="closePinModal()" (click)="closePinModal()"
id="pin-modal-background"
></div> ></div>
<!-- Main modal --> <!-- Main modal -->

@ -25,7 +25,7 @@ import {
import { Pin } from '../../model/Pin'; import { Pin } from '../../model/Pin';
import { AutocompleteService } from '../../services/auto-complete/auto-complete.service'; import { AutocompleteService } from '../../services/auto-complete/auto-complete.service';
import { ExifService } from '../../services/exif/exif.service'; import { ExifService } from '../../services/exif/exif.service';
import { MapReloadService } from '../../services/map-reload/map-reload.service'; // Assurez-vous d'importer le service de rechargement de la carte import { MapReloadService } from '../../services/map-reload/map-reload.service';
import { ModalService } from '../../services/modal/modal.service'; import { ModalService } from '../../services/modal/modal.service';
import { PinService } from '../../services/pin/pin.service'; import { PinService } from '../../services/pin/pin.service';
import { DragDropComponent } from '../drag-drop/drag-drop.component'; import { DragDropComponent } from '../drag-drop/drag-drop.component';
@ -58,7 +58,7 @@ export class EditPinPopupComponent implements OnInit, AfterViewInit, OnDestroy {
private exifService: ExifService, private exifService: ExifService,
private modalService: ModalService, private modalService: ModalService,
private router: Router, private router: Router,
private mapReloadService: MapReloadService // Assurez-vous d'importer le service de rechargement de la carte private mapReloadService: MapReloadService
) { ) {
// Initialiser le formulaire avec des valeurs par défaut // Initialiser le formulaire avec des valeurs par défaut
this.form = this.fb.group({ this.form = this.fb.group({
@ -192,6 +192,10 @@ export class EditPinPopupComponent implements OnInit, AfterViewInit, OnDestroy {
if (modal && modal.parentElement !== document.body) { if (modal && modal.parentElement !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
const bg = document.getElementById('pin-modal-background');
if (bg && bg.parentElement !== document.body) {
document.body.appendChild(bg);
}
} }
selectSuggestion(suggestion: any): void { selectSuggestion(suggestion: any): void {

@ -6,7 +6,7 @@ import * as L from 'leaflet';
import 'leaflet/dist/leaflet.css'; import 'leaflet/dist/leaflet.css';
import { Pin } from '../../model/Pin'; import { Pin } from '../../model/Pin';
import { AutocompleteService } from '../../services/auto-complete/auto-complete.service'; import { AutocompleteService } from '../../services/auto-complete/auto-complete.service';
import { MapReloadService } from '../../services/map-reload/map-reload.service'; // Assurez-vous d'importer le service de rechargement de la carte import { MapReloadService } from '../../services/map-reload/map-reload.service';
import { PinService } from '../../services/pin/pin.service'; import { PinService } from '../../services/pin/pin.service';
import { PinMarkerComponent } from '../pin-marker/pin-marker.component'; import { PinMarkerComponent } from '../pin-marker/pin-marker.component';
@ -33,7 +33,7 @@ export class LeafletMapComponent implements OnInit {
private autocompleteService: AutocompleteService, private autocompleteService: AutocompleteService,
private route: ActivatedRoute, private route: ActivatedRoute,
private router: Router, private router: Router,
private mapReloadService: MapReloadService // Assurez-vous d'importer le service de rechargement de la carte private mapReloadService: MapReloadService
) {} ) {}
ngOnInit(): void { ngOnInit(): void {
@ -74,34 +74,38 @@ export class LeafletMapComponent implements OnInit {
this.allPins = pins; this.allPins = pins;
this.extractPersons(pins); this.extractPersons(pins);
const countrySet = new Set<string>(); this.renderPins(); // Afficher d'abord les pins sans les filtres
const requests = pins.map((pin) => this.loadCountriesForFiltrers(pins); // Ensuite, charger les pays en arrière-plan
this.autocompleteService });
.getAddressFromCoordinates(pin.location[0], pin.location[1]) }
.toPromise()
.then((res: any) => { private loadCountriesForFiltrers(pins: Pin[]): void {
const address = res?.address; const countrySet = new Set<string>();
const country = const requests = pins.map((pin) =>
address?.country || this.autocompleteService
this.extractLastFromDisplayName(res?.display_name); .getAddressFromCoordinates(pin.location[0], pin.location[1])
if (country) { .toPromise()
this.pinCountries[pin.id] = country; .then((res: any) => {
countrySet.add(country); const address = res?.address;
} const country =
}) address?.country ||
.catch((err: any) => { this.extractLastFromDisplayName(res?.display_name);
console.error( if (country) {
'Erreur lors de la récupération du pays pour le pin', this.pinCountries[pin.id] = country;
pin.id, countrySet.add(country);
err }
); })
}) .catch((err: any) => {
); console.error(
'Erreur lors de la récupération du pays pour le pin',
Promise.all(requests).then(() => { pin.id,
this.availableCountries = Array.from(countrySet).sort(); err
this.renderPins(); );
}); })
);
Promise.all(requests).then(() => {
this.availableCountries = Array.from(countrySet).sort();
}); });
} }
@ -221,35 +225,9 @@ export class LeafletMapComponent implements OnInit {
this.pinsService.getPins().subscribe((pins: Pin[]) => { this.pinsService.getPins().subscribe((pins: Pin[]) => {
this.allPins = pins; this.allPins = pins;
this.extractPersons(pins); this.extractPersons(pins);
this.renderPins(); // Afficher d'abord les pins sans les filtres
const countrySet = new Set<string>(); this.loadCountriesForFiltrers(pins); // Ensuite, charger les pays en arrière-plan
const requests = pins.map((pin) =>
this.autocompleteService
.getAddressFromCoordinates(pin.location[0], pin.location[1])
.toPromise()
.then((res: any) => {
const address = res?.address;
const country =
address?.country ||
this.extractLastFromDisplayName(res?.display_name);
if (country) {
this.pinCountries[pin.id] = country;
countrySet.add(country);
}
})
.catch((err: any) => {
console.error(
'Erreur lors de la récupération du pays pour le pin',
pin.id,
err
);
})
);
Promise.all(requests).then(() => {
this.availableCountries = Array.from(countrySet).sort();
this.renderPins();
});
}); });
} }
} }

Loading…
Cancel
Save