diff --git a/src/DocSearchModal.tsx b/src/DocSearchModal.tsx index 85dfeae3..39f20445 100644 --- a/src/DocSearchModal.tsx +++ b/src/DocSearchModal.tsx @@ -9,9 +9,10 @@ import { MAX_QUERY_SIZE } from './constants'; import { DocSearchHit, InternalDocSearchHit, + SearchClient, StoredDocSearchHit, } from './types'; -import { groupBy, noop } from './utils'; +import { groupBy, identity, noop } from './utils'; import { createStoredSearches } from './stored-searches'; import { useSearchClient } from './useSearchClient'; import { useTrapFocus } from './useTrapFocus'; @@ -23,14 +24,11 @@ import { ScreenState } from './ScreenState'; import { Footer } from './Footer'; interface DocSearchModalProps extends DocSearchProps { + transformSearchClient?(searchClient: SearchClient): SearchClient; initialScrollY: number; onClose?(): void; } -function defaultTransformItems(x: DocSearchHit[]) { - return x; -} - export function DocSearchModal({ appId = 'BH4D9OD16A', apiKey, @@ -38,11 +36,12 @@ export function DocSearchModal({ placeholder = 'Search docs', searchParameters, onClose = noop, - transformItems = defaultTransformItems, + transformItems = identity, hitComponent = Hit, resultsFooterComponent = () => null, navigator, initialScrollY = 0, + transformSearchClient = identity, }: DocSearchModalProps) { const [state, setState] = React.useState< AutocompleteState @@ -62,7 +61,7 @@ export function DocSearchModal({ : '' ).current; - const searchClient = useSearchClient(appId, apiKey); + const searchClient = useSearchClient(appId, apiKey, transformSearchClient); const favoriteSearches = React.useRef( createStoredSearches({ key: `__DOCSEARCH_FAVORITE_SEARCHES__${indexName}`, diff --git a/src/types/SearchClient.ts b/src/types/SearchClient.ts new file mode 100644 index 00000000..d39c22c7 --- /dev/null +++ b/src/types/SearchClient.ts @@ -0,0 +1 @@ +export type SearchClient = any; diff --git a/src/types/index.ts b/src/types/index.ts index 93285bd1..779c5649 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,4 @@ export * from './DocSearchHit'; export * from './InternalDocSearchHit'; +export * from './SearchClient'; export * from './StoredDocSearchHit'; diff --git a/src/useSearchClient.ts b/src/useSearchClient.ts index a1a72879..01583370 100644 --- a/src/useSearchClient.ts +++ b/src/useSearchClient.ts @@ -1,15 +1,20 @@ import React from 'react'; import algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser'; +import { SearchClient } from './types'; import { version } from './version'; -export function useSearchClient(appId: string, apiKey: string) { +export function useSearchClient( + appId: string, + apiKey: string, + transformSearchClient: (searchClient: SearchClient) => SearchClient +): SearchClient { const searchClient = React.useMemo(() => { const client = algoliasearch(appId, apiKey); client.addAlgoliaAgent(`docsearch (${version})`); - return client; - }, [appId, apiKey]); + return transformSearchClient(client); + }, [appId, apiKey, transformSearchClient]); return searchClient; } diff --git a/src/utils/identity.ts b/src/utils/identity.ts new file mode 100644 index 00000000..440329ed --- /dev/null +++ b/src/utils/identity.ts @@ -0,0 +1,3 @@ +export function identity(x: TParam): TParam { + return x; +} diff --git a/src/utils/index.ts b/src/utils/index.ts index a684cfed..877f02d6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,2 +1,3 @@ export * from './groupBy'; +export * from './identity'; export * from './noop';