import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { categoryAdminService } from '../services/categoryAdminService'; import { useNotification } from './reduxHooks'; /** * Hook for fetching all categories */ export const useAdminCategories = () => { return useQuery({ queryKey: ['admin-categories'], queryFn: () => categoryAdminService.getAllCategories(), }); }; /** * Hook for fetching a single category by ID */ export const useAdminCategory = (id) => { return useQuery({ queryKey: ['admin-category', id], queryFn: () => categoryAdminService.getCategoryById(id), enabled: !!id, }); }; /** * Hook for creating a new category */ export const useCreateCategory = () => { const queryClient = useQueryClient(); const notification = useNotification(); return useMutation({ mutationFn: (categoryData) => categoryAdminService.createCategory(categoryData), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['admin-categories'] }); queryClient.invalidateQueries({ queryKey: ['categories'] }); notification.showNotification('Category created successfully!', 'success'); return data; }, onError: (error) => { notification.showNotification( error.message || 'Failed to create category', 'error' ); throw error; }, }); }; /** * Hook for updating a category */ export const useUpdateCategory = () => { const queryClient = useQueryClient(); const notification = useNotification(); return useMutation({ mutationFn: ({ id, categoryData }) => categoryAdminService.updateCategory(id, categoryData), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['admin-categories'] }); queryClient.invalidateQueries({ queryKey: ['categories'] }); notification.showNotification('Category updated successfully!', 'success'); return data; }, onError: (error) => { notification.showNotification( error.message || 'Failed to update category', 'error' ); throw error; }, }); }; /** * Hook for deleting a category */ export const useDeleteCategory = () => { const queryClient = useQueryClient(); const notification = useNotification(); return useMutation({ mutationFn: (id) => categoryAdminService.deleteCategory(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-categories'] }); queryClient.invalidateQueries({ queryKey: ['categories'] }); notification.showNotification('Category deleted successfully!', 'success'); }, onError: (error) => { notification.showNotification( error.message || 'Failed to delete category', 'error' ); throw error; }, }); };