mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
Открытие диалога тянуло все сообщения разом: карточка несла messages без ограничения, а workspace перезапрашивал её каждые 3 секунды — тысяча реплик уезжала клиенту двадцать раз в минуту. Список диалогов приходил так же целиком и обновлялся раз в 4 секунды. Серверная часть: - api/pagination: единый контракт — страницы (page/pageSize/total/pageCount) и окно по курсору (keyset) с потолками размера; - карточка диалога больше не несёт сообщений ни в одном режиме; факт запроса контакта считает сервер, ленте для этого история не нужна; - GET /conversations/<id>/messages/ — окно истории: before — вверх по ленте, after — дельта после последнего показанного сообщения; - инбокс отдаётся окном по курсору с серверной сортировкой (активность или «ждущие первыми») и total по текущим фильтрам. Клиент: - useConversationHistory: хвост переписки при открытии, догрузка вверх, обновление дельтой вместо перезапроса всей ленты; - useHistoryScroll: лента держит низ, подгружает старые сообщения у верхней границы и сохраняет место чтения при вклейке; - useConversationList: окно инбокса, догрузка прокруткой, обновление головы списка без сброса прокрутки; - поиск, вкладка и сортировка списка переехали в параметры запроса — фильтровать окно в браузере было бы неправильно; - клавиатурная навигация вынесена в useDialogKeyboardNav. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>