Предварительная работа для очереди рук и принудительного мьюта (B1/B2): build_join кладёт is_organizer:true в метаданные токена организатора (создатель мгновенной конференции и владелец при обычном входе). Метаданные токена — только подсказка для UI (см. предупреждение в докстринге build_join), любое серверное действие организатора обязано перепроверяться по conference.owner_id в БД — так и сделано в mute_participant (B2). На фронте — общий парсер метаданных участника (lib/participantMetadata.ts, переиспользован в RoomParticipantTile вместо локальной копии) и хук useIsOrganizer (читает подсказку для локального участника через useLocalParticipant — вызывается только внутри LiveKitRoom).
14 lines
784 B
TypeScript
14 lines
784 B
TypeScript
import { useLocalParticipant } from '@livekit/components-react'
|
|
import { parseParticipantMetadata } from '@/lib/participantMetadata'
|
|
|
|
/**
|
|
* Организатор ли ТЕКУЩИЙ (локальный) участник комнаты — читает подсказку
|
|
* `is_organizer` из метаданных собственного LiveKit-токена (см.
|
|
* `lib/participantMetadata.ts`). Только для UI (показать/скрыть кнопки
|
|
* организатора) — серверные действия перепроверяют права по БД сами.
|
|
*/
|
|
export function useIsOrganizer(): boolean {
|
|
const { localParticipant } = useLocalParticipant()
|
|
return Boolean(parseParticipantMetadata(localParticipant.metadata).is_organizer)
|
|
}
|