import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { getNotifications, getUnreadCount, markNotificationRead, markAllNotificationsRead, clearAllNotifications, Notification, } from '../api/notifications'; /** * Hook to fetch all notifications */ export const useNotifications = (options?: { read?: boolean; limit?: number }) => { return useQuery({ queryKey: ['notifications', options], queryFn: () => getNotifications(options), staleTime: 30000, // 30 seconds }); }; /** * Hook to fetch unread notification count */ export const useUnreadNotificationCount = () => { return useQuery({ queryKey: ['notificationsUnreadCount'], queryFn: getUnreadCount, staleTime: 30000, // 30 seconds refetchInterval: 60000, // Refetch every minute }); }; /** * Hook to mark a notification as read */ export const useMarkNotificationRead = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: markNotificationRead, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['notifications'] }); queryClient.invalidateQueries({ queryKey: ['notificationsUnreadCount'] }); }, }); }; /** * Hook to mark all notifications as read */ export const useMarkAllNotificationsRead = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: markAllNotificationsRead, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['notifications'] }); queryClient.invalidateQueries({ queryKey: ['notificationsUnreadCount'] }); }, }); }; /** * Hook to clear all read notifications */ export const useClearAllNotifications = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: clearAllNotifications, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['notifications'] }); }, }); };