"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { Loader2, Video } from "lucide-react" import { toast } from "sonner" import { MeetHeader } from "@/components/meet/meet-header" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { useCreateMeetRoom, useMeetConfig, useMeetRoomToken, } from "@/lib/api/hooks/use-meet-queries" import { meetRoomPath } from "@/lib/meet/meet-url" export function MeetLobby() { const router = useRouter() const { data: config, isLoading } = useMeetConfig() const createRoom = useCreateMeetRoom() const roomToken = useMeetRoomToken() const [roomName, setRoomName] = useState("") const [joinRoom, setJoinRoom] = useState("") const pending = createRoom.isPending || roomToken.isPending const startInstantMeeting = async () => { try { const token = await createRoom.mutateAsync(undefined) router.push(meetRoomPath(token.room, token.token)) } catch { toast.error("Impossible de créer la réunion") } } const startNamedMeeting = async () => { const name = roomName.trim() if (!name) { toast.message("Indiquez un nom de salle") return } try { const token = await createRoom.mutateAsync({ name }) router.push(meetRoomPath(token.room, token.token)) } catch { toast.error("Impossible de créer la réunion") } } const joinExistingRoom = async () => { const room = joinRoom.trim() if (!room) { toast.message("Indiquez le code ou le nom de la salle") return } try { const token = await roomToken.mutateAsync(room) router.push(meetRoomPath(token.room, token.token)) } catch { toast.error("Impossible de rejoindre la salle") } } if (isLoading) { return (
Chargement UltiMeet…
) } if (!config?.enabled) { return (
) } return (

Visioconférence sécurisée

Réunions chiffrées hébergées sur votre infrastructure, intégrées à l'Agenda et à la suite Ulti.

setRoomName(e.target.value)} placeholder="equipe-produit" autoComplete="off" disabled={pending} onKeyDown={(e) => { if (e.key === "Enter") void startNamedMeeting() }} />
setJoinRoom(e.target.value)} placeholder="abc12345" autoComplete="off" disabled={pending} onKeyDown={(e) => { if (e.key === "Enter") void joinExistingRoom() }} />

{config.transcription_enabled ? `Transcription ${config.transcription_mode === "queued" ? "différée" : "en direct"} disponible.` : "Les liens Agenda ouvrent directement la salle correspondante."}

) }