import { useMyBackgrounds } from '@/hooks/useMyBackgrounds' import { useVirtualBackground } from '@/hooks/useVirtualBackground' import { BackgroundDialog } from '@/components/room/BackgroundDialog' interface VirtualBackgroundControllerProps { /** Открыта ли модалка выбора; сам фон применяется независимо от этого. */ open: boolean onClose: () => void /** Аутентифицированный участник — только у него есть свои картинки (гость их иметь не может). */ canManageOwn: boolean } /** * Живёт ВНУТРИ `` и держит замену фона включённой всё время * пребывания в комнате. * * Почему это отдельный компонент, а не хук прямо в `RoomPage`: * `useVirtualBackground` читает локального участника через `useLocalParticipant`, * а тот берёт комнату из `RoomContext` — контекст создаётся самим * ``, и в теле `RoomPage` (которое этот элемент только * возвращает) его ещё нет. * * Компонент смонтирован ВСЁ время, пока модуль включён, а не только пока * открыта модалка: фон должен переживать закрытие окна выбора, выключение и * повторное включение камеры и смену устройства (см. докстринг хука). */ export function VirtualBackgroundController({ open, onClose, canManageOwn, }: VirtualBackgroundControllerProps) { const { items } = useMyBackgrounds(canManageOwn) const { backgroundKey, selectBackground, status } = useVirtualBackground(true, items) if (!open) return null return ( ) }