"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 { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { cn } from "@/lib/utils"; import { createInventoryItem } from "@/api/inventory"; import type { CreateInventoryItemInput, InventoryStatus, InventoryItemCategory, HarvestUnits, } from "@/types"; interface AddInventoryItemProps { inventoryCategory: InventoryItemCategory[]; inventoryStatus: InventoryStatus[]; harvestUnits: HarvestUnits[]; } export function AddInventoryItem({ inventoryCategory, inventoryStatus, harvestUnits, }: AddInventoryItemProps) { const [date, setDate] = useState(); const [open, setOpen] = useState(false); const [itemName, setItemName] = useState(""); const [itemCategory, setItemCategory] = useState(""); const [itemQuantity, setItemQuantity] = useState(0); const [itemUnit, setItemUnit] = useState(""); const [itemStatus, setItemStatus] = useState(""); const [isSubmitted, setIsSubmitted] = useState(false); const [successMessage, setSuccessMessage] = useState(""); const [errorMessage, setErrorMessage] = useState(""); const queryClient = useQueryClient(); const mutation = useMutation({ mutationFn: (item: CreateInventoryItemInput) => createInventoryItem(item), onSuccess: () => { // invalidate queries to refresh inventory data queryClient.invalidateQueries({ queryKey: ["inventoryItems"] }); setItemName(""); setItemCategory(""); setItemQuantity(0); setItemUnit(""); setDate(undefined); setIsSubmitted(true); setSuccessMessage("Item created successfully!"); // reset success message after 3 seconds setTimeout(() => { setIsSubmitted(false); setSuccessMessage(""); setOpen(false); }, 3000); }, onError: (error: any) => { console.error("Error creating item: ", error); setErrorMessage( "There was an error creating the item. Please try again." ); // reset success message after 3 seconds setTimeout(() => { setErrorMessage(""); }, 3000); }, }); const inputStates = [itemName, itemCategory, itemUnit, itemStatus, date]; const isInputValid = inputStates.every((input) => input); const handleSave = () => { if (!isInputValid) { setErrorMessage( "There was an error creating the item. Please try again." ); return; } const newItem: CreateInventoryItemInput = { name: itemName, categoryId: inventoryCategory.find((item) => item.name === itemCategory)?.id || 0, quantity: itemQuantity, unitId: harvestUnits.find((item) => item.name === itemUnit)?.id || 0, statusId: inventoryStatus.find((item) => item.name === itemStatus)?.id || 0, dateAdded: date ? date.toISOString() : new Date().toISOString(), }; // console.table(newItem); mutation.mutate(newItem); }; return ( <> Add Inventory Item Add a new plantation or fertilizer item to your inventory.
setItemName(e.target.value)} />
setItemQuantity(Number(e.target.value))} />
{isSubmitted && (

{successMessage} You may close this window.

)} {errorMessage && (

{errorMessage}

)}
); }