import { useParams } from "react-router-dom"; import { useCallback, useState } from "react"; import { useSignaling } from "../hooks/useSignaling"; import { useStore } from "../stores/useStore"; import { useProfileStore } from "../stores/useProfileStore"; import PeerList from "../components/PeerList"; import DropZone from "../components/DropZone"; import TransferProgress from "../components/TransferProgress"; import TextShareModal from "../components/TextShareModal"; import ReceiveDialog from "../components/ReceiveDialog"; import ProfileSetup from "../components/ProfileSetup"; export default function JoinRoom() { const { code } = useParams<{ code: string }>(); const isSetUp = useProfileStore((s) => s.isSetUp); if (!isSetUp) { return {}} />; } return ; } function JoinRoomConnected({ code }: { code?: string }) { const { sendFiles, sendText, acceptTransfer, rejectTransfer } = useSignaling(code); const { deviceName, avatar } = useProfileStore(); const [showProfileEdit, setShowProfileEdit] = useState(false); const selectedPeerId = useStore((s) => s.selectedPeerId); const showTextModal = useStore((s) => s.showTextModal); const incomingRequest = useStore((s) => s.incomingRequest); const error = useStore((s) => s.error); const setSelectedPeerId = useStore((s) => s.setSelectedPeerId); const setShowTextModal = useStore((s) => s.setShowTextModal); const setError = useStore((s) => s.setError); const handlePeerSelect = useCallback( (peerId: string) => { setSelectedPeerId(selectedPeerId === peerId ? null : peerId); }, [selectedPeerId, setSelectedPeerId], ); const handleFilesSelected = useCallback( (files: File[]) => { if (!selectedPeerId) return; sendFiles(selectedPeerId, files); }, [selectedPeerId, sendFiles], ); const handleSendText = useCallback( (text: string) => { if (!selectedPeerId) return; sendText(selectedPeerId, text); }, [selectedPeerId, sendText], ); const handleAcceptTransfer = useCallback(() => { if (incomingRequest) { if (incomingRequest.text && incomingRequest.files.length === 0) { navigator.clipboard.writeText(incomingRequest.text); useStore.getState().setIncomingRequest(null); } else { acceptTransfer(incomingRequest.peerId); } } }, [incomingRequest, acceptTransfer]); const handleRejectTransfer = useCallback(() => { if (incomingRequest) { rejectTransfer(incomingRequest.peerId); } }, [incomingRequest, rejectTransfer]); return (
Public room

AnyDrop

{code?.toUpperCase()}

{error && (
{error}
)}
Room peers

Who's here

{selectedPeerId && (
Compose

Drop files or send text

)}
Activity
End-to-end encrypted · Nothing transits the server Home →
{showProfileEdit && ( setShowProfileEdit(false)} /> )} {showTextModal && selectedPeerId && ( setShowTextModal(false)} /> )} {incomingRequest && ( )}
); }