fix(aep-v1.1): bugs E2E M1 M2 M3 L1 L2 L3

M1 - Chips a11y : converti les <span> chips mobile (criteres, types,
echelle, fonctions) en <button type=button> avec aria-pressed pour
support clavier et lecteurs d'ecran (sidebar desktop deja en boutons).

M2 - Effacer les filtres ne vide pas la search : resetFilters() reset
maintenant aussi mobileSearch dans pratiques-regeneratives.vue et
index.vue.

M3 - FAB Soutenir overlap chip Agence : repositionne le FAB Soutenir
en stack vertical avec le FAB Chatbot (right: 16px, bottom: 84px) au
lieu de left: 16px, bottom: 68px. Evite l'overlap avec les chips de
la bottom-sheet sur viewport intermediaire.

L1 - /fiche/[id] introuvable pour pratiques : ajoute un fallback dans
pages/fiche/[id].vue qui detecte si l'id correspond a une pratique
regenerative et redirige vers /pratique/[id] (navigateTo replace).

L2 - Label retour incorrect sur /proposer-pratique : harmonise en
'Retour aux pratiques regeneratives'.

L3 - Map ne fitBounds pas apres filtre : EuropeMap et NavMap appellent
maintenant fitBounds(bounds, padding 40px, maxZoom 10) quand la liste
filtree contient 1 a 15 markers. Saute le tout premier rendu pour
preserver la vue initiale.
This commit is contained in:
Jules Neny
2026-04-30 02:31:31 +02:00
parent 914759a815
commit 682d5d337e
7 changed files with 88 additions and 11 deletions

View File

@@ -461,10 +461,12 @@ const jaugePct = computed(() => {
}
/* ── FAB mobile soutenir ─────────────────────────────────────────────────── */
/* Stack vertical avec le FAB Chatbot a droite (evite l'overlap avec les chips
sidebar mobile sur viewport intermediaire ~880px - bug E2E M3) */
.fab-soutenir {
position: fixed;
bottom: 68px; /* au-dessus du FAB chatbot à 24px du bas + 48px de hauteur */
left: 16px;
bottom: 84px; /* au-dessus du FAB chatbot a bottom-6 (24px) + 48px de hauteur + 12px gap */
right: 16px;
z-index: 1000;
width: 44px;
height: 44px;

View File

@@ -123,6 +123,12 @@ async function initMap() {
updateMarkers(L)
}
// Vue initiale (centre Europe + zoom 4) - sauvegardee pour reset
const INITIAL_CENTER: [number, number] = [50.0, 10.0]
const INITIAL_ZOOM = 4
let initialFitDone = false
function updateMarkers(L?: any) {
if (!mapInstance || !clusterGroup) return
const leaflet = L || (window as any).L
@@ -158,6 +164,29 @@ function updateMarkers(L?: any) {
markers.set(org.id, marker)
clusterGroup.addLayer(marker)
})
// Bug E2E L3 : recadrer la carte sur les resultats filtres
// Conditions : 1+ resultat, et au moins 1 marker hors viewport actuel.
// On evite de recadrer au tout premier rendu (laisser la vue initiale).
if (orgsWithCoords.length > 0 && initialFitDone) {
try {
const bounds = leaflet.latLngBounds(
orgsWithCoords.map((o) => [o.lat!, o.lng!])
)
// On recadre uniquement si la liste filtree est restreinte
// (evite un recadrage permanent quand toutes les fiches sont la).
if (orgsWithCoords.length <= 15) {
mapInstance.fitBounds(bounds, {
padding: [40, 40],
maxZoom: 10,
animate: true,
})
}
} catch (e) {
console.warn('[EuropeMap] fitBounds echoue:', e)
}
}
initialFitDone = true
}
watch(

View File

@@ -128,6 +128,8 @@ async function initMap() {
updateMarkers(L)
}
let initialFitDone = false
function updateMarkers(L?: any) {
if (!mapInstance || !clusterGroup) return
const leaflet = L || (window as any).L
@@ -168,6 +170,25 @@ function updateMarkers(L?: any) {
markers.set(org.Id, marker)
clusterGroup.addLayer(marker)
})
// Bug E2E L3 : recadrer la carte sur les resultats filtres
if (orgsWithCoords.length > 0 && initialFitDone) {
try {
const bounds = leaflet.latLngBounds(
orgsWithCoords.map((o: any) => [o.latitude!, o.longitude!])
)
if (orgsWithCoords.length <= 15) {
mapInstance.fitBounds(bounds, {
padding: [40, 40],
maxZoom: 10,
animate: true,
})
}
} catch (e) {
console.warn('[NavMap] fitBounds echoue:', e)
}
}
initialFitDone = true
}
// Réagir aux changements de filtres (liste d'orgs)