"use client"; import { useState } from "react"; import { CalendarIcon } from "lucide-react"; import { format } from "date-fns"; import { useMutation, useQuery, 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 mutation = useMutation({ mutationFn: (item: CreateInventoryItemInput) => createInventoryItem(item), onSuccess: () => { // invalidate queries to refresh inventory data. const queryClient = useQueryClient(); queryClient.invalidateQueries({ queryKey: ["inventoryItems"] }); // reset form fields and close dialog. setItemName(""); setItemCategory(""); setItemQuantity(0); setItemUnit(""); setDate(undefined); setOpen(false); }, }); const inputStates = [itemName, itemCategory, itemUnit, itemStatus, date]; const isInputValid = inputStates.every((input) => input); const handleSave = () => { if (!isInputValid) { console.error("All fields are required"); 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, lastUpdated: 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))} />
); }