From b97bbfe0ed160159f65657de8444de1482fe21a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Peccini?= Date: Sun, 8 Feb 2026 08:36:54 +0000 Subject: [PATCH] =?UTF-8?q?fix(analyse):=20afficher=20les=20libell=C3=A9s?= =?UTF-8?q?=20au=20lieu=20des=20IDs=20dans=20la=20s=C3=A9lection=20fine=20?= =?UTF-8?q?des=20n=C5=93uds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problème: - Dans l'onglet Analyse, la sélection fine des nœuds affichait les clés techniques (ex: "Chine_geographique") au lieu des libellés lisibles (ex: "Chine") Solution: - Création de mappings bidirectionnels ID↔Label pour chaque niveau - Affichage des labels dans les multiselect pour l'utilisateur - Stockage et utilisation des IDs en interne pour la logique métier - Préservation de la compatibilité avec le système de persistance 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app/analyse/interface.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/app/analyse/interface.py b/app/analyse/interface.py index 4901ce5..8874656 100644 --- a/app/analyse/interface.py +++ b/app/analyse/interface.py @@ -140,6 +140,14 @@ def selectionner_noeuds( depart_nodes = [n for n in G.nodes() if niveaux_temp.get(n) == niveau_depart] arrivee_nodes = [n for n in G.nodes() if niveaux_temp.get(n) == niveau_arrivee] + # Créer un mapping ID -> Label pour l'affichage + depart_labels = {n: G.nodes[n].get("label", n) for n in depart_nodes} + arrivee_labels = {n: G.nodes[n].get("label", n) for n in arrivee_nodes} + + # Mapping inverse Label -> ID pour retrouver les IDs sélectionnés + depart_labels_inverse = {v: k for k, v in depart_labels.items()} + arrivee_labels_inverse = {v: k for k, v in arrivee_labels.items()} + # DEPARTS ------------------------------------- if "analyse_noeuds_depart" not in st.session_state: anciens_departs = [] @@ -152,13 +160,17 @@ def selectionner_noeuds( i += 1 st.session_state["analyse_noeuds_depart"] = anciens_departs - st.multiselect( + # Afficher les labels mais stocker les IDs + selected_labels_depart = st.multiselect( str(_("pages.analyse.filter_start_nodes")), - sorted(depart_nodes), - key="analyse_noeuds_depart" + sorted(depart_labels.values()), + default=[depart_labels.get(n, n) for n in st.session_state["analyse_noeuds_depart"] if n in depart_labels], + key="analyse_noeuds_depart_labels" ) - departs_selection = st.session_state["analyse_noeuds_depart"] + # Convertir les labels sélectionnés en IDs + departs_selection = [depart_labels_inverse.get(label, label) for label in selected_labels_depart] + st.session_state["analyse_noeuds_depart"] = departs_selection supprime_champ_statut("pages.analyse.filter_start_nodes") if departs_selection: @@ -177,13 +189,17 @@ def selectionner_noeuds( i += 1 st.session_state["analyse_noeuds_arrivee"] = anciens_arrivees - st.multiselect( + # Afficher les labels mais stocker les IDs + selected_labels_arrivee = st.multiselect( str(_("pages.analyse.filter_end_nodes")), - sorted(arrivee_nodes), - key="analyse_noeuds_arrivee" + sorted(arrivee_labels.values()), + default=[arrivee_labels.get(n, n) for n in st.session_state["analyse_noeuds_arrivee"] if n in arrivee_labels], + key="analyse_noeuds_arrivee_labels" ) - arrivees_selection = st.session_state["analyse_noeuds_arrivee"] + # Convertir les labels sélectionnés en IDs + arrivees_selection = [arrivee_labels_inverse.get(label, label) for label in selected_labels_arrivee] + st.session_state["analyse_noeuds_arrivee"] = arrivees_selection supprime_champ_statut("pages.analyse.filter_end_nodes") if arrivees_selection: