import type { RelayConfig } from '@/lib/configStorageTypes' import { t } from '@/lib/i18n' import { DragHandle } from '../DragHandle' import { getRelayCardClassName } from './controller' export function RelayCard(params: { relay: RelayConfig isEditing: boolean draggedId: string | null dragOverId: string | null onStartEditing: (id: string) => void onStopEditing: () => void onUpdateUrl: (id: string, url: string) => void onToggleEnabled: (id: string, enabled: boolean) => void onRemoveRelay: (id: string) => void onDragStart: (e: React.DragEvent, id: string) => void onDragOver: (e: React.DragEvent, id: string) => void onDragLeave: () => void onDrop: (e: React.DragEvent, targetId: string) => void onDragEnd: () => void }): React.ReactElement { return (
params.onDragOver(e, params.relay.id)} onDragLeave={params.onDragLeave} onDrop={(e) => params.onDrop(e, params.relay.id)} className={`bg-cyber-dark border rounded p-4 space-y-3 transition-all ${getRelayCardClassName(params.relay.id, params.draggedId, params.dragOverId)}`} >
{params.relay.lastSyncDate ? : null}
) } function DragGrip(params: { relayId: string onDragStart: (e: React.DragEvent, id: string) => void onDragEnd: () => void }): React.ReactElement { return (
params.onDragStart(e, params.relayId)} onDragEnd={params.onDragEnd} onMouseDown={(e) => e.stopPropagation()} >
) } function UrlCell(params: { relay: RelayConfig isEditing: boolean onStartEditing: (id: string) => void onStopEditing: () => void onUpdateUrl: (id: string, url: string) => void }): React.ReactElement { if (params.isEditing) { return } return (
params.onStartEditing(params.relay.id)} title={t('settings.relay.list.editUrl')}> {params.relay.url}
) } function UrlEditor(params: { relay: RelayConfig; onStop: () => void; onUpdate: (id: string, url: string) => void }): React.ReactElement { return ( { const next = e.target.value if (next !== params.relay.url) { params.onUpdate(params.relay.id, next) } else { params.onStop() } }} onKeyDown={(e) => { if (e.key === 'Enter') { e.currentTarget.blur() } else if (e.key === 'Escape') { params.onStop() } }} className="w-full px-3 py-2 bg-cyber-darker border border-neon-cyan/50 rounded text-cyber-light focus:border-neon-cyan focus:outline-none" autoFocus /> ) } function LastSync(params: { lastSyncDate: number }): React.ReactElement { return (
{t('settings.relay.list.lastSync')}: {new Date(params.lastSyncDate).toLocaleString()}
) } function ActionsCell(params: { relay: RelayConfig; onToggleEnabled: (id: string, enabled: boolean) => void; onRemoveRelay: (id: string) => void }): React.ReactElement { return (
) }