All files / src/hooks useSearchSession.tsx

100% Statements 8/8
100% Branches 2/2
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 52 53 54 55 5612x                       5x 5x                                                         2x   2x     2x 1x   1x          
import {
  AutofillOptions,
  AutofillRetrieveResponse,
  AutofillSuggestion,
  AutofillSuggestionResponse,
  MapboxAutofill,
  MapboxSearch,
  Options,
  RetrieveResponse,
  SearchSession,
  Suggestion,
  SuggestionResponse
} from '@mapbox/search-js-core';
import { useMemo } from 'react';
 
export type SearchSessionType = SearchSession<
  Options,
  Suggestion,
  SuggestionResponse,
  RetrieveResponse
>;
 
export type AutofillSearchSessionType = SearchSession<
  AutofillOptions,
  AutofillSuggestion,
  AutofillSuggestionResponse,
  AutofillRetrieveResponse
>;
 
function useSearchSession(search: MapboxSearch): SearchSessionType;
function useSearchSession(autofill: MapboxAutofill): AutofillSearchSessionType;
 
/**
 * A React hook that returns a {@link SearchSession} instance.
 *
 * @param {MapboxSearch | MapboxAutofill} search
 * @returns {SearchSession}
 * @see {@link SearchSession}
 */
function useSearchSession(
  search: MapboxSearch | MapboxAutofill
): SearchSessionType | AutofillSearchSessionType {
  const searchSession = useMemo(() => {
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    return new SearchSession(search as any);
  }, [search]);
 
  if (search instanceof MapboxSearch) {
    return searchSession as SearchSessionType;
  } else {
    return searchSession as AutofillSearchSessionType;
  }
}
 
export { useSearchSession };