fix(analyse): afficher les libellés au lieu des IDs dans la sélection fine des nœuds

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 <noreply@anthropic.com>
This commit is contained in:
Stéphan Peccini 2026-02-08 08:36:54 +00:00
parent 273f409a55
commit b97bbfe0ed
Signed by: stephan
GPG Key ID: 3A9774E9CCBF3501

View File

@ -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: