"use client";
import { useState, useCallback, useMemo } from "react";
import Link from "next/link";
import { useTranslations } from "next-intl";
import { toast } from "sonner";
import { ListChecks, X, FolderInput, FolderMinus, Check, GripVertical, Search } from "lucide-react";
import {
DndContext,
type DragEndEvent,
PointerSensor,
useSensor,
useSensors,
closestCenter,
} from "@dnd-kit/core";
import {
SortableContext,
useSortable,
rectSortingStrategy,
arrayMove,
} from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import { Button, buttonVariants } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { RecipeGridCard, type GridCardRecipe } from "@/components/recipe/recipe-grid-card";
import { AddToCollectionDialog } from "@/components/recipe/add-to-collection-dialog";
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
} from "@/components/ui/alert-dialog";
import { cn } from "@/lib/utils";
function SortableRecipeCard({
recipe,
selectMode,
selected,
onToggle,
dragDisabled,
}: {
recipe: GridCardRecipe;
selectMode: boolean;
selected: boolean;
onToggle: () => void;
dragDisabled: boolean;
}) {
const t = useTranslations("collections");
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
id: recipe.id,
disabled: dragDisabled,
});
const style = { transform: CSS.Transform.toString(transform), transition };
return (
{selectMode && (
{selected && }
)}
{!selectMode && !dragDisabled && (
// Always at least partly visible (not hover-only) — a fully hidden-until-hover
// handle is exactly what made dragging undiscoverable before.
)}