diff --git a/Dev_Docs/Pending_Features/2026-05-19_1618_dm-список-и-поведение-enter-в-чате.md b/Dev_Docs/Pending_Features/2026-05-19_1618_dm-список-и-поведение-enter-в-чате.md new file mode 100644 index 0000000..71b50fe --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-05-19_1618_dm-список-и-поведение-enter-в-чате.md @@ -0,0 +1,24 @@ +# Личные сообщения: правая мета-колонка и Enter/Ctrl+Enter + +- Краткое описание: + - В списке `Личные сообщения` обновлена правая колонка карточки диалога: + - сверху отображается бейдж количества непрочитанных (если есть); + - снизу маленьким шрифтом отображается дата/время последнего сообщения; + - если сообщений нет, вместо времени отображается `-`. + - В экране чата нижний блок ввода закреплён (sticky) и остаётся на месте при прокрутке. + - В поле ввода чата изменено поведение клавиш: + - `Enter` отправляет сообщение; + - `Ctrl+Enter` добавляет перенос строки и не отправляет сообщение. + +- Что проверять: + - В карточках диалогов справа корректно показываются непрочитанные/время/прочерк. + - В чате нижний блок ввода не уезжает при прокрутке истории. + - `Enter` отправляет сообщение из textarea. + - `Ctrl+Enter` вставляет новую строку в textarea. + +- Ожидаемый результат: + - Список диалогов показывает полезную мета-информацию в стабильном формате. + - Ввод сообщений в чате работает в привычной схеме Enter/многострочность. + +- Статус: + - `pending` diff --git a/VERSION.properties b/VERSION.properties index c6613f1..f6a9b74 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.71 -server.version=1.2.65 +client.version=1.2.72 +server.version=1.2.66 diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index e5bc3a8..640c042 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -416,6 +416,16 @@ export function render({ navigate, route }) { const input = form.elements.message; autoResizeComposer(input); input?.addEventListener('input', () => autoResizeComposer(input)); + input?.addEventListener('keydown', async (event) => { + if (event.key !== 'Enter') return; + if (event.ctrlKey) return; + event.preventDefault(); + const text = String(input.value || '').trim(); + if (!text) return; + input.value = ''; + autoResizeComposer(input); + await sendTextMessage(text); + }); form.querySelector('#chat-voice-input')?.addEventListener('click', async () => { await openSpeechInputModal({ diff --git a/shine-UI/js/pages/messages-list.js b/shine-UI/js/pages/messages-list.js index b5b9391..814bd5c 100644 --- a/shine-UI/js/pages/messages-list.js +++ b/shine-UI/js/pages/messages-list.js @@ -11,6 +11,17 @@ import { loadCurrentRelations } from '../services/user-connections.js'; export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' }; +function formatChatRowTime(ts) { + const value = Number(ts || 0); + if (!Number.isFinite(value) || value <= 0) return '-'; + return new Intl.DateTimeFormat('ru-RU', { + day: '2-digit', + month: '2-digit', + hour: '2-digit', + minute: '2-digit', + }).format(new Date(value)); +} + export function render({ navigate }) { const screen = document.createElement('section'); screen.className = 'stack dm-screen dm-list-screen'; @@ -38,9 +49,9 @@ export function render({ navigate }) {
-