diff --git a/apps/web/components/meal-plan/shopping-list-view.tsx b/apps/web/components/meal-plan/shopping-list-view.tsx
index a484ead..7f42b86 100644
--- a/apps/web/components/meal-plan/shopping-list-view.tsx
+++ b/apps/web/components/meal-plan/shopping-list-view.tsx
@@ -3,7 +3,7 @@
import { useMemo, useRef, useState } from "react";
import { useTranslations } from "next-intl";
import { cn } from "@/lib/utils";
-import { Check, Package, Loader2, GripVertical, Trash2, Search, Sparkles } from "lucide-react";
+import { Check, Package, Loader2, GripVertical, MoreVertical, Trash2, Search, Sparkles } from "lucide-react";
import { toast } from "sonner";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
@@ -14,7 +14,16 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
-import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuSub,
+ DropdownMenuSubContent,
+ DropdownMenuSubTrigger,
+ DropdownMenuTrigger,
+ DropdownMenuSeparator,
+} from "@/components/ui/dropdown-menu";
import {
AlertDialog,
AlertDialogAction,
@@ -615,12 +624,12 @@ type ItemRowProps = {
function ItemRow({ item, readOnly, categoryOptions, categoryLabel, tShopping, onToggle, onChangeCategory, onDeleteRequest, dragHandle }: ItemRowProps) {
const [newCategory, setNewCategory] = useState("");
return (
-
+
{dragHandle}
{!readOnly && (
-
-
-
-
- onDeleteRequest(item)}
- >
-
-
- } />
- {tShopping("deleteItem")}
-
-
-
+
+
+
+
+
+
+ {tShopping("changeCategory")}
+
+ {categoryOptions.map((category) => (
+ onChangeCategory(item, category)}>
+ {categoryLabel(category)}
+
+ ))}
+ onChangeCategory(item, null)}>
+ {tShopping("aisleOther")}
+
+
+ e.stopPropagation()}>
+ setNewCategory(e.target.value)}
+ onKeyDown={(e) => {
+ if (e.key === "Enter" && newCategory.trim()) {
+ onChangeCategory(item, newCategory.trim());
+ setNewCategory("");
+ }
+ }}
+ placeholder={tShopping("newCategoryPlaceholder")}
+ className="h-7 text-xs"
+ />
+
+
+
+
+
+ onDeleteRequest(item)}>
+
+ {tShopping("deleteItem")}
+
+
+
)}
);