CreaRack-SL

MeetingRoomShell — Wrapper standalone del popup de videollamada (/reunion)

MeetingRoomShell

Archivo: src/components/widgets/MeetingRoomShell.tsx Introducido: s80 (22-05-2026) Sprint: s80

Descripción

MeetingRoomShell es el componente React que actúa de wrapper para la página standalone /reunion, montada como ventana popup independiente del navegador. Su responsabilidad es leer los parámetros de la URL (author, target, silent), inicializar el título del documento y renderizar MeetingRoom cubriendo el 100% del viewport del popup. Al cerrar la reunión (botón Colgar o tecla Esc), llama a window.close() para cerrar la ventana del navegador.

Responsabilidades

ResponsabilidadDetalle
Lectura de query paramsreadParams() extrae author, target y silent de window.location.search; SSR-safe (devuelve defaults si window no está disponible)
Título de ventanauseEffect → document.title = "Reunión · {author}" para que la barra de título del popup muestre el contexto
Montaje de MeetingRoomRenderiza <MeetingRoom author target silent onClose /> con los params leídos
Cierre del popuponClose callback ejecuta window.close() — singleton de ventana, sin coordinar con el WS

Query params aceptados

ParamTipoDefaultDescripción
authorstring'anon'Nombre del usuario que abre la reunión (Edu/Dani/Txell)
targetstring'Todos'Destinatario explícito de la convocatoria
silent'1'falseSi es '1', no anuncia al chat que el usuario se ha unido (caso «Unirme» a reunión ya convocada)

Relación con el flujo de apertura

TeamChat (botón Video / "Unirme")
  └─ openMeetingPopup(author, target, silent)
       └─ window.open('/reunion?author=...&target=...', 'crearack-meeting', 'popup=yes,...')
            └─ /reunion.astro  →  <MeetingRoomShell client:only="react" />
                                       └─ <MeetingRoom />

window.open usa el name 'crearack-meeting' como singleton: si ya hay una ventana popup viva con ese nombre, el navegador la refoca en vez de abrir otra. Esto impide duplicar sesiones WebRTC.

Notas de implementación

  • Usa useState<Params>(() => readParams()) con inicializador lazy para evitar tocar window en SSR, aunque la página usa client:only="react" (defensa barata).
  • El cleanup de tracks/peers cuando el usuario cierra el popup desde la barra de título del SO lo gestiona el propio MeetingRoom mediante sus listeners beforeunload + pagehide con navigator.sendBeacon. MeetingRoomShell no necesita manejar eso.

Archivo de ruta asociado

src/pages/reunion.astro — página standalone que usa AppLayout (globals.css + prefs de tema/acento) sin Sidebar ni BottomNav. Estilos globales html, body { height: 100vh; overflow: hidden; background: #0d0d0d } para que MeetingRoom pueda ocupar el viewport completo.


Véase también

  • [[entity—meeting—component—meeting-room]]
  • [[decision—20260522—meetingroom-popup-window]]
  • [[feature—workspace—webrtc-peer-to-peer]]
  • [[decision—20260522—webrtc-reemplaza-jitsi]]