All files / src/hooks useSearchSession.tsx

100% Statements 10/10
100% Branches 4/4
100% Functions 3/3
100% Lines 9/9

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 63 64 65 66 67 68 69 70 71 72 73 74 7515x                               6x 6x                                                                                   3x   3x     3x 2x   1x   1x          
import {
  AddressAutofillOptions,
  AddressAutofillRetrieveResponse,
  AddressAutofillSuggestion,
  AddressAutofillSuggestionResponse,
  AddressAutofillCore,
  SearchBoxCore,
  SearchBoxOptions,
  SearchBoxRetrieveResponse,
  SearchBoxSuggestion,
  SearchBoxSuggestionResponse,
  GeocodingOptions,
  GeocodingFeature,
  GeocodingResponse,
  GeocodingCore,
  SearchSession
} from '@mapbox/search-js-core';
import { useMemo } from 'react';
 
export type SearchSessionType = SearchSession<
  SearchBoxOptions,
  SearchBoxSuggestion,
  SearchBoxSuggestionResponse,
  SearchBoxRetrieveResponse
>;
 
export type AddressAutofillSearchSessionType = SearchSession<
  AddressAutofillOptions,
  AddressAutofillSuggestion,
  AddressAutofillSuggestionResponse,
  AddressAutofillRetrieveResponse
>;
 
export type GeocodingSearchSessionType = SearchSession<
  GeocodingOptions,
  GeocodingFeature,
  GeocodingResponse,
  GeocodingFeature
>;
 
function useSearchSession(search: SearchBoxCore): SearchSessionType;
function useSearchSession(geocoding: GeocodingCore): GeocodingSearchSessionType;
function useSearchSession(
  autofill: AddressAutofillCore
): AddressAutofillSearchSessionType;
 
/**
 * A React hook that returns a {@link SearchSession} instance.
 *
 * @param {SearchBoxCore | AddressAutofillCore} search
 * @returns {SearchSession}
 * @see {@link SearchSession}
 */
function useSearchSession(
  search: SearchBoxCore | AddressAutofillCore | GeocodingCore
):
  | SearchSessionType
  | AddressAutofillSearchSessionType
  | GeocodingSearchSessionType {
  const searchSession = useMemo(() => {
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    return new SearchSession(search as any);
  }, [search]);
 
  if (search instanceof SearchBoxCore) {
    return searchSession as SearchSessionType;
  } else if (search instanceof GeocodingCore) {
    return searchSession as GeocodingSearchSessionType;
  } else {
    return searchSession as AddressAutofillSearchSessionType;
  }
}
 
export { useSearchSession };