|
|
|
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( |
|
'<h1 style="color: black;">المرشد التعليمي الذكي 🤖</h1>', |
|
unsafe_allow_html=True, |
|
) |
|
|
|
@staticmethod |
|
def render_footer() -> None: |
|
st.markdown( |
|
""" |
|
<div class="footer"> |
|
.هذا روبوت تعليمي ذكي وقد تختلف إجاباته في كل مرة. يرجى استخدامه كدليل أولي فقط |
|
</div> |
|
""", |
|
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) |
|
|