fix(ui): обработка устаревшей сессии и корректировка индикаторов соединения

This commit is contained in:
AidarKC 2026-04-22 17:04:16 +03:00
parent 0159dd9074
commit 58bbf063ca
3 changed files with 47 additions and 3 deletions

View File

@ -1,6 +1,12 @@
import { renderHeader } from '../components/header.js'; import { renderHeader } from '../components/header.js';
import { directMessages } from '../mock-data.js'; import { directMessages } from '../mock-data.js';
import { getChatMessages, setContacts, state } from '../state.js'; import {
getChatMessages,
isSessionInvalidError,
setContacts,
state,
terminateCurrentSession,
} from '../state.js';
import { loadCurrentRelations } from '../services/user-connections.js'; import { loadCurrentRelations } from '../services/user-connections.js';
export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' }; export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' };
@ -103,6 +109,37 @@ export function render({ navigate }) {
status.className = 'status-line is-available'; status.className = 'status-line is-available';
status.textContent = `Загружено диалогов: ${rows.length}`; status.textContent = `Загружено диалогов: ${rows.length}`;
} catch (error) { } catch (error) {
if (isSessionInvalidError(error)) {
list.innerHTML = '';
status.className = 'status-line is-unavailable';
status.textContent = 'Сессия устарела.';
const card = document.createElement('div');
card.className = 'card stack';
const title = document.createElement('strong');
title.textContent = 'Сессия устарела';
const details = document.createElement('p');
details.className = 'meta-muted';
details.textContent = 'Ваша сессия больше не действует. Авторизуйтесь заново.';
const okBtn = document.createElement('button');
okBtn.type = 'button';
okBtn.className = 'primary-btn';
okBtn.textContent = 'ОК';
okBtn.addEventListener('click', async () => {
await terminateCurrentSession({
infoMessage: 'Ваша сессия устарела. Выполните вход заново.',
});
navigate('start-view');
});
card.append(title, details, okBtn);
list.append(card);
return;
}
list.innerHTML = ''; list.innerHTML = '';
const fail = document.createElement('div'); const fail = document.createElement('div');
fail.className = 'card meta-muted'; fail.className = 'card meta-muted';

View File

@ -621,11 +621,18 @@
position: relative; position: relative;
} }
.toolbar-btn-profile .toolbar-label-wrap {
padding-bottom: 10px;
}
.toolbar-connection-indicator { .toolbar-connection-indicator {
position: absolute;
left: 50%;
bottom: 2px;
transform: translateX(-50%);
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 3px; gap: 3px;
margin-top: 1px;
min-height: 9px; min-height: 9px;
} }

View File

@ -45,7 +45,7 @@ body {
position: absolute; position: absolute;
left: 12px; left: 12px;
right: 12px; right: 12px;
bottom: calc(74px + env(safe-area-inset-bottom)); bottom: calc(96px + env(safe-area-inset-bottom));
z-index: 5; z-index: 5;
border-radius: 11px; border-radius: 11px;
border: 1px solid rgba(133, 156, 201, 0.3); border: 1px solid rgba(133, 156, 201, 0.3);