@211la/search-client 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +127 -19
- package/dist/search-client.min.js +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -60,6 +60,16 @@ function __generator(thisArg, body) {
|
|
|
60
60
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
61
61
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
62
62
|
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function __spreadArray(to, from, pack) {
|
|
66
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
67
|
+
if (ar || !(i in from)) {
|
|
68
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
69
|
+
ar[i] = from[i];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return to.concat(ar || from);
|
|
63
73
|
}
|
|
64
74
|
|
|
65
75
|
var INDEX_NAME = 'instant_search';
|
|
@@ -121,9 +131,9 @@ var sanitizeKeyword = function (keyword) {
|
|
|
121
131
|
'/',
|
|
122
132
|
];
|
|
123
133
|
characters.forEach(function (char) {
|
|
124
|
-
keyword = keyword.
|
|
134
|
+
keyword = keyword.replaceAll(char, ' ');
|
|
125
135
|
});
|
|
126
|
-
return keyword.
|
|
136
|
+
return keyword.replaceAll(/\s+/g, ' ');
|
|
127
137
|
};
|
|
128
138
|
|
|
129
139
|
function sanitizeForES(value) {
|
|
@@ -157,7 +167,12 @@ var keyword = (function (options, settings) {
|
|
|
157
167
|
});
|
|
158
168
|
|
|
159
169
|
var sanitizeFilterItem = function (item) {
|
|
160
|
-
var
|
|
170
|
+
var colonIndex = item.indexOf(':');
|
|
171
|
+
if (colonIndex === -1) {
|
|
172
|
+
return item;
|
|
173
|
+
}
|
|
174
|
+
var key = item.substring(0, colonIndex);
|
|
175
|
+
var value = item.substring(colonIndex + 1);
|
|
161
176
|
var sanitizedValue = sanitizeKeyword(value);
|
|
162
177
|
sanitizedValue = sanitizedValue
|
|
163
178
|
.split(' ')
|
|
@@ -166,29 +181,122 @@ var sanitizeFilterItem = function (item) {
|
|
|
166
181
|
.join(' ');
|
|
167
182
|
return key + ":" + sanitizedValue;
|
|
168
183
|
};
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
|
|
184
|
+
var normalizeCanadianPostalCode = function (postalCode) {
|
|
185
|
+
var match = postalCode.match(/^([A-Z]\d[A-Z])[\s-]?(\d[A-Z]\d)$/);
|
|
186
|
+
if (match) {
|
|
187
|
+
return match[1] + " " + match[2];
|
|
172
188
|
}
|
|
173
|
-
return
|
|
174
|
-
.map(function (item) {
|
|
175
|
-
if (typeof item === 'string') {
|
|
176
|
-
return sanitizeFilterItem(item);
|
|
177
|
-
}
|
|
178
|
-
var sanitizedItems = item.map(function (i) { return sanitizeFilterItem(i); });
|
|
179
|
-
return "(" + sanitizedItems.join(' OR ') + ")";
|
|
180
|
-
})
|
|
181
|
-
.join(' AND ');
|
|
189
|
+
return null;
|
|
182
190
|
};
|
|
183
|
-
var
|
|
184
|
-
|
|
191
|
+
var buildZipCodeTermQuery = function (zipCode) {
|
|
192
|
+
var normalizedPostalCode = normalizeCanadianPostalCode(zipCode);
|
|
193
|
+
if (normalizedPostalCode) {
|
|
194
|
+
var zipPrefix = normalizedPostalCode.split(' ')[0];
|
|
195
|
+
var wildcardZip = zipPrefix + " ***";
|
|
196
|
+
return {
|
|
197
|
+
bool: {
|
|
198
|
+
should: [
|
|
199
|
+
{
|
|
200
|
+
term: {
|
|
201
|
+
'metadata.serviceAreaZipCodes.keyword': normalizedPostalCode,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
term: {
|
|
206
|
+
'metadata.serviceAreaZipCodes.keyword': wildcardZip,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
minimum_should_match: 1,
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
term: {
|
|
216
|
+
'metadata.serviceAreaZipCodes.keyword': zipCode,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
var isZipCodeFilter = function (filter) {
|
|
221
|
+
return filter.includes('metadata.serviceAreaZipCodes:');
|
|
222
|
+
};
|
|
223
|
+
var extractZipCodeValue = function (filter) {
|
|
224
|
+
var match = filter.match(/metadata\.serviceAreaZipCodes:"([^"]+)"/);
|
|
225
|
+
return match ? match[1] : null;
|
|
226
|
+
};
|
|
227
|
+
var buildQueryFromFilters = function (filters, zipCodeQuery) {
|
|
228
|
+
var queries = [];
|
|
229
|
+
if (filters.length > 0) {
|
|
230
|
+
var queryStringParts = [];
|
|
231
|
+
for (var _i = 0, filters_1 = filters; _i < filters_1.length; _i++) {
|
|
232
|
+
var item = filters_1[_i];
|
|
233
|
+
if (typeof item === 'string') {
|
|
234
|
+
queryStringParts.push(sanitizeFilterItem(item));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
var sanitizedItems = item.map(function (i) { return sanitizeFilterItem(i); });
|
|
238
|
+
queryStringParts.push("(" + sanitizedItems.join(' OR ') + ")");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (queryStringParts.length > 0) {
|
|
242
|
+
queries.push({
|
|
243
|
+
query_string: {
|
|
244
|
+
query: queryStringParts.join(' AND '),
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (zipCodeQuery) {
|
|
250
|
+
queries.push(zipCodeQuery);
|
|
251
|
+
}
|
|
252
|
+
if (queries.length === 0) {
|
|
185
253
|
return null;
|
|
186
254
|
}
|
|
255
|
+
if (queries.length === 1) {
|
|
256
|
+
return queries[0];
|
|
257
|
+
}
|
|
187
258
|
return {
|
|
188
|
-
|
|
189
|
-
|
|
259
|
+
bool: {
|
|
260
|
+
must: queries,
|
|
190
261
|
},
|
|
191
262
|
};
|
|
263
|
+
};
|
|
264
|
+
var facetFilters = (function (facetFilters) {
|
|
265
|
+
if (!facetFilters || !facetFilters.length) {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
if (typeof facetFilters === 'string') {
|
|
269
|
+
if (isZipCodeFilter(facetFilters)) {
|
|
270
|
+
var zipCodeValue_1 = extractZipCodeValue(facetFilters);
|
|
271
|
+
if (zipCodeValue_1) {
|
|
272
|
+
var normalizedZipCode = zipCodeValue_1.toUpperCase().trim();
|
|
273
|
+
return buildZipCodeTermQuery(normalizedZipCode);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
query_string: {
|
|
278
|
+
query: facetFilters,
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
var zipCodeValue = null;
|
|
283
|
+
var otherFilters = [];
|
|
284
|
+
for (var _i = 0, facetFilters_1 = facetFilters; _i < facetFilters_1.length; _i++) {
|
|
285
|
+
var item = facetFilters_1[_i];
|
|
286
|
+
if (typeof item === 'string' && isZipCodeFilter(item)) {
|
|
287
|
+
var extracted = extractZipCodeValue(item);
|
|
288
|
+
if (extracted && !zipCodeValue) {
|
|
289
|
+
zipCodeValue = extracted;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
otherFilters.push(Array.isArray(item) ? __spreadArray([], item) : item);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
var zipCodeQuery = zipCodeValue
|
|
297
|
+
? buildZipCodeTermQuery(zipCodeValue.toUpperCase().trim())
|
|
298
|
+
: undefined;
|
|
299
|
+
return buildQueryFromFilters(otherFilters, zipCodeQuery);
|
|
192
300
|
});
|
|
193
301
|
|
|
194
302
|
var buildElasticSearchQuery = function (settings, instantSearchParams) {
|
|
@@ -12,4 +12,4 @@ var SearchWidget=function(e){"use strict";
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}c((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}var i=function(e){var t=e.indexOf(".");return-1===t?[e]:[e.slice(0,t),e.slice(t+1)]},a=function(e,t,n){var r=i(t);if(1!==r.length){var o=r[0],s=r[1];e[o]||(e[o]={}),a(e[o],s,n)}else e[r[0]]=n},o=function(e,t){var n=i(t);if(1===n.length){var r=e[n[0]];return void 0===r?null:r}var a=n[0],s=n[1],c=e[a];return c?o(c,s):null},s=function(e){return["+"," -","&&","||","!","(",")","{","}","[","]","^","~","*","?",":","/"].forEach((function(t){e=e.replace(t," ")})),e.replace(/\s+/g," ")};function c(e){return e.split(" ").filter(Boolean).map((function(e){return s(e)+"*"})).join(" ")}var u=function(e,n){var r;if(!e.query)return null;var i=e.query.split(":"),a=i.length>1?i[0]+":"+c(i[1]):c(e.query),o=(e.restrictSearchableAttributes?e.restrictSearchableAttributes:null!==(r=n.keywordSearchFields)&&void 0!==r?r:[]).map((function(e){return n.fieldSettings&&n.fieldSettings[e]?e+"^"+n.fieldSettings[e].boost:e}));return{query_string:t({query:a,default_operator:"AND"},o.length&&{fields:o})}},l=function(e){var t=e.split(":"),n=t[0],r=t[1],i=s(r);return n+":"+(i=i.split(" ").filter(Boolean).map((function(e){return""+e})).join(" "))},f=function(e){return e&&e.length?{query_string:{query:(t=e,"string"==typeof t?t:t.map((function(e){return"string"==typeof e?l(e):"("+e.map((function(e){return l(e)})).join(" OR ")+")"})).join(" AND "))}}:null;var t},d=function(e,t){var n,r=function(e,t){var n=[u(t,e),f(t.facetFilters)].filter((function(e){return null!==e}));return n.length?n:"*"}(e,t),i={query:"string"==typeof r?r:JSON.stringify(r)};e.networkId&&(i.networkId=e.networkId),e.sortByDistance&&(i.sortByDistance=e.sortByDistance),e.zipcode&&(i.zipcode=e.zipcode),t.filters&&(i.filters=JSON.stringify((n=t.filters)?n.map((function(e){var t,n;return"exists"===e.queryType?{exists:{field:e.field}}:"raw"===e.queryType?e.query:((t={})[e.queryType]=((n={})[e.field]=e.query,n),t)})).filter(Boolean):[]));var a=t.hitsPerPage||20;if(i.$limit=a,i.$skip=a&&a*t.page||0,t.aroundLatLng&&t.aroundRadius){var o=t.aroundLatLng.split(",",2).map((function(e){return parseFloat(e.trim())})),s=o[0],c=o[1];i.distance=Number(t.aroundRadius),i.distanceUnit="mi",i.lat=s,i.lon=c}return t.openNow&&(i.openAtDay=t.openAtDay,i.openAtMinute=t.openAtMinute),t.facets&&t.facets.length&&(i.aggregations=JSON.stringify(t.facets.reduce((function(e,n){return e[n]={terms:{field:n+".keyword",min_doc_count:(null==t?void 0:t.facetMinDocCount)||0,size:100}},e}),{}))),i},h=function(){function e(e,t){this.settings=e,this.options=t,this.body=this.getNexus211QueryParams()}return e.prototype.getKeywordSearchFields=function(){return this.options.restrictSearchableAttributes?this.options.restrictSearchableAttributes:this.settings.keywordSearchFields},e.prototype.isSearchableAttributesRestricted=function(){var e;return(null===(e=this.options.restrictSearchableAttributes)||void 0===e?void 0:e.length)>0},e.prototype.getNexus211QueryParams=function(){return d(this.settings,this.options)},e}(),p=function(e,t){var n=t.options.query;if(!e)return{matchLevel:"none",matchedWords:[],value:e};var r="";"string"==typeof e?r=e:Array.isArray(e)&&e.length>0&&(r=e.join(" "));var i,a,o,s,c,u,l,f,d=r.toLowerCase().search(n.toLowerCase());return-1===d?{matchLevel:"none",matchedWords:[],value:e}:{fullyHighlighted:0===d&&r.length===n.length,matchLevel:"full",matchedWords:[n],value:(i={text:r,start:d,length:n.length,preTag:t.options.highlightPreTag,postTag:t.options.highlightPostTag},a=i.text,o=i.start,s=i.length,c=i.preTag,u=i.postTag,l=a.slice(0,o),f=a.slice(o+s),""+l+c+a.slice(o,o+s)+u+f)}},g=function(e,n){return n.map((function(n){return function(e,n){var r={};return e.getKeywordSearchFields().forEach((function(t){var i=o(n,t);i&&(Array.isArray(i)&&i.length>0&&"string"==typeof i[0]?a(r,t,i.map((function(t){return p(t,e)}))):"string"==typeof i?a(r,t,p(i,e)):console.warn('The value of field "'+t+'" is not a string or an array of strings. Skipping highlighting for this field.'))})),e.isSearchableAttributesRestricted()&&e.settings.keywordSearchFields.forEach((function(e){o(r,e)||a(r,e,{matchLevel:"none",matchedWords:[],value:o(n,e)})})),t(t({},n),{_highlightResult:r})}(e,t({objectID:n.id},n))}))},m=function(e){return e.aggregations?Object.entries(e.aggregations).reduce((function(e,t){var n=t[0],r=t[1];return e[n]=r.buckets.reduce((function(e,t){return e[t.key]=t.doc_count,e}),{}),e}),{}):{}},v=function(e,t){return{results:[{index:"instant_search",query:e.options.query,params:e.body.query,nbHits:t.__meta.total,hits:g(e,t.data),hitsPerPage:+t.__meta.perPage,page:e.options.page,nbPages:t.__meta.perPage?Math.ceil(t.__meta.total/t.__meta.perPage):0,processingTimeMS:1,exhaustiveNbHits:!0,exhaustiveFacetsCount:!0,facets:m(t)}]}},y=function(){function e(e){this.settings=t(t({},this.getDefaultSettings()),e)}return e.prototype.getDefaultSettings=function(){return{endpoint:"https://admin.211cs.org",searchUri:"/api/search",keywordSearchFields:["service.name","site.name","site.agency.name","site.agency.description"]}},e.prototype.search=function(e){return n(this,void 0,void 0,(function(){var t,n;return r(this,(function(r){switch(r.label){case 0:return t=new h(this.settings,e[0].params),[4,this.makeSearchRequest(t.body)];case 1:return n=r.sent(),[2,v(t,n)]}}))}))},e.prototype.makeSearchRequest=function(e){return n(this,void 0,void 0,(function(){var t,n;return r(this,(function(r){switch(r.label){case 0:if(!this.settings.token)throw new Error("You must provide a valid SearchApi or PublicSearchApi token. Visit https://admin.211cs.org to create one.");return[4,fetch(""+this.settings.endpoint+this.settings.searchUri,{headers:{cache:"no-cache",authorization:"SearchApi "+this.settings.token,"content-type":"application/json"},method:"POST",body:JSON.stringify({search:e})})];case 1:if(200!==(t=r.sent()).status)throw n=t.text(),new Error("Unexpected status "+t.status+": "+n);return[2,t.json()]}}))}))},e.prototype.searchForFacetValues=function(e){return n(this,void 0,void 0,(function(){var i=this;return r(this,(function(a){return[2,Promise.all(e.map((function(a){return n(i,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return n=new h(this.settings,t(t({},e[0].params),{facets:[e[0].params.facetName],hitsPerPage:0})),[4,this.makeSearchRequest(n.body)];case 1:return[2,{facetHits:r.sent().aggregations[a.params.facetName].buckets.map((function(e){return{value:e.key,highlighted:e.key,count:e.doc_count,isRefined:!1}})),exhaustiveFacetsCount:!0,processingTimeMS:1}]}}))}))})))]}))}))},e.prototype.addAlgoliaAgent=function(e,t){console.warn("Unhandled addAlgoliaAgent",e,t)},e.prototype.clearCache=function(){return console.warn("Unhandled clearCache"),Promise.resolve()},e}(),b=function(e){switch(typeof e){case"string":return parseFloat(e);case"number":return e;default:return null}};var S=function(e){if(!e.addresses||0===e.addresses.length)return null;var t=e.addresses[0];return{lat:b(t.latitude),lng:b(t.longitude),hit:e}},L=function(e,t){return function(n){var r,i=n.container,a=n.attribute,o=n.placeholder||"",s=(r=n.debounce||200,function(e){var t=null;return function(n){null!==t&&(clearTimeout(t),t=null);var i=n.target.value;t=setTimeout((function(){e(i),t=null}),r)}}),c=t&&"number"===t?"number":"search",u=e?"":"*";return{init:function(e){var t=e.helper;i.innerHTML='<input class="ais-SearchBox-input" type='+c+" placeholder="+o+' autocomplete="off" autocorrect="off" autocapitalize="off" maxlength="512">',i.querySelector("input").addEventListener("input",s((function(e){t.clearRefinements(a),e&&t.addFacetRefinement(a,[e+u]),t.search()})))},getWidgetSearchParameters:function(e){return e.addFacet(a)}}}},w=function(e){return'<li class="ais-RefinementList-item">\n <label class="ais-RefinementList-label">\n <input class="ais-RefinementList-checkbox" type="checkbox" value='+e+' />\n <span class="ais-RefinementList-labelText">'+e+" miles</span>\n </label>\n </li>"},R=L(!0,"number"),k=L(!0,"string"),x=L(!1,"string"),P=function(){};function A(e,n){return void 0===n&&(n=P),function(r){var i=r.attribute,a=r.transformItems,o=void 0===a?function(e){return e}:a;return{$$type:"cs.taxonomyRefinementList",init:function(n){e(t(t({},this.getWidgetRenderState(n)),{instantSearchInstance:n.instantSearchInstance}),!0)},render:function(n){e(t(t({},this.getWidgetRenderState(n)),{instantSearchInstance:n.instantSearchInstance}),!1)},getRenderState:function(e,n){var r;return t(t({},e),{taxonomyRefinementList:t(t({},e.taxonomyRefinementList),(r={},r[i]=this.getWidgetRenderState(n),r))})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,a=function(e){e.split("|").forEach((function(e){return n.isDisjunctiveRefined(i,e)?n.removeDisjunctiveFacetRefinement(i,e):n.addDisjunctiveFacetRefinement(i,e)})),n.search()};return t?{items:o(t.getRefinements(i)),refine:a,widgetParams:r}:{items:[],refine:a,widgetParams:r}},getWidgetUiState:function(e,n){var r,a=n.searchParameters;return t(t({},e),{taxonomyRefinementList:t(t({},e.taxonomyRefinementList),(r={},r[i]=a.getRefinements(i),r))})},getWidgetSearchParameters:function(e){return e.addDisjunctiveFacet(i)},dispose:function(){n()}}}}var q=function(e){return{render:function(t,n){var r=t.items,i=t.refine,a="string"==typeof e.container?document.querySelector(e.container):e.container;if(n)a.addEventListener("click",(function(e){if(e.target instanceof HTMLElement){var t=e.target.closest("input");t&&i(t.value)}}));else{var o=e.items.map((function(e){var t=e.label,n=e.value,i=n.split("|").every((function(e){return r.find((function(t){return"disjunctive"===t.type&&t.name===e}))}));return'\n <li>\n <label>\n <input\n type="checkbox"\n value="'+n+'"\n '+(i?"checked":"")+"\n />\n "+t+"\n </label>\n </li>\n "}));a.innerHTML="<ul>"+o.join("")+"</ul>"}},dispose:function(){}}};return e.SearchClient=y,e.connectTaxonomyRefinementList=A,e.createTaxonomyRefinementListRenderer=q,e.exactNumberFieldSearch=R,e.exactStringFieldSearch=k,e.googleMaps=function(e){var t=e.container,n=e.renderInfo,r=e.transformHits||S,i="string"==typeof t?document.querySelector(t):t,a=null,o={},s=new google.maps.InfoWindow;return{init:function(){a=new google.maps.Map(i,{})},render:function(e){if(a){Object.keys(o).forEach((function(e){o[e].marker.setMap(null),delete o[e]}));var t=function(e,t){return e.map(t).filter((function(e){return null!=e&&null!==e.lat&&null!==e.lng}))}(e.results.hits,r);t.forEach((function(e){if(!o[e.hit.id]){var t=new google.maps.Marker({position:{lat:e.lat,lng:e.lng},map:a});n&&t.addListener("click",(function(){s.setContent(n(e)),s.open(a,t)})),t.setMap(a),o[e.hit.id]={marker:t,data:e}}})),function(e,t){e.fitBounds(t.reduce((function(e,t){return e.extend(new google.maps.LatLng(t.lat,t.lng)),e}),new google.maps.LatLngBounds))}(a,t)}},dispose:function(e){},getWidgetState:function(e,t){return e},getWidgetSearchParameters:function(e,t){return e}}},e.locationDistanceFilter=function(e){var t=e.container,n=e.miles||[5,10,20,50];return{init:function(e){var r=e.helper,i=n.map(w).join("\n");t.innerHTML='<div class="ais-RefinementList">\n <ul class="ais-RefinementList-list">\n '+i+"\n </ul>\n </div>";var a=t.querySelectorAll("input[type=checkbox]");a.forEach((function(e){e.addEventListener("change",(function(t){var n=!1;a.forEach((function(t){t.value!==e.value&&(t.checked=!1),t.checked&&(n=!0)})),n?r.setQueryParameter("aroundRadius",t.target.value).search():r.setQueryParameter("aroundRadius").search()}))}))}}},e.makeFieldSearch=L,e.noop=P,e.placeAutocomplete=function(e){var t=e.container,n=e.placeholder;return{init:function(e){var r=e.helper;t.innerHTML='<input class="ais-SearchBox-input" type="search" placeholder='+n+"/>";var i=t.querySelector("input[type=search]"),a=new google.maps.places.Autocomplete(i);a.setFields(["place_id","geometry","name","formatted_address"]);var o=new google.maps.Geocoder;a.addListener("place_changed",(function(){var e=a.getPlace();""!==e.name?e.place_id&&o.geocode({placeId:e.place_id},(function(e,t){if("OK"===t){var n=e[0].geometry.location;r.setQueryParameter("aroundLatLng",n.lat()+", "+n.lng()).search()}else console.warn("Geocoder failed due to: "+t)})):r.setQueryParameter("aroundLatLng").search()}))}}},e.searchBoxFields=function(e){return{init:function(t){e.container.innerHTML='<div class="ais-RefinementList">\n <ul class="ais-RefinementList-list">\n '+e.attributes.map((function(e){return function(e){return'<li class="ais-RefinementList-item">\n <label class="ais-RefinementList-label">\n <input class="ais-RefinementList-checkbox" type="checkbox" value="'+e.fieldName+'" checked />\n <span class="ais-RefinementList-labelText">'+e.title+"</span>\n </label>\n </li>"}(e)})).join("\n")+"\n </ul>\n </div>";e.container.querySelectorAll("input[type=checkbox]").forEach((function(n){n.addEventListener("change",(function(){!function(){var n=e.container.querySelectorAll("input[type=checkbox]:checked");if(n.length){for(var r=[],i=0;i<n.length;i+=1)r.push(n[i].getAttribute("value"));t.helper.setQueryParameter("restrictSearchableAttributes",r)}else t.helper.setQueryParameter("restrictSearchableAttributes");t.helper.search()}()}))}))}}},e.stringFieldSearch=x,e.taxonomyRefinementList=function(e){var n=q(e),r=A(n.render,n.dispose);return t(t({},r(e)),{$$widgetType:"cs.taxonomyRefinementList"})},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
|
|
15
|
+
***************************************************************************** */var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,a){function o(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}u((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}function i(e,t,n){if(n||2===arguments.length)for(var r,i=0,a=t.length;i<a;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||t)}var a=function(e){var t=e.indexOf(".");return-1===t?[e]:[e.slice(0,t),e.slice(t+1)]},o=function(e,t,n){var r=a(t);if(1!==r.length){var i=r[0],s=r[1];e[i]||(e[i]={}),o(e[i],s,n)}else e[r[0]]=n},s=function(e,t){var n=a(t);if(1===n.length){var r=e[n[0]];return void 0===r?null:r}var i=n[0],o=n[1],u=e[i];return u?s(u,o):null},u=function(e){return["+"," -","&&","||","!","(",")","{","}","[","]","^","~","*","?",":","/"].forEach((function(t){e=e.replaceAll(t," ")})),e.replaceAll(/\s+/g," ")};function c(e){return e.split(" ").filter(Boolean).map((function(e){return u(e)+"*"})).join(" ")}var l=function(e,n){var r;if(!e.query)return null;var i=e.query.split(":"),a=i.length>1?i[0]+":"+c(i[1]):c(e.query),o=(e.restrictSearchableAttributes?e.restrictSearchableAttributes:null!==(r=n.keywordSearchFields)&&void 0!==r?r:[]).map((function(e){return n.fieldSettings&&n.fieldSettings[e]?e+"^"+n.fieldSettings[e].boost:e}));return{query_string:t({query:a,default_operator:"AND"},o.length&&{fields:o})}},f=function(e){var t=e.indexOf(":");if(-1===t)return e;var n=e.substring(0,t),r=e.substring(t+1),i=u(r);return n+":"+(i=i.split(" ").filter(Boolean).map((function(e){return""+e})).join(" "))},d=function(e){var t,n=(t=e.match(/^([A-Z]\d[A-Z])[\s-]?(\d[A-Z]\d)$/))?t[1]+" "+t[2]:null;if(n){var r=n.split(" ")[0];return{bool:{should:[{term:{"metadata.serviceAreaZipCodes.keyword":n}},{term:{"metadata.serviceAreaZipCodes.keyword":r+" ***"}}],minimum_should_match:1}}}return{term:{"metadata.serviceAreaZipCodes.keyword":e}}},h=function(e){return e.includes("metadata.serviceAreaZipCodes:")},p=function(e){var t=e.match(/metadata\.serviceAreaZipCodes:"([^"]+)"/);return t?t[1]:null},g=function(e){if(!e||!e.length)return null;if("string"==typeof e){if(h(e)){var t=p(e);if(t){var n=t.toUpperCase().trim();return d(n)}}return{query_string:{query:e}}}for(var r=null,a=[],o=0,s=e;o<s.length;o++){var u=s[o];if("string"==typeof u&&h(u)){var c=p(u);c&&!r&&(r=c)}else a.push(Array.isArray(u)?i([],u):u)}return function(e,t){var n=[];if(e.length>0){for(var r=[],i=0,a=e;i<a.length;i++){var o=a[i];if("string"==typeof o)r.push(f(o));else{var s=o.map((function(e){return f(e)}));r.push("("+s.join(" OR ")+")")}}r.length>0&&n.push({query_string:{query:r.join(" AND ")}})}return t&&n.push(t),0===n.length?null:1===n.length?n[0]:{bool:{must:n}}}(a,r?d(r.toUpperCase().trim()):void 0)},m=function(e,t){var n,r=function(e,t){var n=[l(t,e),g(t.facetFilters)].filter((function(e){return null!==e}));return n.length?n:"*"}(e,t),i={query:"string"==typeof r?r:JSON.stringify(r)};e.networkId&&(i.networkId=e.networkId),e.sortByDistance&&(i.sortByDistance=e.sortByDistance),e.zipcode&&(i.zipcode=e.zipcode),t.filters&&(i.filters=JSON.stringify((n=t.filters)?n.map((function(e){var t,n;return"exists"===e.queryType?{exists:{field:e.field}}:"raw"===e.queryType?e.query:((t={})[e.queryType]=((n={})[e.field]=e.query,n),t)})).filter(Boolean):[]));var a=t.hitsPerPage||20;if(i.$limit=a,i.$skip=a&&a*t.page||0,t.aroundLatLng&&t.aroundRadius){var o=t.aroundLatLng.split(",",2).map((function(e){return parseFloat(e.trim())})),s=o[0],u=o[1];i.distance=Number(t.aroundRadius),i.distanceUnit="mi",i.lat=s,i.lon=u}return t.openNow&&(i.openAtDay=t.openAtDay,i.openAtMinute=t.openAtMinute),t.facets&&t.facets.length&&(i.aggregations=JSON.stringify(t.facets.reduce((function(e,n){return e[n]={terms:{field:n+".keyword",min_doc_count:(null==t?void 0:t.facetMinDocCount)||0,size:100}},e}),{}))),i},v=function(){function e(e,t){this.settings=e,this.options=t,this.body=this.getNexus211QueryParams()}return e.prototype.getKeywordSearchFields=function(){return this.options.restrictSearchableAttributes?this.options.restrictSearchableAttributes:this.settings.keywordSearchFields},e.prototype.isSearchableAttributesRestricted=function(){var e;return(null===(e=this.options.restrictSearchableAttributes)||void 0===e?void 0:e.length)>0},e.prototype.getNexus211QueryParams=function(){return m(this.settings,this.options)},e}(),y=function(e,t){var n=t.options.query;if(!e)return{matchLevel:"none",matchedWords:[],value:e};var r="";"string"==typeof e?r=e:Array.isArray(e)&&e.length>0&&(r=e.join(" "));var i,a,o,s,u,c,l,f,d=r.toLowerCase().search(n.toLowerCase());return-1===d?{matchLevel:"none",matchedWords:[],value:e}:{fullyHighlighted:0===d&&r.length===n.length,matchLevel:"full",matchedWords:[n],value:(i={text:r,start:d,length:n.length,preTag:t.options.highlightPreTag,postTag:t.options.highlightPostTag},a=i.text,o=i.start,s=i.length,u=i.preTag,c=i.postTag,l=a.slice(0,o),f=a.slice(o+s),""+l+u+a.slice(o,o+s)+c+f)}},b=function(e,n){return n.map((function(n){return function(e,n){var r={};return e.getKeywordSearchFields().forEach((function(t){var i=s(n,t);i&&(Array.isArray(i)&&i.length>0&&"string"==typeof i[0]?o(r,t,i.map((function(t){return y(t,e)}))):"string"==typeof i?o(r,t,y(i,e)):console.warn('The value of field "'+t+'" is not a string or an array of strings. Skipping highlighting for this field.'))})),e.isSearchableAttributesRestricted()&&e.settings.keywordSearchFields.forEach((function(e){s(r,e)||o(r,e,{matchLevel:"none",matchedWords:[],value:s(n,e)})})),t(t({},n),{_highlightResult:r})}(e,t({objectID:n.id},n))}))},S=function(e){return e.aggregations?Object.entries(e.aggregations).reduce((function(e,t){var n=t[0],r=t[1];return e[n]=r.buckets.reduce((function(e,t){return e[t.key]=t.doc_count,e}),{}),e}),{}):{}},w=function(e,t){return{results:[{index:"instant_search",query:e.options.query,params:e.body.query,nbHits:t.__meta.total,hits:b(e,t.data),hitsPerPage:+t.__meta.perPage,page:e.options.page,nbPages:t.__meta.perPage?Math.ceil(t.__meta.total/t.__meta.perPage):0,processingTimeMS:1,exhaustiveNbHits:!0,exhaustiveFacetsCount:!0,facets:S(t)}]}},L=function(){function e(e){this.settings=t(t({},this.getDefaultSettings()),e)}return e.prototype.getDefaultSettings=function(){return{endpoint:"https://admin.211cs.org",searchUri:"/api/search",keywordSearchFields:["service.name","site.name","site.agency.name","site.agency.description"]}},e.prototype.search=function(e){return n(this,void 0,void 0,(function(){var t,n;return r(this,(function(r){switch(r.label){case 0:return t=new v(this.settings,e[0].params),[4,this.makeSearchRequest(t.body)];case 1:return n=r.sent(),[2,w(t,n)]}}))}))},e.prototype.makeSearchRequest=function(e){return n(this,void 0,void 0,(function(){var t,n;return r(this,(function(r){switch(r.label){case 0:if(!this.settings.token)throw new Error("You must provide a valid SearchApi or PublicSearchApi token. Visit https://admin.211cs.org to create one.");return[4,fetch(""+this.settings.endpoint+this.settings.searchUri,{headers:{cache:"no-cache",authorization:"SearchApi "+this.settings.token,"content-type":"application/json"},method:"POST",body:JSON.stringify({search:e})})];case 1:if(200!==(t=r.sent()).status)throw n=t.text(),new Error("Unexpected status "+t.status+": "+n);return[2,t.json()]}}))}))},e.prototype.searchForFacetValues=function(e){return n(this,void 0,void 0,(function(){var i=this;return r(this,(function(a){return[2,Promise.all(e.map((function(a){return n(i,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return n=new v(this.settings,t(t({},e[0].params),{facets:[e[0].params.facetName],hitsPerPage:0})),[4,this.makeSearchRequest(n.body)];case 1:return[2,{facetHits:r.sent().aggregations[a.params.facetName].buckets.map((function(e){return{value:e.key,highlighted:e.key,count:e.doc_count,isRefined:!1}})),exhaustiveFacetsCount:!0,processingTimeMS:1}]}}))}))})))]}))}))},e.prototype.addAlgoliaAgent=function(e,t){console.warn("Unhandled addAlgoliaAgent",e,t)},e.prototype.clearCache=function(){return console.warn("Unhandled clearCache"),Promise.resolve()},e}(),k=function(e){switch(typeof e){case"string":return parseFloat(e);case"number":return e;default:return null}};var R=function(e){if(!e.addresses||0===e.addresses.length)return null;var t=e.addresses[0];return{lat:k(t.latitude),lng:k(t.longitude),hit:e}},x=function(e,t){return function(n){var r,i=n.container,a=n.attribute,o=n.placeholder||"",s=(r=n.debounce||200,function(e){var t=null;return function(n){null!==t&&(clearTimeout(t),t=null);var i=n.target.value;t=setTimeout((function(){e(i),t=null}),r)}}),u=t&&"number"===t?"number":"search",c=e?"":"*";return{init:function(e){var t=e.helper;i.innerHTML='<input class="ais-SearchBox-input" type='+u+" placeholder="+o+' autocomplete="off" autocorrect="off" autocapitalize="off" maxlength="512">',i.querySelector("input").addEventListener("input",s((function(e){t.clearRefinements(a),e&&t.addFacetRefinement(a,[e+c]),t.search()})))},getWidgetSearchParameters:function(e){return e.addFacet(a)}}}},A=function(e){return'<li class="ais-RefinementList-item">\n <label class="ais-RefinementList-label">\n <input class="ais-RefinementList-checkbox" type="checkbox" value='+e+' />\n <span class="ais-RefinementList-labelText">'+e+" miles</span>\n </label>\n </li>"},P=x(!0,"number"),q=x(!0,"string"),_=x(!1,"string"),T=function(){};function F(e,n){return void 0===n&&(n=T),function(r){var i=r.attribute,a=r.transformItems,o=void 0===a?function(e){return e}:a;return{$$type:"cs.taxonomyRefinementList",init:function(n){e(t(t({},this.getWidgetRenderState(n)),{instantSearchInstance:n.instantSearchInstance}),!0)},render:function(n){e(t(t({},this.getWidgetRenderState(n)),{instantSearchInstance:n.instantSearchInstance}),!1)},getRenderState:function(e,n){var r;return t(t({},e),{taxonomyRefinementList:t(t({},e.taxonomyRefinementList),(r={},r[i]=this.getWidgetRenderState(n),r))})},getWidgetRenderState:function(e){var t=e.results,n=e.helper,a=function(e){e.split("|").forEach((function(e){return n.isDisjunctiveRefined(i,e)?n.removeDisjunctiveFacetRefinement(i,e):n.addDisjunctiveFacetRefinement(i,e)})),n.search()};return t?{items:o(t.getRefinements(i)),refine:a,widgetParams:r}:{items:[],refine:a,widgetParams:r}},getWidgetUiState:function(e,n){var r,a=n.searchParameters;return t(t({},e),{taxonomyRefinementList:t(t({},e.taxonomyRefinementList),(r={},r[i]=a.getRefinements(i),r))})},getWidgetSearchParameters:function(e){return e.addDisjunctiveFacet(i)},dispose:function(){n()}}}}var j=function(e){return{render:function(t,n){var r=t.items,i=t.refine,a="string"==typeof e.container?document.querySelector(e.container):e.container;if(n)a.addEventListener("click",(function(e){if(e.target instanceof HTMLElement){var t=e.target.closest("input");t&&i(t.value)}}));else{var o=e.items.map((function(e){var t=e.label,n=e.value,i=n.split("|").every((function(e){return r.find((function(t){return"disjunctive"===t.type&&t.name===e}))}));return'\n <li>\n <label>\n <input\n type="checkbox"\n value="'+n+'"\n '+(i?"checked":"")+"\n />\n "+t+"\n </label>\n </li>\n "}));a.innerHTML="<ul>"+o.join("")+"</ul>"}},dispose:function(){}}};return e.SearchClient=L,e.connectTaxonomyRefinementList=F,e.createTaxonomyRefinementListRenderer=j,e.exactNumberFieldSearch=P,e.exactStringFieldSearch=q,e.googleMaps=function(e){var t=e.container,n=e.renderInfo,r=e.transformHits||R,i="string"==typeof t?document.querySelector(t):t,a=null,o={},s=new google.maps.InfoWindow;return{init:function(){a=new google.maps.Map(i,{})},render:function(e){if(a){Object.keys(o).forEach((function(e){o[e].marker.setMap(null),delete o[e]}));var t=function(e,t){return e.map(t).filter((function(e){return null!=e&&null!==e.lat&&null!==e.lng}))}(e.results.hits,r);t.forEach((function(e){if(!o[e.hit.id]){var t=new google.maps.Marker({position:{lat:e.lat,lng:e.lng},map:a});n&&t.addListener("click",(function(){s.setContent(n(e)),s.open(a,t)})),t.setMap(a),o[e.hit.id]={marker:t,data:e}}})),function(e,t){e.fitBounds(t.reduce((function(e,t){return e.extend(new google.maps.LatLng(t.lat,t.lng)),e}),new google.maps.LatLngBounds))}(a,t)}},dispose:function(e){},getWidgetState:function(e,t){return e},getWidgetSearchParameters:function(e,t){return e}}},e.locationDistanceFilter=function(e){var t=e.container,n=e.miles||[5,10,20,50];return{init:function(e){var r=e.helper,i=n.map(A).join("\n");t.innerHTML='<div class="ais-RefinementList">\n <ul class="ais-RefinementList-list">\n '+i+"\n </ul>\n </div>";var a=t.querySelectorAll("input[type=checkbox]");a.forEach((function(e){e.addEventListener("change",(function(t){var n=!1;a.forEach((function(t){t.value!==e.value&&(t.checked=!1),t.checked&&(n=!0)})),n?r.setQueryParameter("aroundRadius",t.target.value).search():r.setQueryParameter("aroundRadius").search()}))}))}}},e.makeFieldSearch=x,e.noop=T,e.placeAutocomplete=function(e){var t=e.container,n=e.placeholder;return{init:function(e){var r=e.helper;t.innerHTML='<input class="ais-SearchBox-input" type="search" placeholder='+n+"/>";var i=t.querySelector("input[type=search]"),a=new google.maps.places.Autocomplete(i);a.setFields(["place_id","geometry","name","formatted_address"]);var o=new google.maps.Geocoder;a.addListener("place_changed",(function(){var e=a.getPlace();""!==e.name?e.place_id&&o.geocode({placeId:e.place_id},(function(e,t){if("OK"===t){var n=e[0].geometry.location;r.setQueryParameter("aroundLatLng",n.lat()+", "+n.lng()).search()}else console.warn("Geocoder failed due to: "+t)})):r.setQueryParameter("aroundLatLng").search()}))}}},e.searchBoxFields=function(e){return{init:function(t){e.container.innerHTML='<div class="ais-RefinementList">\n <ul class="ais-RefinementList-list">\n '+e.attributes.map((function(e){return function(e){return'<li class="ais-RefinementList-item">\n <label class="ais-RefinementList-label">\n <input class="ais-RefinementList-checkbox" type="checkbox" value="'+e.fieldName+'" checked />\n <span class="ais-RefinementList-labelText">'+e.title+"</span>\n </label>\n </li>"}(e)})).join("\n")+"\n </ul>\n </div>";e.container.querySelectorAll("input[type=checkbox]").forEach((function(n){n.addEventListener("change",(function(){!function(){var n=e.container.querySelectorAll("input[type=checkbox]:checked");if(n.length){for(var r=[],i=0;i<n.length;i+=1)r.push(n[i].getAttribute("value"));t.helper.setQueryParameter("restrictSearchableAttributes",r)}else t.helper.setQueryParameter("restrictSearchableAttributes");t.helper.search()}()}))}))}}},e.stringFieldSearch=_,e.taxonomyRefinementList=function(e){var n=j(e),r=F(n.render,n.dispose);return t(t({},r(e)),{$$widgetType:"cs.taxonomyRefinementList"})},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@211la/search-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/types/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"lint": "eslint . --ext .ts",
|
|
11
11
|
"test": "jest --config jest-config.json",
|
|
12
12
|
"test:watch": "jest --config jest-config.json --watchAll",
|
|
13
|
-
"build": "rm -rf ./dist && rollup -c && tsc --p ./tsconfig.build.json --emitDeclarationOnly"
|
|
13
|
+
"build": "rm -rf ./dist && rollup -c && tsc --p ./tsconfig.build.json --emitDeclarationOnly",
|
|
14
|
+
"build:watch": "rollup -c --watch"
|
|
14
15
|
},
|
|
15
16
|
"peerDependencies": {
|
|
16
17
|
"instantsearch.js": "4.x"
|