// src/hooks/mutations/useDeleteShoppingListMutation.ts import { useMutation, useQueryClient } from '@tanstack/react-query'; import * as apiClient from '../../services/apiClient'; import { notifySuccess, notifyError } from '../../services/notificationService'; interface DeleteShoppingListParams { listId: number; } /** * Mutation hook for deleting a shopping list. * * This hook provides automatic cache invalidation. When the mutation succeeds, * it invalidates the shopping-lists query to trigger a refetch of the updated list. * * @returns Mutation object with mutate function and state * * @example * ```tsx * const deleteShoppingList = useDeleteShoppingListMutation(); * * const handleDelete = (listId: number) => { * deleteShoppingList.mutate( * { listId }, * { * onSuccess: () => console.log('Deleted!'), * onError: (error) => console.error(error), * } * ); * }; * ``` */ export const useDeleteShoppingListMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ listId }: DeleteShoppingListParams) => { const response = await apiClient.deleteShoppingList(listId); if (!response.ok) { const error = await response.json().catch(() => ({ message: `Request failed with status ${response.status}`, })); throw new Error(error.message || 'Failed to delete shopping list'); } return response.json(); }, onSuccess: () => { // Invalidate and refetch shopping lists to get the updated list queryClient.invalidateQueries({ queryKey: ['shopping-lists'] }); notifySuccess('Shopping list deleted'); }, onError: (error: Error) => { notifyError(error.message || 'Failed to delete shopping list'); }, }); };