import type { Dispatch, SetStateAction } from "react"; import { closestCenter, DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors, } from "@dnd-kit/core"; import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy, } from "@dnd-kit/sortable"; import { Form } from "react-router"; import { ListOrdered } from "lucide-react"; import { Button } from "~/components/ui/button"; import { SettingsSection, SettingsStatusPill } from "./SettingsSection"; import { DraftOrderMessage, type SettingsActionData } from "./SettingsMessages"; import { SortableDraftOrderRow } from "./SortableDraftOrderRow"; type DraftOrderTeam = { id: string; name: string; ownerId: string | null; }; export function DraftOrderSection({ active, draftOrderSet, canEditDraftOrder, hasUnsavedChanges, draftOrderTeams, setDraftOrderTeams, onDirtyChange, onResetChanges, teams, ownerMap, navigationState, updateIntent, actionData, }: { active: boolean; draftOrderSet: boolean; canEditDraftOrder: boolean; hasUnsavedChanges: boolean; draftOrderTeams: string[]; setDraftOrderTeams: Dispatch>; onDirtyChange: (dirty: boolean) => void; onResetChanges: () => void; teams: DraftOrderTeam[]; ownerMap: Record; navigationState: "idle" | "loading" | "submitting"; updateIntent: FormDataEntryValue | null | undefined; actionData: SettingsActionData; }) { const sensors = useSensors( useSensor(PointerSensor, { activationConstraint: { distance: 6 }, }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates, }) ); return ( Set : undefined} className={active ? undefined : "hidden"} > {!draftOrderSet && (

The draft cannot begin until a draft order is set.

Randomize the order now, or drag and drop teams into position manually below.

{canEditDraftOrder && (
)}
)}

Manually set draft order

{ if (!over || activeItem.id === over.id) return; setDraftOrderTeams((current) => { const oldIndex = current.indexOf(String(activeItem.id)); const newIndex = current.indexOf(String(over.id)); if (oldIndex === -1 || newIndex === -1) return current; onDirtyChange(true); return arrayMove(current, oldIndex, newIndex); }); }} >
{draftOrderTeams.map((teamId, index) => { const team = teams.find((t) => t.id === teamId); if (!team) return null; return ( ); })}
{canEditDraftOrder ? (
{hasUnsavedChanges && (

You have unsaved draft order changes.

)}
{hasUnsavedChanges && ( )}
) : (

Draft order cannot be changed after the draft has started.

)}
{draftOrderSet && canEditDraftOrder && (
)}
); }