Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

use-algolia

Package Overview
Dependencies
Maintainers
3
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

use-algolia - npm Package Compare versions

Comparing version
1.4.1
to
1.5.0
+1
-1
dist/index.d.ts

@@ -119,3 +119,3 @@ /// <reference types="react" />

};
}, import("react").Dispatch<RequestOptions & SearchOptions>, () => void, (newConfig: Partial<Pick<SearchState<Hit>, "appId" | "searchKey" | "indexName">>) => void];
}, import("react").Dispatch<RequestOptions & SearchOptions>, () => void, (newConfig: Partial<Pick<SearchState<Hit>, "appId" | "searchKey" | "indexName">>) => void, (page?: number | undefined) => Promise<void>];
export default useAlgolia;

@@ -170,3 +170,3 @@ 'use strict';

request: request
}), requestDispatch, getMore, setAlgoliaConfig];
}), requestDispatch, getMore, setAlgoliaConfig, query];
}

@@ -173,0 +173,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"use-algolia.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","generateSearchReducer","prevState","updates","gotMore","response","page","hits","hasMore","nbPages","useAlgolia","initialRequest","useReducer","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","getMore","setAlgoliaConfig","newConfig"],"mappings":"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"}
{"version":3,"file":"use-algolia.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n query,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig,\n typeof query\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","generateSearchReducer","prevState","updates","gotMore","response","page","hits","hasMore","nbPages","useAlgolia","initialRequest","useReducer","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","getMore","setAlgoliaConfig","newConfig"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,n=require("react"),r=(e=require("algoliasearch"))&&"object"==typeof e&&"default"in e?e.default:e;function o(){return(o=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}var s=function(e,n,o){return e&&n&&o?r(e,n).initIndex(o):null};function a(e,r,a,i){void 0===i&&(i={});var t=n.useReducer((function(e,n){var r,s,a,i,t,l;return o({},e,{},n,{hits:(null==n||null===(r=n.response)||void 0===r?void 0:r.page)&&(null==n||null===(s=n.response)||void 0===s?void 0:s.page)>0&&n.response?[].concat(e.hits,n.response.hits):null!==(a=null!==(i=null!==(t=n.hits)&&void 0!==t?t:null===(l=n.response)||void 0===l?void 0:l.hits)&&void 0!==i?i:e.hits)&&void 0!==a?a:[],hasMore:!!n.response&&n.response.page<n.response.nbPages-1})}),{response:null,hits:[],loading:!1,hasMore:!1,appId:e,searchKey:r,indexName:a,index:s(e,r,a)}),l=t[0],u=t[1],d=l.index,p=n.useReducer((function(e,n){return o({},e,{},n)}),i),c=p[0],v=p[1],h=n.useCallback((function(e){try{var n;return d?(u("number"==typeof e&&e>0?{loading:!0}:{loading:!0,hits:[]}),Promise.resolve(d.search("",o({},c,{page:null!==(n=null!=e?e:c.page)&&void 0!==n?n:0}))).then((function(e){u({response:e,loading:!1})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[d,c]);n.useEffect((function(){h()}),[h]);var f=function(e){var n,r,o,a={};e.appId&&(a.appId=e.appId),e.searchKey&&(a.searchKey=e.searchKey),e.indexName&&(a.indexName=e.indexName),a.index=s(null!==(n=a.appId)&&void 0!==n?n:l.appId,null!==(r=a.searchKey)&&void 0!==r?r:l.searchKey,null!==(o=a.indexName)&&void 0!==o?o:l.indexName),u(a)};return n.useEffect((function(){f({appId:e,searchKey:r,indexName:a})}),[e,r,a]),[o({},l,{request:c}),v,function(){l.response&&!l.loading&&l.hasMore&&h(l.response.page+1)},f]}exports.createAlgoliaIndex=s,exports.default=a,exports.useAlgolia=a;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,n=require("react"),r=(e=require("algoliasearch"))&&"object"==typeof e&&"default"in e?e.default:e;function o(){return(o=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}var s=function(e,n,o){return e&&n&&o?r(e,n).initIndex(o):null};function a(e,r,a,i){void 0===i&&(i={});var t=n.useReducer((function(e,n){var r,s,a,i,t,l;return o({},e,{},n,{hits:(null==n||null===(r=n.response)||void 0===r?void 0:r.page)&&(null==n||null===(s=n.response)||void 0===s?void 0:s.page)>0&&n.response?[].concat(e.hits,n.response.hits):null!==(a=null!==(i=null!==(t=n.hits)&&void 0!==t?t:null===(l=n.response)||void 0===l?void 0:l.hits)&&void 0!==i?i:e.hits)&&void 0!==a?a:[],hasMore:!!n.response&&n.response.page<n.response.nbPages-1})}),{response:null,hits:[],loading:!1,hasMore:!1,appId:e,searchKey:r,indexName:a,index:s(e,r,a)}),l=t[0],u=t[1],d=l.index,p=n.useReducer((function(e,n){return o({},e,{},n)}),i),c=p[0],v=p[1],h=n.useCallback((function(e){try{var n;return d?(u("number"==typeof e&&e>0?{loading:!0}:{loading:!0,hits:[]}),Promise.resolve(d.search("",o({},c,{page:null!==(n=null!=e?e:c.page)&&void 0!==n?n:0}))).then((function(e){u({response:e,loading:!1})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[d,c]);n.useEffect((function(){h()}),[h]);var f=function(e){var n,r,o,a={};e.appId&&(a.appId=e.appId),e.searchKey&&(a.searchKey=e.searchKey),e.indexName&&(a.indexName=e.indexName),a.index=s(null!==(n=a.appId)&&void 0!==n?n:l.appId,null!==(r=a.searchKey)&&void 0!==r?r:l.searchKey,null!==(o=a.indexName)&&void 0!==o?o:l.indexName),u(a)};return n.useEffect((function(){f({appId:e,searchKey:r,indexName:a})}),[e,r,a]),[o({},l,{request:c}),v,function(){l.response&&!l.loading&&l.hasMore&&h(l.response.page+1)},f,h]}exports.createAlgoliaIndex=s,exports.default=a,exports.useAlgolia=a;
//# sourceMappingURL=use-algolia.cjs.production.min.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"use-algolia.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","useAlgolia","initialRequest","useReducer","prevState","updates","hits","response","page","_updates$response3","hasMore","nbPages","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","setAlgoliaConfig","newConfig"],"mappings":"8XAWaA,EAAqB,SAChCC,EACAC,EACAC,UAEKF,GAAUC,GAAcC,EACtBC,EAAcH,EAAOC,GAAWG,UAAUF,GADF,eAmEjCG,EACdL,EACAC,EACAC,EACAI,YAAAA,IAAAA,EAAiD,UAGXC,cA3CC,SACvCC,EACAC,+BAkBYD,KAAcC,GAASC,MAhBnBD,MAAAA,aAAAA,EAASE,+BAAUC,QAAQH,MAAAA,aAAAA,EAASE,+BAAUC,MAAO,GAGxDH,EAAQE,mBACXH,EAAUE,KAASD,EAAQE,SAASD,oCAMxCD,EAAQC,8BAAQD,EAAQE,6BAARE,EAAkBH,oBAAQF,EAAUE,oBAAQ,GAMzBI,UAJzBL,EAAQE,UACpBF,EAAQE,SAASC,KAAOH,EAAQE,SAASI,QAAU,MA4BrD,CACEJ,SAAU,KACVD,KAAM,GACNM,SAAS,EACTF,SAAS,EACTd,MAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAe,MAAOlB,EAAmBC,EAAOC,EAAWC,KAVzCgB,OAAaC,OAaZF,EAAUC,EAAVD,QAG2BV,cACjC,SACEa,EACAX,eACSW,KAASX,KACpBH,GALKe,OAASC,OAUVC,EAAQC,wBACLZ,oBACAK,GAIHE,EADkB,iBAATP,GAAqBA,EAAO,EACtB,CAAEI,SAAS,GAER,CAAEA,SAAS,EAAMN,KAAM,qBAEpBO,EAAMQ,OAAY,QACpCJ,GAGHT,eAAMA,MAAAA,EAAAA,EAAQS,EAAQT,oBAAQ,qBAJ1BD,GAONQ,EAAe,CAAER,SAAAA,EAAUK,SAAS,+DAEtC,CAACC,EAAOI,IAIVK,aAAU,WACRH,MACC,CAACA,QAUEI,EAAmB,SACvBC,aAIMnB,EAAqC,GAEvCmB,EAAU5B,QAAOS,EAAQT,MAAQ4B,EAAU5B,OAC3C4B,EAAU3B,YAAWQ,EAAQR,UAAY2B,EAAU3B,WACnD2B,EAAU1B,YAAWO,EAAQP,UAAY0B,EAAU1B,WAGvDO,EAAQQ,MAAQlB,YACdU,EAAQT,qBAASkB,EAAYlB,gBAC7BS,EAAQR,yBAAaiB,EAAYjB,oBACjCQ,EAAQP,yBAAagB,EAAYhB,WAGnCiB,EAAeV,WAGjBiB,aAAU,WACRC,EAAiB,CAAE3B,MAAAA,EAAOC,UAAAA,EAAWC,UAAAA,MACpC,CAACF,EAAOC,EAAWC,IAEf,MACAgB,GAAaG,QAAAA,IAClBC,EAjCc,WACVJ,EAAYP,WAAaO,EAAYF,SAAWE,EAAYJ,SAC9DS,EAAML,EAAYP,SAASC,KAAO,IAiCpCe"}
{"version":3,"file":"use-algolia.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n query,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig,\n typeof query\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","useAlgolia","initialRequest","useReducer","prevState","updates","hits","response","page","_updates$response3","hasMore","nbPages","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","setAlgoliaConfig","newConfig"],"mappings":"8XAWaA,EAAqB,SAChCC,EACAC,EACAC,UAEKF,GAAUC,GAAcC,EACtBC,EAAcH,EAAOC,GAAWG,UAAUF,GADF,eAmEjCG,EACdL,EACAC,EACAC,EACAI,YAAAA,IAAAA,EAAiD,UAGXC,cA3CC,SACvCC,EACAC,+BAkBYD,KAAcC,GAASC,MAhBnBD,MAAAA,aAAAA,EAASE,+BAAUC,QAAQH,MAAAA,aAAAA,EAASE,+BAAUC,MAAO,GAGxDH,EAAQE,mBACXH,EAAUE,KAASD,EAAQE,SAASD,oCAMxCD,EAAQC,8BAAQD,EAAQE,6BAARE,EAAkBH,oBAAQF,EAAUE,oBAAQ,GAMzBI,UAJzBL,EAAQE,UACpBF,EAAQE,SAASC,KAAOH,EAAQE,SAASI,QAAU,MA4BrD,CACEJ,SAAU,KACVD,KAAM,GACNM,SAAS,EACTF,SAAS,EACTd,MAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAe,MAAOlB,EAAmBC,EAAOC,EAAWC,KAVzCgB,OAAaC,OAaZF,EAAUC,EAAVD,QAG2BV,cACjC,SACEa,EACAX,eACSW,KAASX,KACpBH,GALKe,OAASC,OAUVC,EAAQC,wBACLZ,oBACAK,GAIHE,EADkB,iBAATP,GAAqBA,EAAO,EACtB,CAAEI,SAAS,GAER,CAAEA,SAAS,EAAMN,KAAM,qBAEpBO,EAAMQ,OAAY,QACpCJ,GAGHT,eAAMA,MAAAA,EAAAA,EAAQS,EAAQT,oBAAQ,qBAJ1BD,GAONQ,EAAe,CAAER,SAAAA,EAAUK,SAAS,+DAEtC,CAACC,EAAOI,IAIVK,aAAU,WACRH,MACC,CAACA,QAUEI,EAAmB,SACvBC,aAIMnB,EAAqC,GAEvCmB,EAAU5B,QAAOS,EAAQT,MAAQ4B,EAAU5B,OAC3C4B,EAAU3B,YAAWQ,EAAQR,UAAY2B,EAAU3B,WACnD2B,EAAU1B,YAAWO,EAAQP,UAAY0B,EAAU1B,WAGvDO,EAAQQ,MAAQlB,YACdU,EAAQT,qBAASkB,EAAYlB,gBAC7BS,EAAQR,yBAAaiB,EAAYjB,oBACjCQ,EAAQP,yBAAagB,EAAYhB,WAGnCiB,EAAeV,WAGjBiB,aAAU,WACRC,EAAiB,CAAE3B,MAAAA,EAAOC,UAAAA,EAAWC,UAAAA,MACpC,CAACF,EAAOC,EAAWC,IAEf,MACAgB,GAAaG,QAAAA,IAClBC,EAjCc,WACVJ,EAAYP,WAAaO,EAAYF,SAAWE,EAAYJ,SAC9DS,EAAML,EAAYP,SAASC,KAAO,IAiCpCe,EACAJ"}

@@ -164,3 +164,3 @@ import { useReducer, useCallback, useEffect } from 'react';

request: request
}), requestDispatch, getMore, setAlgoliaConfig];
}), requestDispatch, getMore, setAlgoliaConfig, query];
}

@@ -167,0 +167,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"use-algolia.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","generateSearchReducer","prevState","updates","gotMore","response","page","hits","hasMore","nbPages","useAlgolia","initialRequest","useReducer","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","getMore","setAlgoliaConfig","newConfig"],"mappings":"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"}
{"version":3,"file":"use-algolia.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { useReducer, useCallback, useEffect } from 'react';\nimport algoliasearch, { SearchIndex } from 'algoliasearch';\nimport { RequestOptions } from '@algolia/transporter';\nimport { SearchOptions, SearchResponse } from '@algolia/client-search';\n\n/**\n * Creates the Algolia search client and initialises the specified index.\n * @param appId Algolia app ID\n * @param searchKey API key to search this index\n * @param indexName Index to initialise\n */\nexport const createAlgoliaIndex = (\n appId?: string,\n searchKey?: string,\n indexName?: string\n) => {\n if (!appId || !searchKey || !indexName) return null;\n return algoliasearch(appId, searchKey).initIndex(indexName);\n};\n\n/** Current request state, hits retrieved, and loading status. */\ninterface SearchState<Hit> {\n /** Algolia SearchResponse object — contains only last page of hits retrieved */\n response: SearchResponse<Hit> | null;\n /** Contains all hits for search query, including all pages retrieved */\n hits: SearchResponse<Hit>['hits'];\n /** Set when loading initially or loading more hits */\n loading: boolean;\n /** Flag set if there are more pages to be retrieved */\n hasMore: boolean;\n /** Algolia App ID */\n appId: string;\n /** API key to search the index */\n searchKey: string;\n /** Algolia index to query */\n indexName: string;\n /** The Algolia search index created */\n index: SearchIndex | null;\n}\n\n/**\n * Updates hook’s internal `SearchState`. Handles:\n * - Checking if there are more pages that can be retrieved\n * - Concatenating hits if we queried a new page\n * @param prevState See `SearchState` interface\n * @param updates Updates to `SearchState`\n */\nconst generateSearchReducer = <Hit>() => (\n prevState: SearchState<Hit>,\n updates: Partial<SearchState<Hit>>\n): SearchState<Hit> => {\n const gotMore = updates?.response?.page && updates?.response?.page > 0;\n\n const hits =\n gotMore && updates.response\n ? [...prevState.hits, ...updates.response.hits]\n : // If we’re not getting results from a new page, `hits` is set to:\n // 1. overwrite `hits` from `updates` (when resetting query),\n // 2. use the latest `hits` from the response,\n // 3. use `hits` from the previous state, or\n // 4. an empty array\n updates.hits ?? updates.response?.hits ?? prevState.hits ?? [];\n\n const hasMore = updates.response\n ? updates.response.page < updates.response.nbPages - 1\n : false;\n\n return { ...prevState, ...updates, hits, hasMore };\n};\n\n/**\n * Hook to make Algolia search queries with built-in support for pagination.\n * @param appId Algolia app ID\n * @param searchKey API key to search the index\n * @param indexName Algolia index to query\n * @param initialRequest Initial `SearchOptions` object sent to Algolia request\n * @returns The following array:\n * 1. `searchState`: containing `hits` and `loading`,\n * 2. `requestDispatch` to update `SearchOptions` passed to Algolia — see\n * https://www.algolia.com/doc/api-reference/search-api-parameters/, and\n * 3. `getMore` to get the next page of results\n * 4. `setAlgoliaConfig` to update the Algolia index to use\n */\nexport function useAlgolia<Hit = any>(\n appId: string,\n searchKey: string,\n indexName: string,\n initialRequest: RequestOptions & SearchOptions = {}\n) {\n // Stores response status\n const [searchState, searchDispatch] = useReducer(\n generateSearchReducer<Hit>(),\n {\n response: null,\n hits: [],\n loading: false,\n hasMore: false,\n appId,\n searchKey,\n indexName,\n index: createAlgoliaIndex(appId, searchKey, indexName),\n }\n );\n const { index } = searchState;\n\n // Store the `SearchOptions` request object that can shallow-merge updates\n const [request, requestDispatch] = useReducer(\n (\n prev: RequestOptions & SearchOptions,\n updates: RequestOptions & SearchOptions\n ) => ({ ...prev, ...updates }),\n initialRequest\n );\n\n // Query algolia with search text + filters\n // Function will be recreated when `SearchOptions` request object changes\n const query = useCallback(\n async (page?: number) => {\n if (!index) return;\n\n // Set loading\n if (typeof page === 'number' && page > 0)\n searchDispatch({ loading: true });\n // If we’re not getting a new page, reset the hits\n else searchDispatch({ loading: true, hits: [] });\n\n const response = await index.search<Hit>('', {\n ...request,\n // Allow getMore() to work even if the user\n // has set page in requestDispatch\n page: page ?? request.page ?? 0,\n });\n\n searchDispatch({ response, loading: false });\n },\n [index, request]\n );\n\n // Get completely new query when `query` function is recreated above\n useEffect(() => {\n query();\n }, [query]);\n\n // Get more by incrementing the page. Does nothing if we’re still waiting\n // on new results to arrive or if there are no more pages to be loaded\n const getMore = () => {\n if (searchState.response && !searchState.loading && searchState.hasMore)\n query(searchState.response.page + 1);\n };\n\n // Updates Algolia config and creates a new index, then updates state\n const setAlgoliaConfig = (\n newConfig: Partial<\n Pick<SearchState<Hit>, 'appId' | 'searchKey' | 'indexName'>\n >\n ) => {\n const updates: Partial<SearchState<Hit>> = {};\n // Only pass updated config items that are not undefined\n if (newConfig.appId) updates.appId = newConfig.appId;\n if (newConfig.searchKey) updates.searchKey = newConfig.searchKey;\n if (newConfig.indexName) updates.indexName = newConfig.indexName;\n\n // Generate new index with latest data\n updates.index = createAlgoliaIndex(\n updates.appId ?? searchState.appId,\n updates.searchKey ?? searchState.searchKey,\n updates.indexName ?? searchState.indexName\n );\n\n searchDispatch(updates);\n };\n // Update config when main useAlgolia props update\n useEffect(() => {\n setAlgoliaConfig({ appId, searchKey, indexName });\n }, [appId, searchKey, indexName]);\n\n return [\n { ...searchState, request },\n requestDispatch,\n getMore,\n setAlgoliaConfig,\n query,\n ] as [\n typeof searchState & { request: typeof request },\n typeof requestDispatch,\n typeof getMore,\n typeof setAlgoliaConfig,\n typeof query\n ];\n}\n\nexport default useAlgolia;\n"],"names":["createAlgoliaIndex","appId","searchKey","indexName","algoliasearch","initIndex","generateSearchReducer","prevState","updates","gotMore","response","page","hits","hasMore","nbPages","useAlgolia","initialRequest","useReducer","loading","index","searchState","searchDispatch","prev","request","requestDispatch","query","useCallback","search","useEffect","getMore","setAlgoliaConfig","newConfig"],"mappings":"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"}

@@ -12,3 +12,3 @@ {

],
"version": "1.4.1",
"version": "1.5.0",
"license": "MIT",

@@ -15,0 +15,0 @@ "author": "Sidney Alcantara",