import { Fragment } from 'react'; import { Button } from './Button'; import { IconX } from './icons'; import type { ModelAlias } from '@/types'; interface ModelEntry { name: string; alias: string; } interface ModelInputListProps { entries: ModelEntry[]; onChange: (entries: ModelEntry[]) => void; addLabel: string; disabled?: boolean; namePlaceholder?: string; aliasPlaceholder?: string; } export const modelsToEntries = (models?: ModelAlias[]): ModelEntry[] => { if (!Array.isArray(models) || models.length === 0) { return [{ name: '', alias: '' }]; } return models.map((m) => ({ name: m.name || '', alias: m.alias || '' })); }; export const entriesToModels = (entries: ModelEntry[]): ModelAlias[] => { return entries .filter((entry) => entry.name.trim()) .map((entry) => { const model: ModelAlias = { name: entry.name.trim() }; const alias = entry.alias.trim(); if (alias && alias !== model.name) { model.alias = alias; } return model; }); }; export function ModelInputList({ entries, onChange, addLabel, disabled = false, namePlaceholder = 'model-name', aliasPlaceholder = 'alias (optional)' }: ModelInputListProps) { const currentEntries = entries.length ? entries : [{ name: '', alias: '' }]; const updateEntry = (index: number, field: 'name' | 'alias', value: string) => { const next = currentEntries.map((entry, idx) => (idx === index ? { ...entry, [field]: value } : entry)); onChange(next); }; const addEntry = () => { onChange([...currentEntries, { name: '', alias: '' }]); }; const removeEntry = (index: number) => { const next = currentEntries.filter((_, idx) => idx !== index); onChange(next.length ? next : [{ name: '', alias: '' }]); }; return (
{currentEntries.map((entry, index) => (
updateEntry(index, 'name', e.target.value)} disabled={disabled} /> updateEntry(index, 'alias', e.target.value)} disabled={disabled} />
))}
); }