прод: убрать ЛС-лабу (demo-чат, гость-доступ, isDemo, demo-avatars); мок→плейсхолдер

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pixel
2026-06-19 20:31:09 +03:00
co-authored by Claude Opus 4.8
parent 465792b2ab
commit 92791c77a9
12 changed files with 9 additions and 222 deletions
+8 -20
View File
@@ -3,7 +3,6 @@ import { state } from '../state.js';
import { renderUserAvatar } from '../components/avatar-image.js';
import { loadProfileSnapshot } from '../services/user-profile-params.js';
import { resolveDmVisualState } from './messages/dm-visual-resolver.js';
import { getPreview, getUnread } from './messages/dm-lab-store.js';
import { makeProfileRoute } from '../services/shine-routes.js';
export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' };
@@ -80,14 +79,8 @@ export function render({ navigate, route }) {
const screen = document.createElement('section');
screen.className = 'dm-screen dm-list-screen';
// demo/lab: гость без сессии (маршрут /messages-list/lab или ?demo=1). В demo НЕ ходим в сеть за фото
// профиля — иначе висящие listUserParams не дают сети уйти в idle и ломают скриншоты (остаются initials).
const isDemo = route?.params?.mode === 'lab'
|| (typeof window !== 'undefined' && /[?&]demo=1(?:&|$)/.test(window.location.search || ''));
// Слева сверху — имя владельца аккаунта (на проде реальный логин; в demo — заглушка, НЕ «shine»,
// чтобы не дублировать центральный бренд «Shine»).
const login = String(state.session.login || '').trim() || 'Aidar007';
// Слева сверху — имя владельца аккаунта (реальный логин из сессии).
const login = String(state.session.login || '').trim();
// DM-шапка: grid 1fr auto 1fr (бренд слева, title строго по центру, «+» справа).
const head = document.createElement('header');
@@ -111,12 +104,10 @@ export function render({ navigate, route }) {
list.className = 'dm-list';
function renderRow(item) {
// В demo превью/непрочитанные берём из dm-lab-store (обновляются после отправки/открытия чата).
const resolverItem = isDemo ? { ...item, unreadCount: getUnread(item.id) } : item;
const v = resolveDmVisualState(resolverItem); // { tone, shining, confirmed, via, unread }
const v = resolveDmVisualState(item); // { tone, shining, confirmed, via, unread }
const cardVariant = v.tone === 'family' ? ' dm-card--family' : (v.tone === 'shining' ? ' dm-card--shining' : '');
const name = item.name || item.id;
const preview = (isDemo ? getPreview(item.id, item.preview || item.lastMessage || '') : (item.preview || item.lastMessage || '')) || 'Диалог пока пуст.';
const preview = (item.preview || item.lastMessage || '') || 'Диалог пока пуст.';
const row = document.createElement('article');
row.className = `dm-dialog-card${cardVariant}`;
@@ -199,14 +190,12 @@ export function render({ navigate, route }) {
// Аватар: фото/инициалы без кольца; у сияющего — свечение (класс is-shine).
const avWrap = document.createElement('div');
avWrap.className = `dm-av dm-av--${v.tone}${v.shining ? ' is-shine' : ''}`;
const avatarEl = createDmAvatar(item.id, { upgrade: !isDemo, name, photo: isDemo ? item.photo : '' });
const avatarEl = createDmAvatar(item.id, { upgrade: true, name });
avatarEl.classList.add('avatar');
avWrap.appendChild(avatarEl);
row.prepend(avWrap);
const go = () => navigate(isDemo
? `messages-list/lab/chat/${encodeURIComponent(item.id)}`
: `chat-view/${encodeURIComponent(item.id)}`);
const go = () => navigate(`chat-view/${encodeURIComponent(item.id)}`);
row.addEventListener('click', go);
row.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); go(); }
@@ -214,9 +203,8 @@ export function render({ navigate, route }) {
return row;
}
// Оффлайн-демо: список из мока directMessages (с семантическими полями).
// На проде источник заменяется на реальные relations (relationFlagsForTarget/shineConfirmed/shine) —
// карточки и резолвер не меняются.
// Источник списка — мок directMessages (плейсхолдер). На проде заменяется реальными
// relations/chats (relationFlagsForTarget/shineConfirmed/shine) — карточки и резолвер не меняются.
const items = Array.isArray(directMessages) ? directMessages : [];
if (!items.length) {
const empty = document.createElement('div');