All files / src/hooks/useCompanies useCompanies.ts

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

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                                                  5x         47x   23x              
/**
 * useCompanies Hook
 *
 * React Query hook for fetching paginated company list with filters
 * AC 1 (Company List Display), AC 2 (Search & Filters), AC 10 (Performance), AC 15 (Service Integration)
 */
 
import { useQuery } from '@tanstack/react-query';
import { companyApiClient } from '@/services/api/companyApi';
import type { CompanyFilters, PaginationParams } from '@/types/company.types';
 
/**
 * Fetch companies with pagination and optional filters
 *
 * Features:
 * - 5 minute stale time (AC 10 - Performance)
 * - Automatic refetch on window focus
 * - Cache invalidation on mutations
 * - Unique query keys based on pagination + filters
 *
 * @param pagination - Page and limit parameters
 * @param filters - Optional filters (partner status, verified, industry, search query)
 * @param options - Optional resource expansion and React Query options (e.g., { expand: ['logo'], enabled: true })
 * @returns React Query result with company list data
 */
export const useCompanies = (
  pagination: PaginationParams,
  filters?: CompanyFilters,
  options?: { expand?: string[]; enabled?: boolean }
) => {
  return useQuery({
    queryKey: ['companies', pagination, filters, options?.expand],
    queryFn: () => companyApiClient.getCompanies(pagination, filters, options),
    staleTime: 5 * 60 * 1000, // 5 minutes (AC 10 - Performance requirement)
    gcTime: 10 * 60 * 1000, // 10 minutes garbage collection
    refetchOnWindowFocus: true, // AC 14 - State Management requirement
    enabled: options?.enabled ?? true, // Allow disabling the query (e.g., when modal is closed)
  });
};