import type { ReactNode } from 'react' import { Plus, Trash2, ChevronUp, ChevronDown } from 'lucide-react' import { cn } from '@/lib/utils' interface DynamicArrayFieldProps { items: T[] onAdd: () => void onRemove: (index: number) => void onReorder?: (fromIndex: number, toIndex: number) => void renderItem: (item: T, index: number) => ReactNode addLabel?: string maxItems?: number minItems?: number className?: string } export function DynamicArrayField({ items, onAdd, onRemove, onReorder, renderItem, addLabel = 'Add Item', maxItems, minItems = 0, className }: DynamicArrayFieldProps) { const canAdd = maxItems === undefined || items.length < maxItems const canRemove = items.length > minItems const handleMoveUp = (index: number) => { if (onReorder && index > 0) { onReorder(index, index - 1) } } const handleMoveDown = (index: number) => { if (onReorder && index < items.length - 1) { onReorder(index, index + 1) } } return (
{items.map((item, index) => (
{/* Reorder buttons */} {onReorder && items.length > 1 && (
)} {/* Item content */}
{renderItem(item, index)}
{/* Remove button */} {canRemove && ( )}
))} {/* Add button */} {canAdd && ( )} {/* Empty state */} {items.length === 0 && !canAdd && (

No items

)}
) } export default DynamicArrayField