From 3290eb5d07d5d7d779a9fe6f72a6594025ea2447 Mon Sep 17 00:00:00 2001 From: Max Ronzhin Date: Thu, 30 Jul 2026 00:23:18 +0300 Subject: [PATCH] =?UTF-8?q?feat(room):=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D1=86=D0=B8=D0=B8=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=20=D1=82=D0=B5=D1=85=D0=BD=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20room=5Fname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RoomTopbar рендерил `JoinOut.room_name` — техническое имя комнаты LiveKit вида `hC-Dmos9KEM`, которое туда попало по ошибке (перепутано с человекочитаемым title конференции). Теперь топбар получает `title` (из резолва номера/ссылки или из карточки конференции в лобби) и падает на «Конференция без названия», если организатор его не задал. Номер и slug остаются на своих местах — в инвайт-чипе и в адресе, где они нужны функционально. --- frontend/src/components/room/RoomTopbar.tsx | 13 ++++++++++--- frontend/src/pages/JoinPage.tsx | 2 +- frontend/src/pages/LobbyPage.tsx | 2 +- frontend/src/pages/RoomPage.tsx | 7 ++++--- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/room/RoomTopbar.tsx b/frontend/src/components/room/RoomTopbar.tsx index 77bd3cc..1b08acb 100644 --- a/frontend/src/components/room/RoomTopbar.tsx +++ b/frontend/src/components/room/RoomTopbar.tsx @@ -4,7 +4,14 @@ import { useState } from 'react' import { pluralizeParticipants } from '@/lib/pluralize' interface RoomTopbarProps { - roomName: string + /** + * Название конференции (`ConferenceOut.title`/`ResolveOut.title`) — + * `null`/не задано, если организатор его не указал. НЕ путать с + * `JoinOut.room_name` (техническое имя комнаты LiveKit вида `hC-Dmos9KEM`, + * которое сюда раньше и попадало по ошибке, см. задачу A6) — тот нужен + * только серверу и в UI показывать нечего. + */ + title: string | null /** Slug/номер конференции из адреса — для инвайт-чипа (копирование ссылки). */ slug?: string number?: string @@ -19,7 +26,7 @@ interface RoomTopbarProps { * тёмных токенов темы `room` (см. `--color-room-tile*`), без новых * цветов и форм. */ -export function RoomTopbar({ roomName, slug, number }: RoomTopbarProps) { +export function RoomTopbar({ title, slug, number }: RoomTopbarProps) { const participants = useParticipants() const [copied, setCopied] = useState(false) @@ -39,7 +46,7 @@ export function RoomTopbar({ roomName, slug, number }: RoomTopbarProps) { return (
-

{roomName}

+

{title ?? 'Конференция без названия'}

- +
{pip.mode === 'document' ? ( // Сцена сейчас рисуется в PiP-окне (через createPortal ниже) —