import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { CreateItem } from "../../shared/types"; import { apiDelete, apiGet, apiPost, apiPut } from "../lib/api"; interface ItemWithCategory { id: number; name: string; weightGrams: number | null; priceCents: number | null; categoryId: number; notes: string | null; productUrl: string | null; imageFilename: string | null; createdAt: string; updatedAt: string; categoryName: string; categoryIcon: string; } export function useItems() { return useQuery({ queryKey: ["items"], queryFn: () => apiGet("/api/items"), }); } export function useItem(id: number | null) { return useQuery({ queryKey: ["items", id], queryFn: () => apiGet(`/api/items/${id}`), enabled: id != null, }); } export function useCreateItem() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (data: CreateItem) => apiPost("/api/items", data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["items"] }); queryClient.invalidateQueries({ queryKey: ["totals"] }); }, }); } export function useUpdateItem() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, ...data }: { id: number } & Partial) => apiPut(`/api/items/${id}`, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["items"] }); queryClient.invalidateQueries({ queryKey: ["totals"] }); queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); } export function useDeleteItem() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: number) => apiDelete<{ success: boolean }>(`/api/items/${id}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["items"] }); queryClient.invalidateQueries({ queryKey: ["totals"] }); queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); }