import type { Nip95Config } from '@/lib/configStorageTypes' import { Nip95ConfigView } from './view' import { addApi, onDragOver, onDragStart, onDrop, removeApi, toggleEnabled, updateUrl } from './controller' type ViewProps = Parameters[0] export function createNip95ConfigViewProps(params: { apis: Nip95Config[] loading: boolean error: string | null editingId: string | null newUrl: string showAddForm: boolean draggedId: string | null dragOverId: string | null setApis: (value: Nip95Config[]) => 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: (() => void) | undefined }): ViewProps { return { ...baseStateProps(params), ...formHandlers(params), ...apiHandlers(params), ...dragHandlers(params) } } function baseStateProps(params: { apis: Nip95Config[] loading: boolean error: string | null editingId: string | null newUrl: string showAddForm: boolean draggedId: string | null dragOverId: string | null }): Pick { return { apis: params.apis, loading: params.loading, error: params.error, editingId: params.editingId, newUrl: params.newUrl, showAddForm: params.showAddForm, draggedId: params.draggedId, dragOverId: params.dragOverId, } } function formHandlers(params: { newUrl: string setApis: (value: Nip95Config[]) => void setError: (value: string | null) => void setNewUrl: (value: string) => void setShowAddForm: (value: boolean | ((prev: boolean) => boolean)) => void onConfigChange: (() => void) | undefined }): 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) }, onAddApi: () => void addApi({ newUrl: params.newUrl, setError: params.setError, setNewUrl: params.setNewUrl, setShowAddForm: params.setShowAddForm, setApis: params.setApis, onConfigChange: params.onConfigChange, }), } } function apiHandlers(params: { setApis: (value: Nip95Config[]) => void setError: (value: string | null) => void setEditingId: (value: string | null) => void onConfigChange: (() => void) | undefined }): Pick { return { onStartEditing: (id) => params.setEditingId(id), onStopEditing: () => params.setEditingId(null), onUpdateUrl: (id, url) => void updateUrl({ id, url, setError: params.setError, setEditingId: params.setEditingId, setApis: params.setApis, onConfigChange: params.onConfigChange }), onToggleEnabled: (id, enabled) => void toggleEnabled({ id, enabled, setError: params.setError, setApis: params.setApis, onConfigChange: params.onConfigChange }), onRemoveApi: (id) => void removeApi({ id, setError: params.setError, setApis: params.setApis, onConfigChange: params.onConfigChange }), } } function dragHandlers(params: { apis: Nip95Config[] draggedId: string | null setApis: (value: Nip95Config[]) => void setDraggedId: (value: string | null) => void setDragOverId: (value: string | null) => void setError: (value: string | null) => void onConfigChange: (() => void) | undefined }): 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, apis: params.apis, draggedId: params.draggedId, setApis: params.setApis, setDraggedId: params.setDraggedId, setDragOverId: params.setDragOverId, setError: params.setError, onConfigChange: params.onConfigChange, }), } }