import streamlit as st import db def label_widget(video_name, preselected=None): """Widget multiselect labels avec création dynamique et réactivité.""" preselected = preselected or [] key_multiselect = f"labels_{video_name}" key_input = f"new_label_{video_name}" # --- Charger labels depuis DB --- labels = db.load_labels() # --- Initialisation session_state --- if key_multiselect not in st.session_state: st.session_state[key_multiselect] = preselected # --- Si "Autre…" dans sélection, afficher input --- current_selected = st.session_state[key_multiselect] if "Autre…" in current_selected: new_label = st.text_input("Entrer un label personnalisé", value="", key=key_input) if new_label.strip(): # Ajouter le nouveau label à la DB db.create_labels([new_label.strip()]) # Mettre à jour options avant de créer le multiselect labels = db.load_labels() # Remplacer "Autre…" par le nouveau label dans selection current_selected = [l for l in current_selected if l != "Autre…"] + [new_label.strip()] # MAINTENANT c'est sûr de passer current_selected comme default st.session_state[key_multiselect] = current_selected # --- Multiselect --- selected = st.multiselect( "Labels", options=labels + ["Autre…"], default=st.session_state[key_multiselect], key=key_multiselect ) # --- Sauvegarde --- if st.button("💾 Sauvegarder labels", key=f"save_{video_name}"): db.save_video_labels(video_name, selected) st.success(f"{len(selected)} label(s) enregistré(s) pour {video_name}") return selected