import type { RelayConfig } from '@/lib/configStorageTypes' import type { RelayManagerProps } from './RelayManager' import { addRelay, onDragOver, onDragStart, onDrop, removeRelay, toggleEnabled, updateUrl } from './controller' import type { RelayManagerViewProps } from './types' export function buildRelayManagerViewProps(params: { relays: RelayConfig[] loading: boolean error: string | null editingId: string | null newUrl: string showAddForm: boolean draggedId: string | null dragOverId: string | null setRelays: (value: RelayConfig[]) => void setLoading: (value: boolean) => void setError: (value: string | null) => void setEditingId: (value: string | null) => void setNewUrl: (value: string) => void setShowAddForm: (value: boolean | ((prev: boolean) => boolean)) => void setDraggedId: (value: string | null) => void setDragOverId: (value: string | null) => void onConfigChange: RelayManagerProps['onConfigChange'] }): RelayManagerViewProps { return { ...stateProps(params), ...formProps(params), ...relayActionProps(params), ...dragProps(params) } } function stateProps(params: { relays: RelayConfig[] loading: boolean error: string | null editingId: string | null newUrl: string showAddForm: boolean draggedId: string | null dragOverId: string | null }): Pick { return { relays: params.relays, loading: params.loading, error: params.error, editingId: params.editingId, newUrl: params.newUrl, showAddForm: params.showAddForm, draggedId: params.draggedId, dragOverId: params.dragOverId, } } function formProps(params: { newUrl: string setError: (value: string | null) => void setNewUrl: (value: string) => void setShowAddForm: (value: boolean | ((prev: boolean) => boolean)) => void setRelays: (value: RelayConfig[]) => void onConfigChange: RelayManagerProps['onConfigChange'] }): Pick { return { onClearError: () => params.setError(null), onToggleAddForm: () => params.setShowAddForm((prev) => !prev), onNewUrlChange: (value) => params.setNewUrl(value), onCancelAdd: () => { params.setShowAddForm(false) params.setNewUrl('') params.setError(null) }, onAddRelay: () => void addRelay({ newUrl: params.newUrl, setError: params.setError, setNewUrl: params.setNewUrl, setShowAddForm: params.setShowAddForm, setRelays: params.setRelays, onConfigChange: params.onConfigChange, }), } } function relayActionProps(params: { setRelays: (value: RelayConfig[]) => void setError: (value: string | null) => void setEditingId: (value: string | null) => void onConfigChange: RelayManagerProps['onConfigChange'] }): Pick { return { onStartEditing: (id) => params.setEditingId(id), onStopEditing: () => params.setEditingId(null), onUpdateUrl: (id, url) => void updateUrl({ id, url, setRelays: params.setRelays, setError: params.setError, setEditingId: params.setEditingId, onConfigChange: params.onConfigChange, }), onToggleEnabled: (id, enabled) => void toggleEnabled({ id, enabled, setRelays: params.setRelays, setError: params.setError, onConfigChange: params.onConfigChange }), onRemoveRelay: (id) => void removeRelay({ id, setRelays: params.setRelays, setError: params.setError, onConfigChange: params.onConfigChange }), } } function dragProps(params: { relays: RelayConfig[] draggedId: string | null setRelays: (value: RelayConfig[]) => void setDraggedId: (value: string | null) => void setDragOverId: (value: string | null) => void setError: (value: string | null) => void onConfigChange: RelayManagerProps['onConfigChange'] }): Pick { return { onDragStart: (e, id) => onDragStart({ e, id, setDraggedId: params.setDraggedId }), onDragOver: (e, id) => onDragOver({ e, id, setDragOverId: params.setDragOverId }), onDragLeave: () => params.setDragOverId(null), onDrop: (e, targetId) => void onDrop({ e, targetId, relays: params.relays, draggedId: params.draggedId, setRelays: params.setRelays, setDraggedId: params.setDraggedId, setDragOverId: params.setDragOverId, setError: params.setError, onConfigChange: params.onConfigChange, }), onDragEnd: () => params.setDraggedId(null), } }