from PySide6.QtWidgets import QWidget, QListWidget, QVBoxLayout, QLabel, QListWidgetItem from PySide6.QtCore import Qt from typing import List from app.core.models.chat_models import PrivateChatListItem class ChatListView(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): """Инициализирует пользовательский интерфейс.""" layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) self.chat_list = QListWidget() self.chat_list.setStyleSheet("QListWidget { border: none; }") layout.addWidget(self.chat_list) # Изначальное состояние self.show_placeholder_message("Загрузка чатов...") def show_placeholder_message(self, text): """Очищает список и показывает одно сообщение (например, "Загрузка..." или "Чатов нет").""" self.chat_list.clear() item = QListWidgetItem(text) item.setTextAlignment(Qt.AlignCenter) self.chat_list.addItem(item) def populate_chats(self, chat_items: List[PrivateChatListItem]): """ Заполняет список чатов данными, полученными от сервера. """ self.chat_list.clear() if not chat_items: self.show_placeholder_message("У вас пока нет чатов") return for chat in chat_items: # Определяем имя собеседника if chat.chat_type == "self": companion_name = "Избранное" elif chat.chat_data and 'login' in chat.chat_data: companion_name = chat.chat_data['login'] else: companion_name = "Неизвестный" # Получаем текст последнего сообщения if chat.last_message and chat.last_message.content: last_msg = chat.last_message.content else: last_msg = "Нет сообщений" # Создаем кастомный виджет для элемента списка (можно будет улучшить) # Пока просто текстом item_text = f"{companion_name}\n{last_msg}" list_item = QListWidgetItem(item_text) self.chat_list.addItem(list_item)