'use client'; import { useRouter, useSearchParams } from 'next/navigation'; import React, { Suspense, useState } from 'react'; import { encodePassphrase, generateRoomId, randomString } from '@/lib/client-utils'; import styles from '../styles/Home.module.css'; function Tabs(props: React.PropsWithChildren<{}>) { const searchParams = useSearchParams(); const tabIndex = searchParams?.get('tab') === 'custom' ? 1 : 0; const router = useRouter(); function onTabSelected(index: number) { const tab = index === 1 ? 'custom' : 'demo'; router.push(`/?tab=${tab}`); } let tabs = React.Children.map(props.children, (child, index) => { return ( ); }); return (
{tabs}
{/* @ts-ignore */} {props.children[tabIndex]}
); } function DemoMeetingTab(props: { label: string }) { const router = useRouter(); const [e2ee, setE2ee] = useState(false); const [sharedPassphrase, setSharedPassphrase] = useState(randomString(64)); const startMeeting = () => { if (e2ee) { router.push(`/rooms/${generateRoomId()}#${encodePassphrase(sharedPassphrase)}`); } else { router.push(`/rooms/${generateRoomId()}`); } }; return (

Try LiveKit Meet for free with our live demo project.

setE2ee(ev.target.checked)} >
{e2ee && (
setSharedPassphrase(ev.target.value)} />
)}
); } function CustomConnectionTab(props: { label: string }) { const router = useRouter(); const [e2ee, setE2ee] = useState(false); const [sharedPassphrase, setSharedPassphrase] = useState(randomString(64)); const onSubmit: React.FormEventHandler = (event) => { event.preventDefault(); const formData = new FormData(event.target as HTMLFormElement); const serverUrl = formData.get('serverUrl'); const token = formData.get('token'); if (e2ee) { router.push( `/custom/?liveKitUrl=${serverUrl}&token=${token}#${encodePassphrase(sharedPassphrase)}`, ); } else { router.push(`/custom/?liveKitUrl=${serverUrl}&token=${token}`); } }; return (

Connect LiveKit Meet with a custom server using LiveKit Cloud or LiveKit Server.