Skip to content

Commit b953827

Browse files
committed
feat(centrage): déplace la carte de manière imperceptible pour l'utilisateur et reactive l'interaction #17
1 parent 8bfbe04 commit b953827

File tree

2 files changed

+24
-45
lines changed

2 files changed

+24
-45
lines changed

src/hooks/Store/useMapStore.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,6 @@ const useMapStore = create<MapStore>((set, get) => ({
3737
console.log(interaction);
3838
});
3939

40-
// if (!mapInstance) {
41-
// console.error("Map instance is not set.");
42-
// return;
43-
// }
44-
45-
// // Remove all interactions first
46-
// mapInstance.removeInteraction(addSelectedProduitInteraction);
47-
// mapInstance.removeInteraction(addPolygonSelectionInteraction);
48-
// mapInstance.removeInteraction(addUploadSelectionInteraction);
49-
50-
// Add the appropriate interaction based on the selection mode
51-
// switch (selectionMode) {
52-
// case "polygon":
53-
// mapInstance.addInteraction(addPolygonSelectionInteraction);
54-
// break;
55-
// case "click":
56-
// mapInstance.addInteraction(addSelectedProduitInteraction);
57-
// break;
58-
// default:
59-
// console.warn("Unknown selection mode:", selectionMode);
60-
// }
6140
},
6241
}));
6342

src/utils/interactions/selectedClickInteraction.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)