All files / src/pages/inventory/handlers useDataFetchingLogic.ts

0% Statements 0/56
0% Branches 0/1
0% Functions 0/1
0% Lines 0/56

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 52 53 54 55 56 57                                                                                                                 
/**
 * @file useDataFetchingLogic.ts
 * @module pages/inventory/handlers/useDataFetchingLogic
 *
 * @summary
 * Custom hook that prepares data fetching parameters from board state.
 * Transforms UI state into server-compatible query parameters.
 *
 * @enterprise
 * - Separation of concerns: data parameter transformation isolated
 * - Single responsibility: converts state to API query format
 * - Memoized calculations for sorting
 */

import { useMemo } from 'react';
import { useInventoryData } from '../hooks/useInventoryData';
import type { InventoryState, InventoryStateSetters } from '../hooks/useInventoryState';

type InventoryStateReturn = InventoryState & InventoryStateSetters;

/**
 * Hook that prepares and executes data fetching with transformed state parameters.
 *
 * Responsibilities:
 * - Convert 0-based pagination to 1-based for server
 * - Format sort model into server query string
 * - Execute useInventoryData with prepared parameters
 *
 * @param state - Inventory board state object
 * @returns Data fetching result from useInventoryData
 *
 * @example
 * ```tsx
 * const data = useDataFetchingLogic(state);
 * ```
 */
export function useDataFetchingLogic(state: InventoryStateReturn) {
  // Prepare sort parameter for server
  const serverSort = useMemo(() => {
    return state.sortModel.length
      ? `${state.sortModel[0].field},${state.sortModel[0].sort ?? 'asc'}`
      : 'name,asc';
  }, [state.sortModel]);

  // Execute data fetching with prepared parameters
  const data = useInventoryData(
    state.supplierId,
    state.q,
    state.belowMinOnly,
    state.paginationModel.page + 1, // Convert 0-based to 1-based
    state.paginationModel.pageSize,
    serverSort
  );

  return data;
}