UNPKG

@ecomplus/search-engine

Version:

JS lib to handle products search with E-Com Plus stores

8 lines 14.8 kB
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("lodash.merge"),require("core-js/modules/es.array.splice.js"),require("@ecomplus/utils"),require("lodash.clonedeep"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.concat.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.array.sort.js"),require("core-js/modules/es.array.find.js"),require("@ecomplus/client"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.split.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.array.index-of.js"),require("core-js/modules/es.array.map.js")):"function"==typeof define&&define.amd?define(["lodash.merge","core-js/modules/es.array.splice.js","@ecomplus/utils","lodash.clonedeep","core-js/modules/es.object.keys.js","core-js/modules/es.symbol.js","core-js/modules/es.symbol.description.js","core-js/modules/es.object.to-string.js","core-js/modules/es.symbol.iterator.js","core-js/modules/es.array.iterator.js","core-js/modules/es.string.iterator.js","core-js/modules/web.dom-collections.iterator.js","core-js/modules/es.array.filter.js","core-js/modules/es.array.concat.js","core-js/modules/es.array.slice.js","core-js/modules/es.array.sort.js","core-js/modules/es.array.find.js","@ecomplus/client","core-js/modules/es.regexp.exec.js","core-js/modules/es.string.split.js","core-js/modules/web.dom-collections.for-each.js","core-js/modules/es.array.join.js","core-js/modules/es.array.index-of.js","core-js/modules/es.array.map.js"],r):"object"==typeof exports?exports.EcomSearch=r(require("lodash.merge"),require("core-js/modules/es.array.splice.js"),require("@ecomplus/utils"),require("lodash.clonedeep"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.concat.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.array.sort.js"),require("core-js/modules/es.array.find.js"),require("@ecomplus/client"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.split.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.array.index-of.js"),require("core-js/modules/es.array.map.js")):e.EcomSearch=r(e["lodash.merge"],e["core-js/modules/es.array.splice.js"],e["@ecomplus/utils"],e["lodash.clonedeep"],e["core-js/modules/es.object.keys.js"],e["core-js/modules/es.symbol.js"],e["core-js/modules/es.symbol.description.js"],e["core-js/modules/es.object.to-string.js"],e["core-js/modules/es.symbol.iterator.js"],e["core-js/modules/es.array.iterator.js"],e["core-js/modules/es.string.iterator.js"],e["core-js/modules/web.dom-collections.iterator.js"],e["core-js/modules/es.array.filter.js"],e["core-js/modules/es.array.concat.js"],e["core-js/modules/es.array.slice.js"],e["core-js/modules/es.array.sort.js"],e["core-js/modules/es.array.find.js"],e["@ecomplus/client"],e["core-js/modules/es.regexp.exec.js"],e["core-js/modules/es.string.split.js"],e["core-js/modules/web.dom-collections.for-each.js"],e["core-js/modules/es.array.join.js"],e["core-js/modules/es.array.index-of.js"],e["core-js/modules/es.array.map.js"])}(this,(function(e,r,s,t,o,n,i,u,c,a,l,d,f,m,j,p,y,b,g,h,v,q,x,_){return function(e){var r={};function s(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,s),o.l=!0,o.exports}return s.m=e,s.c=r,s.d=function(e,r,t){s.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,r){if(1&r&&(e=s(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(s.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)s.d(t,o,function(r){return e[r]}.bind(null,o));return t},s.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(r,"a",r),r},s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},s.p="",s(s.s=24)}([function(r,s){r.exports=e},function(e,s){e.exports=r},function(e,r){e.exports=s},function(e,r){e.exports=t},function(e,r){e.exports=o},function(e,r){e.exports=n},function(e,r){e.exports=i},function(e,r){e.exports=u},function(e,r){e.exports=c},function(e,r){e.exports=a},function(e,r){e.exports=l},function(e,r){e.exports=d},function(e,r){e.exports=f},function(e,r){e.exports=m},function(e,r){e.exports=j},function(e,r){e.exports=p},function(e,r){e.exports=y},function(e,r){e.exports=b},function(e,r){e.exports=g},function(e,r){e.exports=h},function(e,r){e.exports=v},function(e,r){e.exports=q},function(e,r){e.exports=x},function(e,r){e.exports=_},function(e,r,s){"use strict";s.r(r),s.d(r,"EcomSearch",(function(){return D})),s.d(r,"dslMiddlewares",(function(){return i})),s.d(r,"addGlobalFilter",(function(){return K})),s.d(r,"setSalesChannel",(function(){return L})),s.d(r,"setWarehouse",(function(){return W}));s(18),s(19),s(5),s(6),s(7),s(8),s(9),s(10),s(11);var t=s(2),o=(s(20),s(12),s(4),s(13),s(21),s(22),s(1),s(14),s(17)),n=s(3),i=[],u=function(e,r,s){var t={url:"/items.json",storeId:e.storeId,axiosConfig:s},u=n(e.dsl);if(i.forEach((function(e){if("function"==typeof e){var r=e(u);r&&(u=r)}})),!0===r){var c=u.query;if(t.url+="?q=",c&&c.bool&&Array.isArray(c.bool.filter)){var a="";c.bool.filter.forEach((function(e,r){var s=e.term,t=e.terms;r>0&&(a+=" AND ");var o=s||t;if(o){var n=Object.keys(o)[0],i=o[n];a+="".concat(n,":").concat(Array.isArray(i)?'("'.concat(i.join('" "'),'")'):i)}})),t.url+=encodeURIComponent(a)}["from","size"].forEach((function(e){u[e]&&(t.url+="&".concat(e,"=").concat(u[e]))}))}else t.method="post",t.data=u,r&&!s&&(t.axiosConfig=r);return Object(o.search)(t).then((function(r){var s=r.data;e.result=s;var t=e.dsl,o=e.history,n=e.localStorage,i=e.storageKey;if(s.hits.total&&t&&t.suggest){var u=t.suggest.text;if(u){var c=o.indexOf(u);c>-1&&o.splice(c,1),o.unshift(u),n&&i&&n.setItem(i,o.slice(0,20).join("||"))}}return s}))},c={query:{bool:{filter:[{term:{visible:!0}}]}},sort:[{in_stock:{order:"desc"}},{ad_relevance:{order:"desc"}},"_score"],aggs:{brands:{terms:{field:"brands.name"}},categories:{terms:{field:"categories.name"}},specs:{nested:{path:"specs"},aggs:{grid:{terms:{field:"specs.grid",size:30},aggs:{text:{terms:{field:"specs.text"}}}}}},min_price:{min:{field:"price"}},max_price:{max:{field:"price"}},avg_price:{avg:{field:"price"}}}},a=function(e){return e.dsl=n(c),e.result=void 0,e.setPageSize().setSortOrder()},l=s(0),d=function(e,r){return e.mergeFilter({multi_match:{query:r,fields:["name","keywords"]}},"must"),l(e.dsl,{suggest:{text:r,words:{term:{field:"name"}}}}),e},f=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return e.dsl.from=e.dsl.size*(r-1),e},m=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:24;return e.dsl.size=r,e};s(15);var j=function(e,r){var s,t,o,n,i=c.sort.slice();switch(r){case"sales":i.splice(2,0,{sales:{order:"desc"}});break;case"news":i[i.length-1]={_id:{order:"desc"}};break;case"lowest_price":case"highest_price":i.splice(1,0,{price:{order:"lowest_price"===r?"asc":"desc"}});break;case"offers":s=Date.now(),i.splice(1,0,{_script:{type:"number",script:{lang:"painless",source:"doc['price'].value > 0 && doc['base_price'].value > 0 && (doc['price_effective_date.start'].empty || "+"doc['price_effective_date.start'].date.millis <= ".concat(s,"L)")+" && (doc['price_effective_date.end'].empty || "+"doc['price_effective_date.end'].date.millis >= ".concat(s,"L)")+" ? doc['base_price'].value / doc['price'].value : 0"},order:"desc"}});break;case"views":case"":case void 0:case null:i.push({views:{order:"desc"}});break;default:i.splice(1,0,(n={order:"asc"},(o=r)in(t={})?Object.defineProperty(t,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[o]=n,t))}return e.dsl.sort=i,e};s(16);function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y(e,r,s){return r in e?Object.defineProperty(e,r,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[r]=s,e}var b=function(e,r){var s=e&&e.nested&&e.nested.query;if(s&&s.bool&&Array.isArray(s.bool[r]))return s.bool[r].find((function(e){return e.term}))},g=function(e,r){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"filter",t=Object.keys(r)[0];l(e.dsl,{query:{bool:y({},s,[])}});var o,n=e.dsl.query.bool[s];switch(t){case"terms":case"term":case"multi_match":case"range":if("object"===p(r[t])&&null!==r[t])for(var i=Object.keys(r[t])[0],u=0;u<n.length;u++){var c=n[u][Object.keys(n[u])[0]];if("object"===p(c)&&null!==c&&Object.keys(c)[0]===i)return n[u]=r,e}break;case"nested":if(o=b(r,s))for(var a=Object.keys(o.term)[0],d=o.term[a],f=0;f<n.length;f++){var m=b(n[f],s);if(m&&m.term[a]===d)return n[f]=r,e}}return n.push(r),e},h=function(e,r){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"filter",t=e.dsl.query&&e.dsl.query.bool&&e.dsl.query.bool[s];if(Array.isArray(t))for(var o=0;o<t.length;o++){var n=t[o];if(n.nested&&n.nested.path===r||n[Object.keys(n)[0]][r]){t.splice(o,1);break}}return e},v=function(e,r,s){if(Array.isArray(s))return e.mergeFilter({nested:{path:"specs",query:{bool:{filter:[{term:{"specs.grid":r}},{terms:{"specs.text":s}}]}}}});if(null===s){var t=e.dsl.query&&e.dsl.query.bool&&e.dsl.query.bool.filter;if(Array.isArray(t))for(var o=0;o<t.length;o++)if(t[o]&&t[o].nested){var n=t[o].nested,i=n.path,u=n.query;if("specs"===i&&u&&u.bool){var c=u.bool.filter;if(Array.isArray(c)&&c.find((function(e){var s=e.term;return s&&s["specs.grid"]===r})))return t.splice(o,1),e}}}return e},q=function(e,r,s,t,o){var n=null!==r?"".concat(r,".").concat(s):s;if(Array.isArray(t)){var i,u={terms:{}};return u.terms[n]=t,i=null!==r?"".concat(r,".").concat("_id"===s?"name":"_id"):"_id"===s?"sku":"_id",e.removeFilter(i,o).mergeFilter(u,o)}return null===t?e.removeFilter(n,o):e},x=function(e,r){return q(e,"categories","name",r,"must")},_=function(e,r){return q(e,"categories","_id",r,"must")},w=function(e,r){return q(e,"brands","name",r)},S=function(e,r){return q(e,"brands","_id",r)},k=function(e,r){return q(e,null,"sku",r)},O=function(e,r){return q(e,null,"_id",r)},A=function(e,r,s){var t={};return"number"!=typeof r||isNaN(r)||(t.gte=r),"number"!=typeof s||isNaN(s)||(t.lte=s),e.mergeFilter({range:{price:t}})},P=function(e,r){return r||(r=e.result),Object(t.searchedItems)(r)},I=function(e,r){return r||(r=e.result||{}),r.hits?r.hits.total:void 0},C=function(e,r){return r||(r=e.result||{}),r.suggest&&r.suggest.words||[]},F=function(e,r){var s,t=e.aggregations;return t&&t[r]&&(s=t[r].buckets),Array.isArray(s)&&s||[]},N=function(e,r){return F(r||e.result||{},"brands")},z=function(e,r){return F(r||e.result||{},"categories")},E=function(e,r){r||(r=e.result||{});var s=r.aggregations;return s?{min:s.min_price&&s.min_price.value||0,avg:s.avg_price&&s.avg_price.value||0,max:s.max_price&&s.max_price.value||0}:{min:0,avg:0,max:0}},M=(s(23),function(e,r){if(r||(r=e.result||{}),r.aggregations){var s=r.aggregations.specs;if(s&&s.grid&&Array.isArray(s.grid.buckets))return s.grid.buckets.map((function(e){return{key:e.key,doc_count:e.doc_count,options:e.text&&e.text.buckets||[]}}))}return[]});function T(e){return(T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var B="ecomSeachHistory",R="object"===("undefined"==typeof window?"undefined":T(window))&&window.localStorage,D=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:B,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:R,o=this;if(this.storeId=e||t.$ecomConfig.get("store_id"),this.storageKey=r,this.localStorage=s,this.history=[],this.dsl={},this.result=void 0,this.fetch=function(e,r){return u(o,e,r)},this.reset=function(){return a(o)},this.setSearchTerm=function(e){return d(o,e)},this.setPageNumber=function(e){return f(o,e)},this.setPageSize=function(e){return m(o,e)},this.setSortOrder=function(e){return j(o,e)},this.mergeFilter=function(e,r){return g(o,e,r)},this.removeFilter=function(e,r){return h(o,e,r)},this.setSpec=function(e,r){return v(o,e,r)},this.setCategoryNames=function(e){return x(o,e)},this.setCategoryIds=function(e){return _(o,e)},this.setBrandNames=function(e){return w(o,e)},this.setBrandIds=function(e){return S(o,e)},this.setSkus=function(e){return k(o,e)},this.setProductIds=function(e){return O(o,e)},this.setPriceRange=function(e,r){return A(o,e,r)},this.getItems=function(e){return P(o,e)},this.getTotalCount=function(e){return I(o,e)},this.getTermSuggestions=function(e){return C(o,e)},this.getBrands=function(e){return N(o,e)},this.getCategories=function(e){return z(o,e)},this.getPriceRange=function(e){return E(o,e)},this.getSpecs=function(e){return M(o,e)},a(o),s&&r){var n=s.getItem(r);"string"==typeof n&&(o.history=n.split("||"))}};function G(e,r,s){return r in e?Object.defineProperty(e,r,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[r]=s,e}var K=function(e,r){i.push((function(s){l(s,{query:{bool:{filter:[{term:G({},e,r)}]}}})}))},L=function(e){return K("channel_id",e)},W=function(e){i.push((function(r){r.sort||(r.sort=[]),r.sort.splice(1,0,{"warehouses.in_stock":{order:"desc",nested:{path:"warehouses",filter:{term:{"warehouses.code":e}}}}})}))}; /*! * @ecomplus/search-engine * (c) E-Com Club <ti@e-com.club> * Released under the MIT License. */ D.dslMiddlewares=i,D.addGlobalFilter=K,D.setSalesChannel=L,D.setWarehouse=W;r.default=D}]).default})); //# sourceMappingURL=ecom-search.min.js.map