# ui_components.py
import streamlit as st
from typing import List, Dict
from config import Config
from chat_state import ChatState
from chat_manager import ChatManager
from chat_service import ChatService
class UIComponents:
@staticmethod
def setup_page(config: Config) -> None:
st.set_page_config(**config.PAGE_CONFIG)
st.markdown(config.STYLES, unsafe_allow_html=True)
@staticmethod
def render_header() -> None:
st.markdown(
'
المرشد التعليمي الذكي 🤖
',
unsafe_allow_html=True,
)
@staticmethod
def render_footer() -> None:
st.markdown(
"""
""",
unsafe_allow_html=True,
)
@staticmethod
def render_sidebar(
chat_state: ChatState, chat_manager: ChatManager, chat_service: ChatService
) -> None:
with st.sidebar:
st.title("إدارة المحادثات")
if st.button("محادثة جديدة 🆕"):
chat_state.temp_chat = chat_manager.create_new_chat()
chat_state.current_chat_id = None
chat_ids = list(chat_state.chat_history.keys())
if chat_ids:
chat_options = {
id: chat_service.get_chat_preview(chat_state.chat_history[id])
for id in chat_ids
}
chat_options["new"] = "محادثة جديدة 🆕"
selected_chat = st.selectbox(
"اختر محادثة 📚",
options=list(chat_options.keys()),
format_func=lambda x: chat_options[x],
index=(
len(chat_options) - 1
if chat_state.current_chat_id is None
else chat_ids.index(chat_state.current_chat_id)
),
)
if selected_chat == "new":
chat_state.temp_chat = chat_manager.create_new_chat()
chat_state.current_chat_id = None
elif selected_chat != chat_state.current_chat_id:
chat_state.current_chat_id = selected_chat
chat_state.temp_chat = None
if chat_state.current_chat_id:
if st.button("حذف المحادثة الحالية 🗑️"):
chat_state.delete_chat_id = chat_state.current_chat_id
if chat_state.delete_chat_id:
chat_manager.delete_chat(chat_state.delete_chat_id, chat_state)