@211la/search-client 0.3.7 → 0.4.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 CHANGED
@@ -136,27 +136,33 @@ var sanitizeKeyword = function (keyword) {
136
136
  return keyword.replace(/\s+/g, ' ');
137
137
  };
138
138
 
139
- var keyword = (function (keyword, fields) {
140
- if (!keyword) {
139
+ function sanitizeForES(value) {
140
+ return value
141
+ .split(' ')
142
+ .filter(Boolean)
143
+ .map(function (term) { return sanitizeKeyword(term) + "*"; })
144
+ .join(' ');
145
+ }
146
+ var keyword = (function (options, settings) {
147
+ var _a;
148
+ if (!options.query) {
141
149
  return null;
142
150
  }
143
- var sanitizeForES = function (value) {
144
- return value
145
- .split(' ')
146
- .filter(Boolean)
147
- .map(function (term) { return sanitizeKeyword(term) + "*"; })
148
- .join(' ');
149
- };
150
- var splittedKeyword = keyword.split(':');
151
+ var splittedKeyword = options.query.split(':');
151
152
  var sanitizedKeyword = splittedKeyword.length > 1
152
153
  ? splittedKeyword[0] + ":" + sanitizeForES(splittedKeyword[1])
153
- : sanitizeForES(keyword);
154
+ : sanitizeForES(options.query);
155
+ var fields = options.restrictSearchableAttributes
156
+ ? options.restrictSearchableAttributes
157
+ : (_a = settings.keywordSearchFields) !== null && _a !== void 0 ? _a : [];
158
+ var weightedFields = fields.map(function (field) {
159
+ if (settings.fieldSettings && settings.fieldSettings[field]) {
160
+ return field + "^" + settings.fieldSettings[field].boost;
161
+ }
162
+ return field;
163
+ });
154
164
  return {
155
- query_string: {
156
- query: sanitizedKeyword,
157
- default_operator: 'AND',
158
- fields: fields,
159
- },
165
+ query_string: __assign({ query: sanitizedKeyword, default_operator: 'AND' }, (weightedFields.length && { fields: weightedFields })),
160
166
  };
161
167
  });
162
168
 
@@ -207,9 +213,7 @@ var facetFilters = (function (facetFilters) {
207
213
 
208
214
  var buildElasticSearchQuery = function (settings, instantSearchParams) {
209
215
  var clauses = [
210
- keyword(instantSearchParams.query, instantSearchParams.restrictSearchableAttributes
211
- ? instantSearchParams.restrictSearchableAttributes
212
- : settings.keywordSearchFields),
216
+ keyword(instantSearchParams, settings),
213
217
  filters(instantSearchParams.filters),
214
218
  facetFilters(instantSearchParams.facetFilters),
215
219
  ];
@@ -475,45 +479,14 @@ var SearchClient = (function () {
475
479
  return SearchClient;
476
480
  }());
477
481
 
478
- var groupByAndMap = function (list, fn, map) {
479
- var buckets = {};
480
- list.forEach(function (resource) {
481
- var key = fn(resource);
482
- if (!buckets[key]) {
483
- buckets[key] = [];
484
- }
485
- buckets[key].push(resource);
486
- });
487
- Object.keys(buckets).forEach(function (key) {
488
- buckets[key] = map(buckets[key]);
489
- });
490
- return buckets;
491
- };
492
- var updateBounds = function (map, grouped) {
482
+ var updateBounds = function (map, points) {
493
483
  var bounds = new google.maps.LatLngBounds();
494
- Object.keys(grouped).forEach(function (key) {
495
- var group = grouped[key];
496
- bounds.extend(new google.maps.LatLng(group.lat, group.lng));
497
- });
484
+ for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {
485
+ var point = points_1[_i];
486
+ bounds.extend(new google.maps.LatLng(point.lat, point.lng));
487
+ }
498
488
  map.fitBounds(bounds);
499
489
  };
500
- var makeResourceGroup = function (resources) {
501
- var hits = resources.map(function (resource) { return resource.hit; });
502
- var _a = resources[0], lat = _a.lat, lng = _a.lng;
503
- return {
504
- hits: hits,
505
- lat: lat,
506
- lng: lng,
507
- key: lat + "_" + lng,
508
- };
509
- };
510
- var flatten = function (list) {
511
- var result = [];
512
- list.forEach(function (item) {
513
- result = result.concat(item);
514
- });
515
- return result;
516
- };
517
490
  var ifStringToInt = function (v) {
518
491
  switch (typeof v) {
519
492
  case 'string':
@@ -524,27 +497,34 @@ var ifStringToInt = function (v) {
524
497
  return null;
525
498
  }
526
499
  };
527
- var transformHits = function (hits, mapFunc) {
528
- return flatten(hits.map(mapFunc))
529
- .map(function (entry) { return (__assign(__assign({}, entry), { lat: ifStringToInt(entry.lat), lng: ifStringToInt(entry.lng) })); })
530
- .filter(function (entry) { return entry.lat !== null && entry.lng !== null; });
531
- };
532
- var defaultMapFunc = function (hit) {
533
- return (hit.site.addresses || []).map(function (address) { return ({
534
- lat: address.lat,
535
- lng: address.lng,
536
- hit: __assign(__assign({}, hit), { site: __assign(__assign({}, hit.site), { addresses: [address] }) }),
537
- }); });
500
+ function transformHits(hits, transformer) {
501
+ return hits
502
+ .map(transformer)
503
+ .filter(function (entry) {
504
+ return entry !== null &&
505
+ entry !== undefined &&
506
+ entry.lat !== null &&
507
+ entry.lng !== null;
508
+ });
509
+ }
510
+ var defaultTransformer = function (hit) {
511
+ if (!hit.addresses || hit.addresses.length === 0) {
512
+ return null;
513
+ }
514
+ var address = hit.addresses[0];
515
+ return {
516
+ lat: ifStringToInt(address.latitude),
517
+ lng: ifStringToInt(address.longitude),
518
+ hit: hit,
519
+ };
538
520
  };
539
521
  var googleMaps = function (props) {
540
522
  var container = props.container, renderInfo = props.renderInfo;
541
- var mapFunc = props.mapFunc;
542
- mapFunc = mapFunc || defaultMapFunc;
523
+ var transformer = props.transformHits || defaultTransformer;
543
524
  var containerElem = typeof container === 'string'
544
525
  ? document.querySelector(container)
545
526
  : container;
546
527
  var map = null;
547
- var key = '';
548
528
  var markers = {};
549
529
  var infoWindow = new google.maps.InfoWindow();
550
530
  return {
@@ -555,44 +535,36 @@ var googleMaps = function (props) {
555
535
  if (!map) {
556
536
  return;
557
537
  }
558
- var results = options.results;
559
- var hits = transformHits(results.hits, mapFunc);
560
- var grouped = groupByAndMap(hits, function (hit) { return hit.lat + "_" + hit.lng; }, makeResourceGroup);
561
- var newKey = Object.keys(grouped)
562
- .sort(function (a, b) { return a.localeCompare(b); })
563
- .join(',');
564
- if (newKey === key) {
565
- return;
538
+ for (var marker in markers) {
539
+ markers[marker].marker.setMap(null);
540
+ delete markers[marker];
566
541
  }
567
- key = newKey;
568
- Object.keys(markers).forEach(function (x) {
569
- if (grouped[x]) {
570
- return;
571
- }
572
- markers[x].marker.setMap(null);
573
- delete markers[x];
574
- });
575
- Object.keys(grouped).forEach(function (x) {
576
- if (markers[x]) {
577
- return;
542
+ var points = transformHits(options.results.hits, transformer);
543
+ var _loop_1 = function (point) {
544
+ if (markers[point.hit.id]) {
545
+ return "continue";
578
546
  }
579
- var _a = grouped[x], lat = _a.lat, lng = _a.lng;
580
547
  var marker = new google.maps.Marker({
581
- position: { lat: lat, lng: lng },
548
+ position: { lat: point.lat, lng: point.lng },
582
549
  map: map,
583
550
  });
584
551
  if (renderInfo) {
585
552
  marker.addListener('click', function () {
586
- infoWindow.setContent(renderInfo(grouped[x]));
553
+ infoWindow.setContent(renderInfo(point));
587
554
  infoWindow.open(map, marker);
588
555
  });
589
556
  }
590
- markers[x] = {
557
+ marker.setMap(map);
558
+ markers[point.hit.id] = {
591
559
  marker: marker,
592
- data: grouped[x],
560
+ data: point,
593
561
  };
594
- });
595
- updateBounds(map, grouped);
562
+ };
563
+ for (var _i = 0, points_2 = points; _i < points_2.length; _i++) {
564
+ var point = points_2[_i];
565
+ _loop_1(point);
566
+ }
567
+ updateBounds(map, points);
596
568
  },
597
569
  dispose: function (disposeOptions) { },
598
570
  getWidgetState: function (uiState, widgetStateOptions) { return uiState; },
@@ -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}).apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,a){function o(e){try{s(r.next(e))}catch(e){a(e)}}function c(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,c)}s((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:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(a){return function(c){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,c])}}}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],c=r[1];e[i]||(e[i]={}),o(e[i],c,n)}else e[r[0]]=n},c=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],s=e[i];return s?c(s,o):null},s=function(e){return["+","-","&&","||","!","(",")","{","}","[","]","^","~","*","?",":","/"].forEach((function(t){e=e.replace(t," ")})),e.replace(/\s+/g," ")},u=function(e,t){if(!e)return null;var n=function(e){return e.split(" ").filter(Boolean).map((function(e){return s(e)+"*"})).join(" ")},r=e.split(":");return{query_string:{query:r.length>1?r[0]+":"+n(r[1]):n(e),default_operator:"AND",fields:t}}},l=function(e){return e?{query_string:{query:""+e}}:null},f=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(" "))},h=function(e){return"string"==typeof e?e:e.map((function(e){return"string"==typeof e?f(e):"("+e.map((function(e){return f(e)})).join(" OR ")+")"})).join(" AND ")},p=function(e){return e&&e.length?{query_string:{query:h(e)}}:null},d=function(e,t){var n=function(e,t){var n=[u(t.query,t.restrictSearchableAttributes?t.restrictSearchableAttributes:e.keywordSearchFields),l(t.filters),p(t.facetFilters)].filter((function(e){return null!==e}));return n.length?n:"*"}(e,t),r={query:"string"==typeof n?n:JSON.stringify(n)},a=t.hitsPerPage||20;if(r.$limit=a,r.$skip=a&&a*t.page||0,t.aroundLatLng&&t.aroundRadius){var o=t.aroundLatLng.split(",",2).map((function(e){return parseFloat(e.trim())})),c=o[0],s=o[1];r.distance=Number(t.aroundRadius),r.distanceUnit="mi",r.lat=c,r.lon=s}return t.facets&&t.facets.length&&(r.aggregations=JSON.stringify(t.facets.reduce((function(e,n){if(e[n]={terms:{field:n+".keyword",min_doc_count:0,size:100}},t.facetQuery){var r=i(i([".*"],t.facetQuery.split("").map((function(e){return"["+e.toLocaleLowerCase()+e.toLocaleUpperCase()+"]"}))),[".*"]).join("");e[n].terms.include=r}return e}),{}))),r},g=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}(),m=function(e,n){return n.map((function(n){return function(e,n){var r={};return e.getKeywordSearchFields().forEach((function(t){var i=c(n,t);i&&o(r,t,function(e,t){var n,r,i,a,o,c,s=t.options.query,u=e.toLowerCase().search(s.toLowerCase());return-1===u?{matchLevel:"none",matchedWords:[],value:e}:{fullyHighlighted:0===u&&e.length===s.length,matchLevel:"full",matchedWords:[s],value:(n={text:e,start:u,length:s.length,preTag:t.options.highlightPreTag,postTag:t.options.highlightPostTag},r=n.text,i=n.start,a=n.length,o=n.preTag,c=n.postTag,[r.slice(0,i),o,r.substr(i,a),c,r.slice(i+a)].join(""))}}(i,e))})),e.isSearchableAttributesRestricted()&&e.settings.keywordSearchFields.forEach((function(e){c(r,e)||o(r,e,{matchLevel:"none",matchedWords:[],value:c(n,e)})})),t(t({},n),{_highlightResult:r})}(e,t({objectID:n.id},n))}))},v=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}),{}):{}},y=function(e,t){return{results:[{index:"instant_search",query:e.options.query,params:e.body.query,nbHits:t.__meta.total,hits:m(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:v(t)}]}},b=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 g(this.settings,e[0].params),[4,this.makeSearchRequest(t.body)];case 1:return n=r.sent(),[2,y(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 g(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}(),S=function(e){var t=e.map((function(e){return e.hit})),n=e[0],r=n.lat,i=n.lng;return{hits:t,lat:r,lng:i,key:r+"_"+i}},L=function(e){switch(typeof e){case"string":return parseFloat(e);case"number":return e;default:return null}},k=function(e){return(e.site.addresses||[]).map((function(n){return{lat:n.lat,lng:n.lng,hit:t(t({},e),{site:t(t({},e.site),{addresses:[n]})})}}))},R=function(e,t){return function(n){var r,i=n.container,a=n.attribute,o=n.placeholder||"",c=(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)}}),s=t&&"number"===t?"number":"search",u=e?"":"*";return{init:function(e){var t=e.helper;i.innerHTML='<input class="ais-SearchBox-input" type='+s+" placeholder="+o+' autocomplete="off" autocorrect="off" autocapitalize="off" maxlength="512">',i.querySelector("input").addEventListener("input",c((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>"},x=R(!0,"number"),P=R(!0,"string"),_=R(!1,"string"),j=function(){};function F(e,n){return void 0===n&&(n=j),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 A=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=b,e.connectTaxonomyRefinementList=F,e.createTaxonomyRefinementListRenderer=A,e.exactNumberFieldSearch=x,e.exactStringFieldSearch=P,e.googleMaps=function(e){var n=e.container,r=e.renderInfo,i=e.mapFunc;i=i||k;var a="string"==typeof n?document.querySelector(n):n,o=null,c="",s={},u=new google.maps.InfoWindow;return{init:function(){o=new google.maps.Map(a,{})},render:function(e){if(o){var n=function(e,t,n){var r={};return e.forEach((function(e){var n=t(e);r[n]||(r[n]=[]),r[n].push(e)})),Object.keys(r).forEach((function(e){r[e]=n(r[e])})),r}(function(e,n){return(r=e.map(n),i=[],r.forEach((function(e){i=i.concat(e)})),i).map((function(e){return t(t({},e),{lat:L(e.lat),lng:L(e.lng)})})).filter((function(e){return null!==e.lat&&null!==e.lng}));var r,i}(e.results.hits,i),(function(e){return e.lat+"_"+e.lng}),S),a=Object.keys(n).sort((function(e,t){return e.localeCompare(t)})).join(",");a!==c&&(c=a,Object.keys(s).forEach((function(e){n[e]||(s[e].marker.setMap(null),delete s[e])})),Object.keys(n).forEach((function(e){if(!s[e]){var t=n[e],i=t.lat,a=t.lng,c=new google.maps.Marker({position:{lat:i,lng:a},map:o});r&&c.addListener("click",(function(){u.setContent(r(n[e])),u.open(o,c)})),s[e]={marker:c,data:n[e]}}})),function(e,t){var n=new google.maps.LatLngBounds;Object.keys(t).forEach((function(e){var r=t[e];n.extend(new google.maps.LatLng(r.lat,r.lng))})),e.fitBounds(n)}(o,n))}},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=R,e.noop=j,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=A(e),r=F(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}).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])}}}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],c=e[i];return c?s(c,o):null},c=function(e){return["+","-","&&","||","!","(",")","{","}","[","]","^","~","*","?",":","/"].forEach((function(t){e=e.replace(t," ")})),e.replace(/\s+/g," ")};function u(e){return e.split(" ").filter(Boolean).map((function(e){return c(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]+":"+u(i[1]):u(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){return e?{query_string:{query:""+e}}:null},h=function(e){var t=e.split(":"),n=t[0],r=t[1],i=c(r);return n+":"+(i=i.split(" ").filter(Boolean).map((function(e){return""+e})).join(" "))},d=function(e){return"string"==typeof e?e:e.map((function(e){return"string"==typeof e?h(e):"("+e.map((function(e){return h(e)})).join(" OR ")+")"})).join(" AND ")},p=function(e){return e&&e.length?{query_string:{query:d(e)}}:null},g=function(e,t){var n=function(e,t){var n=[l(t,e),f(t.filters),p(t.facetFilters)].filter((function(e){return null!==e}));return n.length?n:"*"}(e,t),r={query:"string"==typeof n?n:JSON.stringify(n)},a=t.hitsPerPage||20;if(r.$limit=a,r.$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];r.distance=Number(t.aroundRadius),r.distanceUnit="mi",r.lat=s,r.lon=c}return t.facets&&t.facets.length&&(r.aggregations=JSON.stringify(t.facets.reduce((function(e,n){if(e[n]={terms:{field:n+".keyword",min_doc_count:0,size:100}},t.facetQuery){var r=i(i([".*"],t.facetQuery.split("").map((function(e){return"["+e.toLocaleLowerCase()+e.toLocaleUpperCase()+"]"}))),[".*"]).join("");e[n].terms.include=r}return e}),{}))),r},m=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 g(this.settings,this.options)},e}(),v=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&&o(r,t,function(e,t){var n,r,i,a,o,s,c=t.options.query,u=e.toLowerCase().search(c.toLowerCase());return-1===u?{matchLevel:"none",matchedWords:[],value:e}:{fullyHighlighted:0===u&&e.length===c.length,matchLevel:"full",matchedWords:[c],value:(n={text:e,start:u,length:c.length,preTag:t.options.highlightPreTag,postTag:t.options.highlightPostTag},r=n.text,i=n.start,a=n.length,o=n.preTag,s=n.postTag,[r.slice(0,i),o,r.substr(i,a),s,r.slice(i+a)].join(""))}}(i,e))})),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))}))},y=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}),{}):{}},b=function(e,t){return{results:[{index:"instant_search",query:e.options.query,params:e.body.query,nbHits:t.__meta.total,hits:v(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:y(t)}]}},S=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 m(this.settings,e[0].params),[4,this.makeSearchRequest(t.body)];case 1:return n=r.sent(),[2,b(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 m(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}(),L=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:L(t.latitude),lng:L(t.longitude),hit:e}},w=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)}}}},x=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>"},k=w(!0,"number"),P=w(!0,"string"),_=w(!1,"string"),A=function(){};function F(e,n){return void 0===n&&(n=A),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=S,e.connectTaxonomyRefinementList=F,e.createTaxonomyRefinementListRenderer=q,e.exactNumberFieldSearch=k,e.exactStringFieldSearch=P,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){for(var t in o)o[t].marker.setMap(null),delete o[t];for(var i=function(e,t){return e.map(t).filter((function(e){return null!=e&&null!==e.lat&&null!==e.lng}))}(e.results.hits,r),c=function(e){if(o[e.hit.id])return"continue";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}},u=0,l=i;u<l.length;u++){c(l[u])}!function(e,t){for(var n=new google.maps.LatLngBounds,r=0,i=t;r<i.length;r++){var a=i[r];n.extend(new google.maps.LatLng(a.lat,a.lng))}e.fitBounds(n)}(a,i)}},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(x).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=w,e.noop=A,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=q(e),r=F(n.render,n.dispose);return t(t({},r(e)),{$$widgetType:"cs.taxonomyRefinementList"})},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
@@ -1,2 +1,4 @@
1
- declare const _default: (keyword: string, fields: readonly string[]) => Record<string, unknown>;
1
+ import { SearchOptions } from '../../../types/algolia';
2
+ import { SearchClientSettings } from '../../../types/SearchClientSettings';
3
+ declare const _default: (options: SearchOptions, settings: SearchClientSettings) => Record<string, unknown>;
2
4
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@211la/search-client",
3
- "version": "0.3.7",
3
+ "version": "0.4.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "files": [
@@ -30,4 +30,4 @@
30
30
  "tslib": "^2.3.0",
31
31
  "typescript": "^4.0.5"
32
32
  }
33
- }
33
+ }