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.3.0
to
1.3.1
+7
-8
dist/use-algolia.cjs.development.js

@@ -110,9 +110,6 @@ 'use strict';

var query = react.useCallback(function (page) {
if (page === void 0) {
page = 0;
}
try {
if (!index) return Promise.resolve(); // Set loading
try {
if (!index) return Promise.resolve();
if (page > 0) searchDispatch({
if (typeof page === 'number' && page > 0) searchDispatch({
loading: true

@@ -124,5 +121,7 @@ }); // If we’re not getting a new page, reset the hits

});
return Promise.resolve(index.search('', _extends({
return Promise.resolve(index.search('', _extends({}, request, {
// Allow getMore() to work even if the user
// has set page in requestDispatch
page: page
}, request))).then(function (response) {
}))).then(function (response) {
searchDispatch({

@@ -129,0 +128,0 @@ response: response,

@@ -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 = 0) => {\n if (!index) return;\n\n if (page > 0) 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 page,\n ...request,\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\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,\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\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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"}

@@ -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 i(e,r,i,a){void 0===a&&(a={});var t=n.useReducer((function(e,n){var r,s,i,a,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!==(i=null!==(a=null!==(t=n.hits)&&void 0!==t?t:null===(l=n.response)||void 0===l?void 0:l.hits)&&void 0!==a?a:e.hits)&&void 0!==i?i:[],hasMore:!!n.response&&n.response.page<n.response.nbPages-1})}),{response:null,hits:[],loading:!1,hasMore:!1,appId:e,searchKey:r,indexName:i,index:s(e,r,i)}),l=t[0],u=t[1],d=l.index,p=n.useReducer((function(e,n){return o({},e,{},n)}),a),c=p[0],v=p[1],h=n.useCallback((function(e){void 0===e&&(e=0);try{return d?(u(e>0?{loading:!0}:{loading:!0,hits:[]}),Promise.resolve(d.search("",o({page:e},c))).then((function(e){u({response:e,loading:!1})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[d,c]);return n.useEffect((function(){h()}),[h]),[o({},l,{request:c}),v,function(){l.response&&!l.loading&&l.hasMore&&h(l.response.page+1)},function(e){var n,r,o,i={};e.appId&&(i.appId=e.appId),e.searchKey&&(i.searchKey=e.searchKey),e.indexName&&(i.indexName=e.indexName),i.index=s(null!==(n=i.appId)&&void 0!==n?n:l.appId,null!==(r=i.searchKey)&&void 0!==r?r:l.searchKey,null!==(o=i.indexName)&&void 0!==o?o:l.indexName),u(i)}]}exports.createAlgoliaIndex=s,exports.default=i,exports.useAlgolia=i;
"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 i(e,r,i,a){void 0===a&&(a={});var t=n.useReducer((function(e,n){var r,s,i,a,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!==(i=null!==(a=null!==(t=n.hits)&&void 0!==t?t:null===(l=n.response)||void 0===l?void 0:l.hits)&&void 0!==a?a:e.hits)&&void 0!==i?i:[],hasMore:!!n.response&&n.response.page<n.response.nbPages-1})}),{response:null,hits:[],loading:!1,hasMore:!1,appId:e,searchKey:r,indexName:i,index:s(e,r,i)}),l=t[0],u=t[1],d=l.index,p=n.useReducer((function(e,n){return o({},e,{},n)}),a),c=p[0],h=p[1],v=n.useCallback((function(e){try{return d?(u("number"==typeof e&&e>0?{loading:!0}:{loading:!0,hits:[]}),Promise.resolve(d.search("",o({},c,{page:e}))).then((function(e){u({response:e,loading:!1})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[d,c]);return n.useEffect((function(){v()}),[v]),[o({},l,{request:c}),h,function(){l.response&&!l.loading&&l.hasMore&&v(l.response.page+1)},function(e){var n,r,o,i={};e.appId&&(i.appId=e.appId),e.searchKey&&(i.searchKey=e.searchKey),e.indexName&&(i.indexName=e.indexName),i.index=s(null!==(n=i.appId)&&void 0!==n?n:l.appId,null!==(r=i.searchKey)&&void 0!==r?r:l.searchKey,null!==(o=i.indexName)&&void 0!==o?o:l.indexName),u(i)}]}exports.createAlgoliaIndex=s,exports.default=i,exports.useAlgolia=i;
//# 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 = 0) => {\n if (!index) return;\n\n if (page > 0) 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 page,\n ...request,\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\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","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,YAAAA,IAAAA,EAAO,cACPK,GAESE,EAAVP,EAAO,EAAkB,CAAEI,SAAS,GAEpB,CAAEA,SAAS,EAAMN,KAAM,qBAEpBO,EAAMQ,OAAY,MACvCb,KAAAA,GACGS,oBAFCV,GAKNQ,EAAe,CAAER,SAAAA,EAAUK,SAAS,+DAEtC,CAACC,EAAOI,WAIVK,aAAU,WACRH,MACC,CAACA,IA+BG,MACAL,GAAaG,QAAAA,IAClBC,EA7Bc,WACVJ,EAAYP,WAAaO,EAAYF,SAAWE,EAAYJ,SAC9DS,EAAML,EAAYP,SAASC,KAAO,IAIb,SACvBe,aAIMlB,EAAqC,GAEvCkB,EAAU3B,QAAOS,EAAQT,MAAQ2B,EAAU3B,OAC3C2B,EAAU1B,YAAWQ,EAAQR,UAAY0B,EAAU1B,WACnD0B,EAAUzB,YAAWO,EAAQP,UAAYyB,EAAUzB,WAGvDO,EAAQQ,MAAQlB,YACdU,EAAQT,qBAASkB,EAAYlB,gBAC7BS,EAAQR,yBAAaiB,EAAYjB,oBACjCQ,EAAQP,yBAAagB,EAAYhB,WAGnCiB,EAAeV"}
{"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,\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\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","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,cACAK,GAIHE,EADkB,iBAATP,GAAqBA,EAAO,EACtB,CAAEI,SAAS,GAER,CAAEA,SAAS,EAAMN,KAAM,qBAEpBO,EAAMQ,OAAY,QACpCJ,GAGHT,KAAAA,qBAJID,GAONQ,EAAe,CAAER,SAAAA,EAAUK,SAAS,+DAEtC,CAACC,EAAOI,WAIVK,aAAU,WACRH,MACC,CAACA,IA+BG,MACAL,GAAaG,QAAAA,IAClBC,EA7Bc,WACVJ,EAAYP,WAAaO,EAAYF,SAAWE,EAAYJ,SAC9DS,EAAML,EAAYP,SAASC,KAAO,IAIb,SACvBe,aAIMlB,EAAqC,GAEvCkB,EAAU3B,QAAOS,EAAQT,MAAQ2B,EAAU3B,OAC3C2B,EAAU1B,YAAWQ,EAAQR,UAAY0B,EAAU1B,WACnD0B,EAAUzB,YAAWO,EAAQP,UAAYyB,EAAUzB,WAGvDO,EAAQQ,MAAQlB,YACdU,EAAQT,qBAASkB,EAAYlB,gBAC7BS,EAAQR,yBAAaiB,EAAYjB,oBACjCQ,EAAQP,yBAAagB,EAAYhB,WAGnCiB,EAAeV"}

@@ -104,9 +104,6 @@ import { useReducer, useCallback, useEffect } from 'react';

var query = useCallback(function (page) {
if (page === void 0) {
page = 0;
}
try {
if (!index) return Promise.resolve(); // Set loading
try {
if (!index) return Promise.resolve();
if (page > 0) searchDispatch({
if (typeof page === 'number' && page > 0) searchDispatch({
loading: true

@@ -118,5 +115,7 @@ }); // If we’re not getting a new page, reset the hits

});
return Promise.resolve(index.search('', _extends({
return Promise.resolve(index.search('', _extends({}, request, {
// Allow getMore() to work even if the user
// has set page in requestDispatch
page: page
}, request))).then(function (response) {
}))).then(function (response) {
searchDispatch({

@@ -123,0 +122,0 @@ response: response,

@@ -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 = 0) => {\n if (!index) return;\n\n if (page > 0) 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 page,\n ...request,\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\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,\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\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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"}

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

],
"version": "1.3.0",
"version": "1.3.1",
"license": "MIT",

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