From 2bd478083f376383fd18bc7da7d442e697045954 Mon Sep 17 00:00:00 2001 From: pstruebi Date: Mon, 10 Mar 2025 15:18:08 +0100 Subject: [PATCH] fix endpint and language selection and deletion --- backend_model.py | 3 +++ frontend.py | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/backend_model.py b/backend_model.py index 475af6c..c5b1cc6 100644 --- a/backend_model.py +++ b/backend_model.py @@ -4,6 +4,8 @@ from enum import Enum from pydantic import BaseModel, Field from typing import Optional, List +ENDPOINTS = [f"endpoint{i}" for i in range(1, 4)] # Predefined endpoints + class AnnouncementStates(Enum): IDLE: str = "Ready" TRANSLATING: str = "Translating" @@ -29,6 +31,7 @@ class AnnouncementProgress(BaseModel): class AnnouncementSystem: def __init__(self): + self.available_endpoints = ENDPOINTS self.current_process = AnnouncementProgress( details=AnnouncementDetails( text="", diff --git a/frontend.py b/frontend.py index b7344fe..d1a2ca6 100644 --- a/frontend.py +++ b/frontend.py @@ -1,4 +1,6 @@ import streamlit as st +from backend_model import announcement_system, AnnouncementStates +import time # Configuration defaults DEFAULT_LANGUAGES = ["German", "English"] @@ -19,8 +21,6 @@ if "endpoint_groups" not in st.session_state: } ] -from backend_model import announcement_system, AnnouncementStates -import time def show_announcement_status(): if announcement_system.current_process.current_state != AnnouncementStates.IDLE: @@ -120,23 +120,46 @@ with st.sidebar: value=group["name"], key=f"group_name_{i}" ) - group["endpoints"] = st.text_input( + # Initialize session state for this group's endpoints if not already set + if f"endpoints_{i}" not in st.session_state: + st.session_state[f"endpoints_{i}"] = group["endpoints"] + + # Use the multiselect with session state + selected_endpoints = st.multiselect( f"Endpoints {i+1}", - value=", ".join(group["endpoints"]), - key=f"endpoints_{i}" - ).split(", ") + options=announcement_system.available_endpoints, + default=st.session_state[f"endpoints_{i}"], + key=f"endpoints_select_{i}" + ) + + # Update both session state and group endpoints when changed + if selected_endpoints != st.session_state[f"endpoints_{i}"]: + st.session_state[f"endpoints_{i}"] = selected_endpoints + group["endpoints"] = selected_endpoints + st.rerun() # Force immediate update with cols[1]: if st.button("❌", key=f"remove_{i}"): del st.session_state.endpoint_groups[i] st.rerun() - group["languages"] = st.multiselect( + # Initialize session state for this group's languages if not already set + if f"languages_{i}" not in st.session_state: + st.session_state[f"languages_{i}"] = group["languages"] + + # Use the multiselect with session state + selected_languages = st.multiselect( f"Languages {i+1}", options=DEFAULT_LANGUAGES + OPTIONAL_LANGUAGES, - default=group["languages"], - key=f"lang_{i}" + default=st.session_state[f"languages_{i}"], + key=f"languages_select_{i}" ) + + # Update both session state and group languages when changed + if selected_languages != st.session_state[f"languages_{i}"]: + st.session_state[f"languages_{i}"] = selected_languages + group["languages"] = selected_languages + st.rerun() # Force immediate update st.markdown("---") if st.button("➕ Add Group"):