import { useState } from 'react' import { useWaste } from '../store' import type { PeerStatus } from '../store' import { FolderPicker } from './FolderPicker' import { Transfers } from './Transfers' function makeYawCard(id: string, alias: string): string { const nick = encodeURIComponent(alias.trim().slice(0, 40)) return nick ? `yaw:${id}?n=${nick}` : `yaw:${id}` } function connDot(status: PeerStatus | undefined): { color: string; label: string } { const ct = status?.candidateType const cs = status?.connState if (cs === 'failed' || cs === 'closed') return { color: '#e06060', label: 'failed' } if (cs === 'connecting' || cs === 'new') return { color: '#c8a020', label: 'connecting…' } if (ct === 'relay') return { color: '#c8a020', label: 'relayed (TURN)' } if (ct === 'srflx') return { color: '#60c060', label: 'NAT punched' } if (ct === 'host') return { color: '#60c060', label: 'direct (LAN)' } if (cs === 'connected') return { color: '#60c060', label: 'connected' } return { color: 'var(--muted)', label: 'unknown' } } function formatTs(ts: number | undefined): string { if (!ts) return '—' return new Date(ts).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }) } export function Sidebar() { const { localPeer, masterId, masterAlias, networks, activeNetworkId, activeRoom, connectedPeers, peerStatus, setActiveRoom, setActiveNetwork, messages, browseFiles, sendFileTo, adapterMode, customRooms, createRoom, } = useWaste() const [addingRoom, setAddingRoom] = useState(false) const [newRoomName, setNewRoomName] = useState('') const netCustomRooms = activeNetworkId ? (customRooms[activeNetworkId] ?? []) : [] const rooms = ['general', ...netCustomRooms] Object.keys(messages).forEach(r => { if (r.startsWith('dm:') && !rooms.includes(r)) rooms.push(r) }) function submitNewRoom(e: React.FormEvent) { e.preventDefault() if (newRoomName.trim()) createRoom(newRoomName) setNewRoomName('') setAddingRoom(false) } const displayAlias = localPeer?.alias ?? masterAlias ?? '' const displayId = localPeer?.id ?? masterId ?? '' const card = displayId ? makeYawCard(displayId, displayAlias) : null function openDM(peerId: string) { setActiveRoom(`dm:${peerId}`) } function requestFiles(peerId: string) { browseFiles(peerId) } return ( ) }