- Единый скролл вместо жёсткого max-height:35% на ЛС и flex:1 на каналах
(убран пустой провал под каналами)
- Секции-заголовки — компактные uppercase-подписи в стиле портала
- Строки ЛС и каналов выровнены по единому левому краю (0.75rem)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Списки каналов и ЛС сортируются по last_post_at (свежие сверху)
- При открытии чата автоматически выбирается самая свежая розмова — сразу
видны последние сообщения, а не пустой экран
- Поиск сообщений через Mattermost /teams/{id}/posts/search: строка поиска
над лентой, результаты списком (кто/канал/время/текст), клик открывает канал
- Выход из поиска при открытии канала и смене команды
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Аватар співрозмовника напроти особистого повідомлення (лівий список):
chatBuildChannelRow отримав опцію avatar; id співрозмовника ЛС резолвиться
в chatResolveDmLabel і підвантажує фото (chatApplyAvatar). Групові ЛС —
без фото, з ініціалами.
- Верхній перемикач «кімнат» — команди Mattermost (Офіс / Аптеки / Склад):
chatRenderTeamSwitcher/chatSelectTeam; chatRenderChannelList фільтрує канали
за обраною командою; за замовчуванням — перша команда. ЛС показуються завжди.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- chatApplyAvatar(el, userId): подгружает фото из Mattermost
/users/{id}/image (работает и для сотрудников, и для ботов) и накладывает
на кружок-аватар; до загрузки/при ошибке остаются инициалы. Кэш по userId.
- Применено в сообщениях (chatBuildMessageEl) и в пикере коллег
(chatRenderDmPickerList)
- Переиспользует существующий chatApiFetchBlob (Bearer-токен)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>