diff --git a/app/components/draft/QueueSection.tsx b/app/components/draft/QueueSection.tsx index 8011aa0..6fbb38e 100644 --- a/app/components/draft/QueueSection.tsx +++ b/app/components/draft/QueueSection.tsx @@ -1,4 +1,4 @@ -import { memo } from "react"; +import { memo, useCallback, useMemo } from "react"; import { GripVertical } from "lucide-react"; import { Button } from "~/components/ui/button"; import { Badge } from "~/components/ui/badge"; @@ -47,7 +47,7 @@ interface QueueSectionProps { } // Sortable queue item component -function SortableQueueItem({ +const SortableQueueItem = memo(function SortableQueueItem({ item, index, participantName, @@ -61,8 +61,8 @@ function SortableQueueItem({ participantName: string; sportName?: string; canPick: boolean; - onRemove: () => void; - onDraft?: () => void; + onRemove: (queueId: string) => void; + onDraft?: (participantId: string) => void; }) { const { attributes, @@ -109,7 +109,7 @@ function SortableQueueItem({ variant="default" size="sm" className="h-7 text-xs bg-electric text-background hover:bg-electric/90" - onClick={onDraft} + onClick={() => onDraft(item.participantId)} > Draft @@ -118,7 +118,7 @@ function SortableQueueItem({ variant="ghost" size="icon" className="h-7 w-7 text-destructive hover:text-destructive hover:bg-destructive/10" - onClick={onRemove} + onClick={() => onRemove(item.id)} title="Remove from queue" > × @@ -126,7 +126,7 @@ function SortableQueueItem({ ); -} +}); export const QueueSection = memo(function QueueSection({ queue, @@ -150,18 +150,25 @@ export const QueueSection = memo(function QueueSection({ }) ); - const handleDragEnd = (event: DragEndEvent) => { - const { active, over } = event; + const participantMap = useMemo( + () => new Map(availableParticipants.map((p) => [p.id, p])), + [availableParticipants] + ); - if (over && active.id !== over.id) { - const oldIndex = queue.findIndex((item) => item.id === active.id); - const newIndex = queue.findIndex((item) => item.id === over.id); + const queueIds = useMemo(() => queue.map((item) => item.id), [queue]); - const reorderedQueue = arrayMove(queue, oldIndex, newIndex); - const participantIds = reorderedQueue.map((item) => item.participantId); - onReorder(participantIds); - } - }; + const handleDragEnd = useCallback( + (event: DragEndEvent) => { + const { active, over } = event; + if (over && active.id !== over.id) { + const oldIndex = queue.findIndex((item) => item.id === active.id); + const newIndex = queue.findIndex((item) => item.id === over.id); + const reorderedQueue = arrayMove(queue, oldIndex, newIndex); + onReorder(reorderedQueue.map((item) => item.participantId)); + } + }, + [queue, onReorder] + ); return (