@@ -27,30 +27,25 @@ export class SelectedClickInteraction extends Interaction {
2727 this . isProduitSelected = isProduitSelected ;
2828 this . addProduit = addProduit ;
2929 this . removeProduit = removeProduit ;
30-
31- // Ajout de l'événement de clic
32- this . handleEvent = this . handleClickEvent . bind ( this ) ;
3330 }
3431
3532 /**
3633 * Gère l'événement de clic pour la sélection.
3734 * @param event - L'événement de clic de la carte.
3835 * @returns {boolean } - Retourne `true` pour continuer la propagation de l'événement.
3936 */
40- private handleClickEvent ( event : MapBrowserEvent < MouseEvent > ) : boolean {
37+ public override handleEvent ( event : MapBrowserEvent < MouseEvent > ) : boolean {
4138 // Vérifie que l'événement est un clic
4239 if ( event . type !== "click" ) {
4340 return true ; // Continue la propagation pour les autres types d'événements
4441 }
4542
4643 const map = event . map ;
4744 const pixel = map . getEventPixel ( event . originalEvent ) ;
48- let index = 0 ;
4945
5046 // Parcourt les entités sous le clic
5147 map . forEachFeatureAtPixel ( pixel , ( feature , layer ) => {
5248 if (
53- index === 0 &&
5449 layer ?. getSource ( ) [ "key_" ] === this . selectionLayer . getSource ( ) [ "key_" ]
5550 ) {
5651 const properties = feature . getProperties ( ) ;
@@ -67,33 +62,38 @@ export class SelectedClickInteraction extends Interaction {
6762 this . removeProduit ( dalle . name ) ;
6863 }
6964
70- // Centre la carte sur l'entité sélectionnée
71- this . centerOnFeature ( map , feature ) ;
72-
73- // Rafraîchit la couche de sélection
74- this . selectionLayer . changed ( ) ;
75- index += 1 ;
65+ // Déplace la carte de manière imperceptible
66+ this . moveMapImperceptibly ( map ) ;
7667 }
7768 } ) ;
7869
70+ // Rafraîchit la couche de sélection
71+ this . selectionLayer . changed ( ) ;
72+
7973 return true ; // Continue la propagation de l'événement
8074 }
8175
8276 /**
83- * Centre la carte sur une entité de manière fluide .
77+ * Déplace la carte de manière imperceptible en ajustant légèrement le centre .
8478 * @param map - L'instance de la carte.
85- * @param feature - L'entité sur laquelle centrer la carte.
8679 */
87- private centerOnFeature ( map : any , feature : FeatureLike ) {
88- const geometry = feature . getGeometry ( ) ;
89- if ( ! geometry ) return ;
80+ private moveMapImperceptibly ( map : any ) : void {
81+ const view = map . getView ( ) ;
82+ const currentCenter = view . getCenter ( ) ;
9083
91- const center = getCenter ( geometry . getExtent ( ) ) ;
84+ if ( currentCenter ) {
85+ // Ajoute un léger décalage au centre actuel
86+ const imperceptibleOffset = 0.00001 ; // Ajustez cette valeur si nécessaire
87+ const newCenter = [
88+ currentCenter [ 0 ] + imperceptibleOffset ,
89+ currentCenter [ 1 ] + imperceptibleOffset ,
90+ ] ;
9291
93- map . getView ( ) . animate ( {
94- center : center ,
95- zoom : this . zoomToGo ,
96- duration : 500 , // 0.5 seconde
97- } ) ;
92+ // Anime la vue vers le nouveau centre
93+ view . animate ( {
94+ center : newCenter ,
95+ duration : 100 , // Animation rapide (0.1 seconde)
96+ } ) ;
97+ }
9898 }
99- }
99+ }
0 commit comments