"use client"; import { useState } from "react"; import { CalendarIcon } from "lucide-react"; import { format } from "date-fns"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { Calendar } from "@/components/ui/calendar"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { InventoryStatus, InventoryItemCategory, HarvestUnits } from "@/types"; import { updateInventoryItem } from "@/api/inventory"; import type { UpdateInventoryItemInput } from "@/types"; export interface EditInventoryItemProps { id: string; name: string; categoryId: string; statusId: string; unitId: string; quantity: number; fetchedInventoryStatus: InventoryStatus[]; fetchedInventoryCategory: InventoryItemCategory[]; fetchedHarvestUnits: HarvestUnits[]; } export function EditInventoryItem({ id, name, categoryId, statusId, unitId, quantity, fetchedInventoryStatus, fetchedInventoryCategory, fetchedHarvestUnits, }: EditInventoryItemProps) { const [open, setOpen] = useState(false); const [itemName, setItemName] = useState(name); const [itemCategory, setItemCategory] = useState( fetchedInventoryCategory.find( (categoryItem) => categoryItem.id.toString() === categoryId )?.name ); const [itemQuantity, setItemQuantity] = useState(quantity); const [itemUnit, setItemUnit] = useState( fetchedHarvestUnits.find( (harvestItem) => harvestItem.id.toString() === unitId )?.name ); const [itemStatus, setItemStatus] = useState( fetchedInventoryStatus.find( (statusItem) => statusItem.id.toString() === statusId )?.name ); const [error, setError] = useState(null); const queryClient = useQueryClient(); const mutation = useMutation({ mutationFn: (item: UpdateInventoryItemInput) => updateInventoryItem(id, item), onSuccess: () => { // invalidate queries to refresh inventory data. queryClient.invalidateQueries({ queryKey: ["inventoryItems"] }); // reset form fields and close dialog. setItemName(""); setItemCategory(""); setItemQuantity(0); setItemUnit(""); setOpen(false); setItemStatus(""); }, }); // send edit request const handleEdit = () => { if (!itemName || !itemCategory || !itemUnit) { setError("All fields are required. Please fill in missing details."); return; } const category = fetchedInventoryCategory.find( (c) => c.name === itemCategory ); const unit = fetchedHarvestUnits.find((u) => u.name === itemUnit); const status = fetchedInventoryStatus.find((s) => s.name === itemStatus); if (!category || !unit || !status) { setError( "Invalid category, unit, or status. Please select a valid option." ); return; } // console.table({ // name: itemName, // categoryId: // fetchedInventoryCategory.find( // (category) => category.name === itemCategory // )?.id ?? 0, // quantity: itemQuantity, // unitId: // fetchedHarvestUnits.find((unit) => unit.name === itemUnit)?.id ?? 0, // statusId: // fetchedInventoryStatus.find((status) => status.name === itemStatus) // ?.id ?? 0, // lastUpdated: new Date().toISOString(), // }); mutation.mutate({ name: itemName, categoryId: fetchedInventoryCategory.find( (category) => category.name === itemCategory )?.id ?? 0, quantity: itemQuantity, unitId: fetchedHarvestUnits.find((unit) => unit.name === itemUnit)?.id ?? 0, statusId: fetchedInventoryStatus.find((status) => status.name === itemStatus) ?.id ?? 0, lastUpdated: new Date().toISOString(), }); }; return ( Edit Inventory Item Edit a plantation or fertilizer item in your inventory.
setItemName(e.target.value)} />
setItemQuantity(Number(e.target.value))} />
{error &&

{error}

}
); }