diff --git a/web/src/App.tsx b/web/src/App.tsx index d4b1f23..c42f5a8 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -222,7 +222,11 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) { /** Se incrementa cuando cambia un archivo, para que el mapa del back recargue. */ const [apiVersion, setApiVersion] = useState(0); /** Qué tab del escenario se ve. */ - const [tab, setTab] = useState<"app" | "back">("app"); + /** + * Qué se está viendo. "chat" solo existe en pantallas chicas, donde el chat + * no cabe al lado del preview y pasa a ser una vista más. + */ + const [tab, setTab] = useState<"chat" | "app" | "back">("app"); /** * El chat colapsado deja el preview a pantalla completa. * @@ -651,6 +655,13 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) { * cuando una sala vacía deja de estarlo. */ useEffect(() => { + // Sin sala no hay nada que preguntar: la URL salía con "null" dentro y el + // server contestaba 404 en cada visita a la Sala vacía. + if (!roomId) { + setSePuedeExportar(false); + return; + } + let cancelado = false; fetch(`${SERVER_URL}/rooms/${roomId}/export/estado`) .then((r) => (r.ok ? r.json() : null)) @@ -668,7 +679,9 @@ function Sala({ roomId, name }: { roomId: string | null; name: string }) { }, [roomId, histVersion]); return ( -
+ // `ver-*` es lo que el CSS usa en móvil para decidir qué se muestra. En + // escritorio se ignora: ahí el chat y el preview conviven en dos columnas. +
{/* Chat izquierda */}