{ "version": 3, "sources": ["../javascripts/actions/search.ts"], "sourcesContent": ["import type { Dispatch as ReduxDispatch } from '@reduxjs/toolkit';\n\nimport type { ElasticSearchResponse, Facet } from '../@types/ElasticSearchResponse';\nimport type { ElasticVehicle } from '../@types/ElasticVehicle';\nimport type { BaseAction } from '../@types/actions';\nimport * as http from '../Http';\nimport { buildGetRequest } from '../Http/requestTemplates';\nimport type QueryFilter from '../helpers/query-filter';\nimport * as promises from '../utils/promises';\nimport requestCache from '../utils/request-cache';\n\nexport const REQ_SEARCH = 'REQ/SEARCH';\nexport const RCV_SEARCH = 'RCV/SEARCH';\ntype REQ_SEARCH_TYPE = BaseAction & {\n searchQueryParams: string;\n storeFacets: boolean;\n};\ntype RCV_SEARCH_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n searchQueryParams: string;\n storeFacets: boolean;\n};\n\nexport const REQ_SEARCH_FACETS = 'REQ/SEARCH_FACETS';\nexport const RCV_SEARCH_FACETS = 'RCV/SEARCH_FACETS';\ntype REQ_SEARCH_FACETS_TYPE = BaseAction;\ntype RCV_SEARCH_FACETS_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\n\nexport const REQ_CLEAR = 'REQ/SEARCH_CLEAR';\ntype REQ_CLEAR_TYPE = BaseAction;\n\nexport const REQUEST_FAILED = 'SEARCH/REQUEST_FAILED';\ntype REQUEST_FAILED_TYPE = BaseAction & {\n action: typeof REQ_SEARCH | typeof REQ_SEARCH_FACETS;\n};\n\nexport type SEARCH_ACTION =\n | REQ_SEARCH_TYPE\n | RCV_SEARCH_TYPE\n | REQ_SEARCH_FACETS_TYPE\n | RCV_SEARCH_FACETS_TYPE\n | REQ_CLEAR_TYPE\n | REQUEST_FAILED_TYPE;\n\ntype Dispatch = ReduxDispatch;\n\nconst getFilterQueryString = (queryFilter: QueryFilter) => {\n if (queryFilter.isEmpty()) return '';\n\n return `?filter=${queryFilter.toQueryStringFilter()}`;\n};\n\nlet _cancelSearch = () => false;\nexport const search =\n (queryFilter: QueryFilter, storeFacets = true) =>\n async (dispatch: Dispatch) => {\n const key = `${REQ_SEARCH}/${queryFilter.toString()}`;\n if (requestCache.isPending(key)) {\n return;\n }\n requestCache.isPending(key, true);\n\n _cancelSearch();\n dispatch({\n type: REQ_SEARCH,\n searchQueryParams: queryFilter.toString(),\n storeFacets,\n });\n\n const { promise, cancel } = promises.cancelable(\n http.json>(\n `/api/search${getFilterQueryString(queryFilter)}`,\n buildGetRequest({ scrapeProbabilityScore: true }),\n ),\n );\n _cancelSearch = cancel;\n\n try {\n const response = await promise;\n dispatch({\n type: RCV_SEARCH,\n response: response.response,\n searchQueryParams: queryFilter.toString(),\n storeFacets,\n });\n } catch (err) {\n const _isCancelled = (err as { isCancelled: promises.CancelablePromiseRejection })\n .isCancelled;\n if (!_isCancelled) {\n dispatch({\n type: REQUEST_FAILED,\n action: REQ_SEARCH,\n });\n }\n } finally {\n requestCache.isPending(key, false);\n }\n };\n\nexport const callbackSearch = async (\n queryFilter: QueryFilter,\n callback: (documents: ElasticVehicle[], numberOfHits: number, facets: Facet[] | null) => void,\n) => {\n try {\n const response = await http.json>(\n `/api/search${getFilterQueryString(queryFilter)}`,\n buildGetRequest({ scrapeProbabilityScore: false }),\n );\n http.validateResponse(response);\n callback(\n response.response.documentList.documents,\n response.response.documentList.numberOfHits,\n response.response.facets,\n );\n } catch (_e) {\n // ignore\n }\n};\n\nexport const callbackSearchFull = async (\n queryFilter: QueryFilter,\n callback: (documents: ElasticSearchResponse) => void,\n) => {\n try {\n const response = await http.json>(\n `/api/search${getFilterQueryString(queryFilter)}`,\n buildGetRequest({ scrapeProbabilityScore: true }),\n );\n http.validateResponse(response);\n callback(response.response);\n } catch (_e) {\n // ignore\n }\n};\n\nexport const facets = () => async (dispatch: Dispatch) => {\n if (requestCache.isPending(REQ_SEARCH_FACETS)) {\n return;\n }\n requestCache.isPending(REQ_SEARCH_FACETS, true);\n\n try {\n dispatch({ type: REQ_SEARCH_FACETS });\n\n const response = await http.json>(\n '/api/facets',\n buildGetRequest(),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_SEARCH_FACETS,\n response: response.response,\n });\n } catch (_e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_SEARCH_FACETS });\n }\n requestCache.isPending(REQ_SEARCH_FACETS, false);\n};\n\nexport const clear = () => (dispatch: Dispatch) => dispatch({ type: REQ_CLEAR });\n"], "mappings": "sJAWO,IAAMA,EAAa,aACbC,EAAa,aAWbC,EAAoB,oBACpBC,EAAoB,oBAMpBC,EAAY,mBAGZC,EAAiB,wBAexBC,EAAwBC,GACxBA,EAAY,QAAQ,EAAU,GAE3B,WAAWA,EAAY,oBAAoB,CAAC,GAGjDC,EAAgB,IAAM,GACbC,EACX,CAACF,EAA0BG,EAAc,KACzC,MAAOC,GAAuB,CAC5B,IAAMC,EAAM,GAAGZ,CAAU,IAAIO,EAAY,SAAS,CAAC,GACnD,GAAIM,EAAa,UAAUD,CAAG,EAC5B,OAEFC,EAAa,UAAUD,EAAK,EAAI,EAEhCJ,EAAc,EACdG,EAAwB,CACtB,KAAMX,EACN,kBAAmBO,EAAY,SAAS,EACxC,YAAAG,CACF,CAAC,EAED,GAAM,CAAE,QAAAI,EAAS,OAAAC,CAAO,EAAaC,EAC9BC,EACH,cAAcX,EAAqBC,CAAW,CAAC,GAC/CW,EAAgB,CAAE,uBAAwB,EAAK,CAAC,CAClD,CACF,EACAV,EAAgBO,EAEhB,GAAI,CACF,IAAMI,EAAW,MAAML,EACvBH,EAAwB,CACtB,KAAMV,EACN,SAAUkB,EAAS,SACnB,kBAAmBZ,EAAY,SAAS,EACxC,YAAAG,CACF,CAAC,CACH,OAASU,EAAK,CACUA,EACnB,aAEDT,EAAwB,CACtB,KAAMN,EACN,OAAQL,CACV,CAAC,CAEL,QAAE,CACAa,EAAa,UAAUD,EAAK,EAAK,CACnC,CACF,EAEWS,EAAiB,MAC5Bd,EACAe,IACG,CACH,GAAI,CACF,IAAMH,EAAW,MAAWF,EAC1B,cAAcX,EAAqBC,CAAW,CAAC,GAC/CW,EAAgB,CAAE,uBAAwB,EAAM,CAAC,CACnD,EACKK,EAAiBJ,CAAQ,EAC9BG,EACEH,EAAS,SAAS,aAAa,UAC/BA,EAAS,SAAS,aAAa,aAC/BA,EAAS,SAAS,MACpB,CACF,MAAa,CAEb,CACF,EAEaK,EAAqB,MAChCjB,EACAe,IACG,CACH,GAAI,CACF,IAAMH,EAAW,MAAWF,EAC1B,cAAcX,EAAqBC,CAAW,CAAC,GAC/CW,EAAgB,CAAE,uBAAwB,EAAK,CAAC,CAClD,EACKK,EAAiBJ,CAAQ,EAC9BG,EAASH,EAAS,QAAQ,CAC5B,MAAa,CAEb,CACF,EAEaM,EAAS,IAAM,MAAOd,GAAuB,CACxD,GAAI,CAAAE,EAAa,UAAUX,CAAiB,EAG5C,CAAAW,EAAa,UAAUX,EAAmB,EAAI,EAE9C,GAAI,CACFS,EAAwB,CAAE,KAAMT,CAAkB,CAAC,EAEnD,IAAMiB,EAAW,MAAWF,EAC1B,cACAC,EAAgB,CAClB,EACKK,EAAiBJ,CAAQ,EAC9BR,EAAwB,CACtB,KAAMR,EACN,SAAUgB,EAAS,QACrB,CAAC,CACH,MAAa,CACXR,EAAwB,CAAE,KAAMN,EAAgB,OAAQH,CAAkB,CAAC,CAC7E,CACAW,EAAa,UAAUX,EAAmB,EAAK,EACjD,EAEawB,EAAQ,IAAOf,GAAuBA,EAAwB,CAAE,KAAMP,CAAU,CAAC", "names": ["REQ_SEARCH", "RCV_SEARCH", "REQ_SEARCH_FACETS", "RCV_SEARCH_FACETS", "REQ_CLEAR", "REQUEST_FAILED", "getFilterQueryString", "queryFilter", "_cancelSearch", "search", "storeFacets", "dispatch", "key", "request_cache_default", "promise", "cancel", "cancelable", "json", "buildGetRequest", "response", "err", "callbackSearch", "callback", "validateResponse", "callbackSearchFull", "facets", "clear"] }