All files / src/pages/suppliers/handlers useSearchHandlers.ts

100% Statements 62/62
80% Branches 4/5
100% Functions 1/1
100% Lines 62/62

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 58 59 60 61 62 631x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 2x 2x 2x 2x 2x 2x 6x 6x 6x 6x 6x 2x 2x 2x 2x 2x 6x 6x 6x 6x 1x 1x 1x 6x 6x 6x 6x 6x 6x 6x 6x  
/**
 * @file useSearchHandlers.ts
 * @module pages/suppliers/handlers/useSearchHandlers
 *
 * @summary
 * Custom hook that provides search panel event handlers for SuppliersBoard.
 * Manages: Search input change, result selection, clear selection.
 *
 * @enterprise
 * - Separation of concerns: handler logic isolated from component
 * - Clean orchestrator interface
 */
 
import { useCallback } from 'react';
import type { SupplierRow } from '../../../api/suppliers';
import type { UseSuppliersBoardStateReturn } from '../hooks/useSuppliersBoardState';
 
/**
 * Hook providing search panel handlers.
 *
 * @param state - Suppliers board state object from useSuppliersBoardState
 * @returns Object with handler functions for search actions
 *
 * @example
 * ```tsx
 * const { handleSearchChange, handleSearchResultSelect, handleClearSearchSelection } = useSearchHandlers(state);
 * ```
 */
export function useSearchHandlers(state: UseSuppliersBoardStateReturn) {
  const handleSearchChange = useCallback(
    (query: string) => {
      state.setSearchQuery(query);
      // Reset selection and jump back to first page when search text changes
      state.setSelectedSearchResult(null);
      state.setSelectedId(null);
      state.setPaginationModel({ ...state.paginationModel, page: 0 });
    },
    [state]
  );
 
  const handleSearchResultSelect = useCallback(
    (supplier: SupplierRow) => {
      state.setSelectedSearchResult(supplier);
      state.setSelectedId(supplier.id);
      state.setPaginationModel({ ...state.paginationModel, page: 0 });
      state.setSearchQuery(supplier.name ?? '');
    },
    [state]
  );
 
  const handleClearSearchSelection = useCallback(() => {
    state.setSelectedSearchResult(null);
    state.setSelectedId(null);
    state.setSearchQuery('');
  }, [state]);
 
  return {
    handleSearchChange,
    handleSearchResultSelect,
    handleClearSearchSelection,
  };
}