All files / src/hooks/useNewsletterSubscribers useNewsletterSubscriberList.ts

100% Statements 8/8
100% Branches 3/3
100% Functions 3/3
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                                    1x         5x   5x   2x               5x 1x           1x           5x    
/**
 * useNewsletterSubscriberList Hook
 *
 * React Query hook for fetching paginated newsletter subscriber list with filters.
 *
 * Story 10.28: Newsletter Subscriber Management Page
 */
 
import { useQuery, useQueryClient, keepPreviousData } from '@tanstack/react-query';
import type { NewsletterSubscriberFilters } from '@/stores/newsletterSubscriberStore';
import { listNewsletterSubscribers } from '@/services/api/newsletterApi';
 
interface UseNewsletterSubscriberListOptions {
  filters: NewsletterSubscriberFilters;
  pagination: { page: number; limit: number };
  enabled?: boolean;
}
 
export const useNewsletterSubscriberList = ({
  filters,
  pagination,
  enabled = true,
}: UseNewsletterSubscriberListOptions) => {
  const queryClient = useQueryClient();
 
  const query = useQuery({
    queryKey: ['newsletter-subscribers', 'list', { filters, ...pagination }],
    queryFn: () => listNewsletterSubscribers(filters, pagination),
    staleTime: 5 * 60 * 1000,
    gcTime: 30 * 60 * 1000,
    placeholderData: keepPreviousData,
    enabled,
  });
 
  // Prefetch next page when hasNext
  if (query.data?.pagination?.hasNext) {
    queryClient.prefetchQuery({
      queryKey: [
        'newsletter-subscribers',
        'list',
        { filters, page: pagination.page + 1, limit: pagination.limit },
      ],
      queryFn: () =>
        listNewsletterSubscribers(filters, { ...pagination, page: pagination.page + 1 }),
      staleTime: 5 * 60 * 1000,
    });
  }
 
  return query;
};