2026-01-13 14:49:19 +01:00

122 lines
4.4 KiB
TypeScript

import type { Nip95Config } from '@/lib/configStorageTypes'
import { Nip95ConfigView } from './view'
import { addApi, onDragOver, onDragStart, onDrop, removeApi, toggleEnabled, updateUrl } from './controller'
type ViewProps = Parameters<typeof Nip95ConfigView>[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<ViewProps, 'apis' | 'loading' | 'error' | 'editingId' | 'newUrl' | 'showAddForm' | 'draggedId' | 'dragOverId'> {
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<ViewProps, 'onClearError' | 'onToggleAddForm' | 'onNewUrlChange' | 'onCancelAdd' | 'onAddApi'> {
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<ViewProps, 'onStartEditing' | 'onStopEditing' | 'onUpdateUrl' | 'onToggleEnabled' | 'onRemoveApi'> {
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<ViewProps, 'onDragStart' | 'onDragOver' | 'onDragLeave' | 'onDrop'> {
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,
}),
}
}