import { CSS } from "@dnd-kit/utilities"; import { DndContext, closestCenter } from "@dnd-kit/core"; import { SortableContext, useSortable, verticalListSortingStrategy, } from "@dnd-kit/sortable"; import type { CSSProperties } from "react"; import type { Provider } from "@/types"; import type { AppId } from "@/lib/api"; import { useDragSort } from "@/hooks/useDragSort"; import { ProviderCard } from "@/components/providers/ProviderCard"; import { ProviderEmptyState } from "@/components/providers/ProviderEmptyState"; interface ProviderListProps { providers: Record; currentProviderId: string; appId: AppId; isEditMode?: boolean; onSwitch: (provider: Provider) => void; onEdit: (provider: Provider) => void; onDelete: (provider: Provider) => void; onDuplicate: (provider: Provider) => void; onConfigureUsage?: (provider: Provider) => void; onOpenWebsite: (url: string) => void; onCreate?: () => void; isLoading?: boolean; } export function ProviderList({ providers, currentProviderId, appId, isEditMode = false, onSwitch, onEdit, onDelete, onDuplicate, onConfigureUsage, onOpenWebsite, onCreate, isLoading = false, }: ProviderListProps) { const { sortedProviders, sensors, handleDragEnd } = useDragSort( providers, appId, ); if (isLoading) { return (
{[0, 1, 2].map((index) => (
))}
); } if (sortedProviders.length === 0) { return ; } return ( provider.id)} strategy={verticalListSortingStrategy} >
{sortedProviders.map((provider) => ( ))}
); } interface SortableProviderCardProps { provider: Provider; isCurrent: boolean; appId: AppId; isEditMode: boolean; onSwitch: (provider: Provider) => void; onEdit: (provider: Provider) => void; onDelete: (provider: Provider) => void; onDuplicate: (provider: Provider) => void; onConfigureUsage?: (provider: Provider) => void; onOpenWebsite: (url: string) => void; } function SortableProviderCard({ provider, isCurrent, appId, isEditMode, onSwitch, onEdit, onDelete, onDuplicate, onConfigureUsage, onOpenWebsite, }: SortableProviderCardProps) { const { setNodeRef, attributes, listeners, transform, transition, isDragging, } = useSortable({ id: provider.id }); const style: CSSProperties = { transform: CSS.Transform.toString(transform), transition, }; return (
onConfigureUsage(item) : () => undefined } onOpenWebsite={onOpenWebsite} dragHandleProps={{ attributes, listeners, isDragging, }} />
); }