# controllers.py import streamlit as st import db def label_widget(video, preselected=None): """Widget multiselect pour labels, avec création dynamique.""" preselected = preselected or [] key_multiselect = f"labels_{video.id}" key_input = f"new_label_{video.id}" labels = db.load_labels() if key_multiselect not in st.session_state: st.session_state[key_multiselect] = preselected current_selected = st.session_state[key_multiselect] # Si "Autre…" dans sélection, afficher input if "Autre…" in current_selected: new_label = st.text_input("Entrer un label personnalisé", value="", key=key_input) if new_label.strip(): db.create_labels([new_label.strip()]) labels = db.load_labels() current_selected = [l for l in current_selected if l != "Autre…"] + [new_label.strip()] st.session_state[key_multiselect] = current_selected selected = st.multiselect( "Labels", options=labels + ["Autre…"], default=st.session_state[key_multiselect], key=key_multiselect, ) if st.button("💾 Sauvegarder labels", key=f"save_{video.id}"): video.save_labels(selected) st.success(f"{len(selected)} label(s) enregistré(s) pour {video.mp4_file_name}") return selected