progress enforcing adr-0005
Some checks failed
Deploy to Test Environment / deploy-to-test (push) Failing after 46s
Some checks failed
Deploy to Test Environment / deploy-to-test (push) Failing after 46s
This commit is contained in:
58
src/hooks/mutations/useDeleteShoppingListMutation.ts
Normal file
58
src/hooks/mutations/useDeleteShoppingListMutation.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
// 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');
|
||||
},
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user