@salla.sa/twilight-components 2.12.2 → 2.12.3

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.
Files changed (138) hide show
  1. package/dist/cjs/{Helper-f14223e6.js → Helper-9f7c98a8.js} +14 -1
  2. package/dist/cjs/Helper-9f7c98a8.js.map +1 -0
  3. package/dist/cjs/app-globals-33911fba.js +65 -0
  4. package/dist/cjs/app-globals-33911fba.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/salla-add-product-button_40.cjs.entry.js +1 -1
  7. package/dist/cjs/salla-add-product-button_40.cjs.entry.js.map +1 -1
  8. package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
  9. package/dist/cjs/salla-filters.cjs.entry.js +6 -0
  10. package/dist/cjs/salla-filters.cjs.entry.js.map +1 -1
  11. package/dist/cjs/salla-price-range.cjs.entry.js +3 -0
  12. package/dist/cjs/salla-price-range.cjs.entry.js.map +1 -1
  13. package/dist/cjs/salla-products-list.cjs.entry.js +28 -3
  14. package/dist/cjs/salla-products-list.cjs.entry.js.map +1 -1
  15. package/dist/cjs/salla-products-slider.cjs.entry.js +1 -1
  16. package/dist/cjs/twilight.cjs.js +1 -1
  17. package/dist/collection/Helpers/Helper.js +13 -0
  18. package/dist/collection/Helpers/Helper.js.map +1 -1
  19. package/dist/collection/components/salla-add-product-button/salla-add-product-button.js.map +1 -1
  20. package/dist/collection/components/salla-filters/salla-filters.js +8 -2
  21. package/dist/collection/components/salla-filters/salla-filters.js.map +1 -1
  22. package/dist/collection/components/salla-price-range/salla-price-range.js +4 -1
  23. package/dist/collection/components/salla-price-range/salla-price-range.js.map +1 -1
  24. package/dist/collection/components/salla-products-list/salla-products-list.js +44 -2
  25. package/dist/collection/components/salla-products-list/salla-products-list.js.map +1 -1
  26. package/dist/collection/global/app.js +3 -5
  27. package/dist/collection/global/app.js.map +1 -1
  28. package/dist/collection/index.js.map +1 -1
  29. package/dist/components/Helper.js +13 -0
  30. package/dist/components/Helper.js.map +1 -1
  31. package/dist/components/index.js +20 -4170
  32. package/dist/components/index.js.map +1 -1
  33. package/dist/components/salla-add-product-button2.js.map +1 -1
  34. package/dist/components/salla-filters.js +6 -0
  35. package/dist/components/salla-filters.js.map +1 -1
  36. package/dist/components/salla-price-range2.js +3 -0
  37. package/dist/components/salla-price-range2.js.map +1 -1
  38. package/dist/components/salla-products-list.js +28 -3
  39. package/dist/components/salla-products-list.js.map +1 -1
  40. package/dist/esm/{Helper-a7971963.js → Helper-e4611a7c.js} +14 -1
  41. package/dist/esm/Helper-e4611a7c.js.map +1 -0
  42. package/dist/esm/app-globals-6b360973.js +63 -0
  43. package/dist/esm/app-globals-6b360973.js.map +1 -0
  44. package/dist/esm/loader.js +1 -1
  45. package/dist/esm/salla-add-product-button_40.entry.js +1 -1
  46. package/dist/esm/salla-add-product-button_40.entry.js.map +1 -1
  47. package/dist/esm/salla-filters-widget.entry.js +1 -1
  48. package/dist/esm/salla-filters.entry.js +6 -0
  49. package/dist/esm/salla-filters.entry.js.map +1 -1
  50. package/dist/esm/salla-price-range.entry.js +3 -0
  51. package/dist/esm/salla-price-range.entry.js.map +1 -1
  52. package/dist/esm/salla-products-list.entry.js +29 -4
  53. package/dist/esm/salla-products-list.entry.js.map +1 -1
  54. package/dist/esm/salla-products-slider.entry.js +1 -1
  55. package/dist/esm/twilight.js +1 -1
  56. package/dist/esm-es5/Helper-e4611a7c.js +5 -0
  57. package/dist/esm-es5/Helper-e4611a7c.js.map +1 -0
  58. package/dist/esm-es5/app-globals-6b360973.js +23 -0
  59. package/dist/esm-es5/app-globals-6b360973.js.map +1 -0
  60. package/dist/esm-es5/loader.js +1 -1
  61. package/dist/esm-es5/salla-add-product-button_40.entry.js +1 -1
  62. package/dist/esm-es5/salla-add-product-button_40.entry.js.map +1 -1
  63. package/dist/esm-es5/salla-filters-widget.entry.js +1 -1
  64. package/dist/esm-es5/salla-filters.entry.js +1 -1
  65. package/dist/esm-es5/salla-filters.entry.js.map +1 -1
  66. package/dist/esm-es5/salla-price-range.entry.js.map +1 -1
  67. package/dist/esm-es5/salla-products-list.entry.js +1 -1
  68. package/dist/esm-es5/salla-products-list.entry.js.map +1 -1
  69. package/dist/esm-es5/salla-products-slider.entry.js +1 -1
  70. package/dist/esm-es5/twilight.js +1 -1
  71. package/dist/twilight/{p-a378c3be.entry.js → p-1342a68f.entry.js} +2 -2
  72. package/dist/twilight/p-15b4fb7a.js +23 -0
  73. package/dist/twilight/p-15b4fb7a.js.map +1 -0
  74. package/dist/twilight/{p-0e716419.entry.js → p-23215851.entry.js} +2 -2
  75. package/dist/twilight/p-23215851.entry.js.map +1 -0
  76. package/dist/twilight/p-2d334c27.system.js +5 -0
  77. package/dist/twilight/p-2d334c27.system.js.map +1 -0
  78. package/dist/twilight/{p-9ab303f5.system.entry.js → p-3671b683.system.entry.js} +2 -2
  79. package/dist/twilight/{p-5ffffea6.js → p-431fcc73.js} +2 -2
  80. package/dist/twilight/p-431fcc73.js.map +1 -0
  81. package/dist/twilight/{p-671591bd.system.js → p-5f400dc8.system.js} +2 -2
  82. package/dist/twilight/{p-0bab8332.entry.js → p-61d1ce2d.entry.js} +2 -2
  83. package/dist/twilight/p-61d1ce2d.entry.js.map +1 -0
  84. package/dist/twilight/p-8891fdc9.system.js +23 -0
  85. package/dist/twilight/p-8891fdc9.system.js.map +1 -0
  86. package/dist/twilight/p-8e3f85c5.system.entry.js.map +1 -1
  87. package/dist/twilight/p-90f60c35.system.entry.js +5 -0
  88. package/dist/twilight/p-90f60c35.system.entry.js.map +1 -0
  89. package/dist/twilight/{p-ee9a8735.system.entry.js → p-b4d2ecf1.system.entry.js} +2 -2
  90. package/dist/twilight/p-b4d2ecf1.system.entry.js.map +1 -0
  91. package/dist/twilight/p-c0a87009.system.entry.js +5 -0
  92. package/dist/twilight/p-c0a87009.system.entry.js.map +1 -0
  93. package/dist/twilight/p-ce042888.entry.js.map +1 -1
  94. package/dist/twilight/p-e0cb00aa.entry.js +5 -0
  95. package/dist/twilight/p-e0cb00aa.entry.js.map +1 -0
  96. package/dist/twilight/{p-3d027624.entry.js → p-ea65d3c9.entry.js} +2 -2
  97. package/dist/twilight/{p-37264cdf.system.entry.js → p-ffec6e8f.system.entry.js} +2 -2
  98. package/dist/twilight/twilight.esm.js +1 -1
  99. package/dist/twilight/twilight.js +1 -1
  100. package/dist/types/Helpers/Helper.d.ts +1 -0
  101. package/dist/types/components/salla-filters/salla-filters.d.ts +2 -2
  102. package/dist/types/components/salla-price-range/salla-price-range.d.ts +3 -0
  103. package/dist/types/components/salla-products-list/salla-products-list.d.ts +5 -0
  104. package/dist/types/components.d.ts +12 -1
  105. package/dist/types/global/app.d.ts +1 -5
  106. package/dist/types/index.d.ts +1 -0
  107. package/package.json +3 -3
  108. package/dist/cjs/Helper-f14223e6.js.map +0 -1
  109. package/dist/cjs/app-globals-9ad08b7a.js +0 -4215
  110. package/dist/cjs/app-globals-9ad08b7a.js.map +0 -1
  111. package/dist/esm/Helper-a7971963.js.map +0 -1
  112. package/dist/esm/app-globals-d0d32791.js +0 -4213
  113. package/dist/esm/app-globals-d0d32791.js.map +0 -1
  114. package/dist/esm-es5/Helper-a7971963.js +0 -5
  115. package/dist/esm-es5/Helper-a7971963.js.map +0 -1
  116. package/dist/esm-es5/app-globals-d0d32791.js +0 -25
  117. package/dist/esm-es5/app-globals-d0d32791.js.map +0 -1
  118. package/dist/twilight/p-0bab8332.entry.js.map +0 -1
  119. package/dist/twilight/p-0e716419.entry.js.map +0 -1
  120. package/dist/twilight/p-2042f370.system.js +0 -5
  121. package/dist/twilight/p-2042f370.system.js.map +0 -1
  122. package/dist/twilight/p-5ffffea6.js.map +0 -1
  123. package/dist/twilight/p-aa8e58b9.js +0 -25
  124. package/dist/twilight/p-aa8e58b9.js.map +0 -1
  125. package/dist/twilight/p-bd2b7381.system.js +0 -25
  126. package/dist/twilight/p-bd2b7381.system.js.map +0 -1
  127. package/dist/twilight/p-be148f43.system.entry.js +0 -5
  128. package/dist/twilight/p-be148f43.system.entry.js.map +0 -1
  129. package/dist/twilight/p-c4a4b584.system.entry.js +0 -5
  130. package/dist/twilight/p-c4a4b584.system.entry.js.map +0 -1
  131. package/dist/twilight/p-dd290c58.entry.js +0 -5
  132. package/dist/twilight/p-dd290c58.entry.js.map +0 -1
  133. package/dist/twilight/p-ee9a8735.system.entry.js.map +0 -1
  134. /package/dist/twilight/{p-a378c3be.entry.js.map → p-1342a68f.entry.js.map} +0 -0
  135. /package/dist/twilight/{p-9ab303f5.system.entry.js.map → p-3671b683.system.entry.js.map} +0 -0
  136. /package/dist/twilight/{p-671591bd.system.js.map → p-5f400dc8.system.js.map} +0 -0
  137. /package/dist/twilight/{p-3d027624.entry.js.map → p-ea65d3c9.entry.js.map} +0 -0
  138. /package/dist/twilight/{p-37264cdf.system.entry.js.map → p-ffec6e8f.system.entry.js.map} +0 -0
@@ -1,5 +0,0 @@
1
- var __awaiter=this&&this.__awaiter||function(t,e,r,n){function i(t){return t instanceof r?t:new r((function(e){e(t)}))}return new(r||(r=Promise))((function(r,a){function s(t){try{o(n.next(t))}catch(t){a(t)}}function l(t){try{o(n["throw"](t))}catch(t){a(t)}}function o(t){t.done?r(t.value):i(t.value).then(s,l)}o((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var r={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,i,a,s;return s={next:l(0),throw:l(1),return:l(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function l(t){return function(e){return o([t,e])}}function o(l){if(n)throw new TypeError("Generator is already executing.");while(s&&(s=0,l[0]&&(r=0)),r)try{if(n=1,i&&(a=l[0]&2?i["return"]:l[0]?i["throw"]||((a=i["return"])&&a.call(i),0):i.next)&&!(a=a.call(i,l[1])).done)return a;if(i=0,a)l=[l[0]&2,a.value];switch(l[0]){case 0:case 1:a=l;break;case 4:r.label++;return{value:l[1],done:false};case 5:r.label++;i=l[1];l=[0];continue;case 7:l=r.ops.pop();r.trys.pop();continue;default:if(!(a=r.trys,a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]<a[3])){r.label=l[1];break}if(l[0]===6&&r.label<a[1]){r.label=a[1];a=l;break}if(a&&r.label<a[2]){r.label=a[2];r.ops.push(l);break}if(a[2])r.ops.pop();r.trys.pop();continue}l=e.call(t,r)}catch(t){l=[6,t];i=0}finally{n=a=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:true}}};
2
- /*!
3
- * Crafted with ❤ by Salla
4
- */System.register(["./p-9fcca94b.system.js","./p-01a0d85b.system.js"],(function(t){"use strict";var e,r,n,i,a,s,l;return{setters:[function(t){e=t.r;r=t.c;n=t.h;i=t.H;a=t.g},function(t){s=t.F;l=t.a}],execute:function(){var o=":host{display:block}.s-rating-stars-small{line-height:12px}.s-filters-radio{background-image:none !important}";var f=t("salla_filters",function(){function t(t){var n=this;e(this,t);this.changed=r(this,"changed",7);this.isReady=false;this.filters=undefined;this.isSidebarOpen=undefined;this.filtersData={};this.apply=undefined;this.reset=undefined;salla.event.on("filters::hidden",(function(){return n.host.style.display="none"}));salla.lang.onLoaded((function(){n.apply=salla.lang.get("pages.checkout.apply");n.reset=salla.lang.get("pages.categories.filters_reset")}));salla.event.on("filters::fetched",(function(t){var e=t.filters;n.host.style.display="";var r={};n.filters=e.map((function(t){t.label={category_id:salla.lang.get("common.titles.categories"),brand_id:salla.lang.get("common.titles.brands"),rating:salla.lang.get("pages.categories.filter_rating"),price:salla.lang.get("pages.categories.filter_price")}[t.key]||t.label;t.inputType=s.RADIO;if(t.key=="rating"){t.inputType=s.RADIO;var e=t.values,i=e.max,a=e.min;t.values=[5,4,3,2,1].filter((function(t){return t>=a||t<=i}))}if(n.filtersData[t.key]){r[t.key]=n.filtersData[t.key]}return t}));n.filtersData=r}))}t.prototype.connectedCallback=function(){try{var t=new URLSearchParams(window.location.search).get("filters");this.filtersData=t?JSON.parse(decodeURIComponent(t)):{}}catch(t){salla.logger.warn("failed to get filters from url",t.message)}};t.prototype.getFilters=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){return[2,this.filtersData]}))}))};t.prototype.applyFilters=function(){return __awaiter(this,void 0,void 0,(function(){var t;var e=this;return __generator(this,(function(r){if(!this.isReady){return[2]}t=Object.keys(this.filtersData).length>0;setTimeout((function(){var r;if(t){window.history.pushState({},"",salla.url.addParamToUrl("filters",encodeURIComponent(JSON.stringify(e.filtersData))))}else{var n=new URL(window.location.href);(r=n.searchParams)===null||r===void 0?void 0:r.delete("filters");window.history.pushState({},"",n.toString())}salla.event.emit("salla-filters::changed",e.filtersData);e.changed.emit(e.filtersData)}),300);return[2]}))}))};t.prototype.resetFilters=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.filtersData={};this.host.childNodes.forEach((function(t){return t.reset&&t.reset()}));salla.event.emit("salla-filters::reset");return[2,this.applyFilters()]}))}))};t.prototype.handleOptionChange=function(t,e,r){if(e.type===l.RANGE){this.filtersData[e.key]=r;return}var n=t.target.checked;if(t.target.type==s.RADIO){n&&(this.filtersData[e.key]=r);n||delete this.filtersData[e.key];return}this.filtersData[e.key]=this.filtersData[e.key]||[];if(n){this.filtersData[e.key].push(r);return}this.filtersData[e.key]=this.filtersData[e.key].filter((function(t){return t!=r}))};t.prototype.render=function(){var t=this;var e,r;return n(i,null,(e=this.filters)===null||e===void 0?void 0:e.map((function(e){return n("salla-filters-widget",{option:e,filtersData:t.filtersData,onChanged:function(e){var r=e.detail,n=r.event,i=r.option,a=r.value;return t.handleOptionChange(n,i,a)}})})),((r=this.filters)===null||r===void 0?void 0:r.length)&&n("div",{class:"s-filters-footer"},n("salla-button",{color:"primary",onClick:function(){return t.applyFilters()}},this.apply),n("salla-button",{color:"gray",fill:"outline",onClick:function(){return t.resetFilters()}},this.reset)))};t.prototype.componentDidLoad=function(){this.isReady=true};Object.defineProperty(t.prototype,"host",{get:function(){return a(this)},enumerable:false,configurable:true});return t}());f.style=o}}}));
5
- //# sourceMappingURL=p-be148f43.system.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["sallaFiltersCss","SallaFilters","exports","class_1","hostRef","_this","this","isReady","salla","event","on","host","style","display","lang","onLoaded","apply","get","reset","_c","filters","freshFilterData","map","filter","label","category_id","brand_id","rating","price","key","inputType","FilterOptionInputType","RADIO","values","max_1","max","min_1","min","stars","filtersData","prototype","connectedCallback","URLSearchParams","window","location","search","JSON","parse","decodeURIComponent","e","logger","warn","message","getFilters","applyFilters","hasFilters","Object","keys","length","setTimeout","history","pushState","url","addParamToUrl","encodeURIComponent","stringify","URL","href","_a","searchParams","delete","toString","emit","changed","resetFilters","childNodes","forEach","widget","handleOptionChange","option","value","type","FilterOptionTypes","RANGE","isChecked","target","checked","push","val","render","h","Host","onChanged","_d","detail","_b","class","color","onClick","fill","componentDidLoad"],"sources":["src/components/salla-filters/salla-filters.scss?tag=salla-filters","src/components/salla-filters/salla-filters.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.s-rating-stars-small {\n line-height: 12px;\n}\n.s-filters-radio{\n background-image: none !important;\n}","import { Component, Element, h, Event, EventEmitter, Host, Method, Prop, State } from '@stencil/core';\nimport { Filter, FilterOptionInputType, FilterOptionTypes } from \"./interfaces\";\n\n@Component({\n tag: 'salla-filters',\n styleUrl: 'salla-filters.scss',\n})\nexport class SallaFilters {\n\n constructor() {\n salla.event.on('filters::hidden', () => this.host.style.display = 'none');\n\n salla.lang.onLoaded(() => {\n this.apply = salla.lang.get('pages.checkout.apply');\n this.reset = salla.lang.get('pages.categories.filters_reset');\n });\n\n salla.event.on('filters::fetched', ({ filters }) => {\n this.host.style.display = '';\n let freshFilterData = {};\n this.filters = filters\n .map((filter: Filter) => {\n filter.label = {\n category_id: salla.lang.get('common.titles.categories'),\n brand_id: salla.lang.get('common.titles.brands'),\n rating: salla.lang.get('pages.categories.filter_rating'),\n price: salla.lang.get('pages.categories.filter_price'),\n }[filter.key] || filter.label;\n filter.inputType = FilterOptionInputType.RADIO;//todo:: support FilterOptionInputType.CHECKBOX\n if (filter.key == 'rating') {\n filter.inputType = FilterOptionInputType.RADIO;\n //@ts-ignore\n let { max, min } = filter.values;\n //@ts-ignore\n filter.values = [5, 4, 3, 2, 1].filter(stars => stars >= min || stars <= max)\n }\n\n //when getting new filters, maybe less than we had, so let's get from the old one, only what is existed now.\n if (this.filtersData[filter.key]) {\n freshFilterData[filter.key] = this.filtersData[filter.key];\n }\n\n return filter;\n });\n this.filtersData = freshFilterData;\n });\n }\n\n connectedCallback() {\n try {\n let filters = (new URLSearchParams(window.location.search)).get('filters')\n this.filtersData = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n }\n\n @Element() host: HTMLElement;\n\n /**\n * Array of filter options\n */\n @Prop({ reflect: true, mutable: true }) filters?: Filter[];\n\n private isReady = false;//to avoid triggering the changed event\n\n @State() isSidebarOpen: boolean;\n @State() filtersData: object = {}\n @State() apply: string;\n @State() reset: string;\n\n /**\n * Custom event fired when the selected filters are changed.\n */\n @Event() changed: EventEmitter;\n\n /**\n * Method to get filter data.\n */\n @Method()\n async getFilters() {\n return this.filtersData;\n }\n\n /**\n * Apply filter action.\n */\n @Method()\n async applyFilters() {\n if (!this.isReady) {\n return;\n }\n let hasFilters = Object.keys(this.filtersData).length > 0;\n setTimeout(() => {\n if (hasFilters) {\n window.history.pushState({}, '', salla.url.addParamToUrl('filters', encodeURIComponent(JSON.stringify(this.filtersData))));\n } else {\n let url = new URL(window.location.href);\n url.searchParams?.delete('filters');\n window.history.pushState({}, '', url.toString());\n }\n salla.event.emit('salla-filters::changed', this.filtersData);\n this.changed.emit(this.filtersData);\n }, 300);\n }\n\n /**\n * Reset selected filters.\n */\n @Method()\n async resetFilters() {\n this.filtersData = {};\n this.host.childNodes.forEach((widget: HTMLSallaFiltersWidgetElement) => widget.reset && widget.reset())\n salla.event.emit('salla-filters::reset');\n return this.applyFilters();\n }\n\n /**\n * @param {{target:HTMLInputElement}} event\n * @param option\n * @param value\n * @private\n */\n private handleOptionChange(event, option: Filter, value) {\n if (option.type === FilterOptionTypes.RANGE) {\n this.filtersData[option.key] = value;\n return;\n }\n let isChecked = event.target.checked;\n if (event.target.type == FilterOptionInputType.RADIO) {\n isChecked && (this.filtersData[option.key] = value);\n isChecked || (delete this.filtersData[option.key]);\n return;\n }\n\n //it's checkbox\n this.filtersData[option.key] = this.filtersData[option.key] || [];\n if (isChecked) {\n this.filtersData[option.key].push(value);\n return;\n }\n this.filtersData[option.key] = this.filtersData[option.key].filter(val => val != value);\n }\n\n render() {\n return <Host>\n {this.filters?.map(option => <salla-filters-widget\n option={option}\n filtersData={this.filtersData}\n onChanged={({ detail: { event, option, value } }) => this.handleOptionChange(event, option, value)} />)}\n\n {this.filters?.length && <div class=\"s-filters-footer\">\n <salla-button color='primary' onClick={() => this.applyFilters()}>{this.apply}</salla-button>\n <salla-button color='gray' fill='outline' onClick={() => this.resetFilters()}>{this.reset}</salla-button>\n </div>}\n </Host>;\n }\n\n componentDidLoad() {\n this.isReady = true;\n }\n}\n\n"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- var __awaiter=this&&this.__awaiter||function(t,e,i,n){function r(t){return t instanceof i?t:new i((function(e){e(t)}))}return new(i||(i=Promise))((function(i,s){function o(t){try{l(n.next(t))}catch(t){s(t)}}function a(t){try{l(n["throw"](t))}catch(t){s(t)}}function l(t){t.done?i(t.value):r(t.value).then(o,a)}l((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,r,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(t){return function(e){return l([t,e])}}function l(a){if(n)throw new TypeError("Generator is already executing.");while(o&&(o=0,a[0]&&(i=0)),i)try{if(n=1,r&&(s=a[0]&2?r["return"]:a[0]?r["throw"]||((s=r["return"])&&s.call(r),0):r.next)&&!(s=s.call(r,a[1])).done)return s;if(r=0,s)a=[a[0]&2,s.value];switch(a[0]){case 0:case 1:s=a;break;case 4:i.label++;return{value:a[1],done:false};case 5:i.label++;r=a[1];a=[0];continue;case 7:a=i.ops.pop();i.trys.pop();continue;default:if(!(s=i.trys,s=s.length>0&&s[s.length-1])&&(a[0]===6||a[0]===2)){i=0;continue}if(a[0]===3&&(!s||a[1]>s[0]&&a[1]<s[3])){i.label=a[1];break}if(a[0]===6&&i.label<s[1]){i.label=s[1];s=a;break}if(s&&i.label<s[2]){i.label=s[2];i.ops.push(a);break}if(s[2])i.ops.pop();i.trys.pop();continue}a=e.call(t,i)}catch(t){a=[6,t];r=0}finally{n=s=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};
2
- /*!
3
- * Crafted with ❤ by Salla
4
- */System.register(["./p-9fcca94b.system.js","./p-f6803599.system.js","./p-2042f370.system.js"],(function(t){"use strict";var e,i,n,r,s,o;return{setters:[function(t){e=t.r;i=t.h;n=t.H;r=t.g},function(t){s=t.a},function(t){o=t.H}],execute:function(){var a='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>shopping-bag</title>\n<path d="M28 10.667h-4v-2.667c0-4.412-3.588-8-8-8s-8 3.588-8 8v2.667h-4c-0.736 0-1.333 0.596-1.333 1.333v13.333c0 3.676 2.991 6.667 6.667 6.667h13.333c3.676 0 6.667-2.991 6.667-6.667v-13.333c0-0.737-0.597-1.333-1.333-1.333zM10.667 8c0-2.941 2.392-5.333 5.333-5.333s5.333 2.392 5.333 5.333v2.667h-10.667zM26.667 25.333c0 2.205-1.795 4-4 4h-13.333c-2.205 0-4-1.795-4-4v-12h2.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h10.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h2.667z"></path>\n</svg>\n';var l="";var c=t("salla_products_list",function(){function t(t){e(this,t);this.source=undefined;this.sourceValue=undefined;this.limit=undefined;this.sortBy=undefined;this.filtersResults=undefined;this.horizontalCards=undefined;this.page=1;this.nextPage=undefined;this.hasInfiniteScroll=undefined;this.hasCustomComponent=undefined;this.sourceValueIsValid=undefined;this.placeholderText=undefined;this.isReady=undefined;this.showPlaceholder=undefined;this.parsedFilters=undefined}t.prototype.connectedCallback=function(){var t=this;salla.onReady((function(){t.hasCustomComponent=!!customElements.get("custom-salla-product-card");t.sourceValueIsValid=!!(t.getSourceValue()||t.isSourceWithoutValue());t.hasInfiniteScroll=!["json","selected","related","landing-page"].includes(t.getSource());try{var e=new URLSearchParams(window.location.search);t.sortBy=t.sortBy||e.get("sort")||e.get("by");var i=e.get("filters");t.parsedFilters=i?JSON.parse(decodeURIComponent(i)):{}}catch(t){salla.logger.warn("failed to get filters from url",t.message)}t.buildNextPageUrl();t.createStatusDom();t.isReady=true}));if(!this.sourceValueIsValid){salla.logger.warn("source-value prop is required for source [".concat(this.getSource(),"]"));return}salla.event.on("salla-filters::changed",(function(e){return t.setFilters(e)}))};t.prototype.setFilters=function(t){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(e){if(!!t&&JSON.stringify(this.parsedFilters)===JSON.stringify(t)){return[2]}window.scrollTo({top:0,behavior:"smooth"});this.parsedFilters=t;return[2,this.reload()]}))}))};t.prototype.reload=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){salla.infiniteScroll.destroy(this.infiniteScroll);this.buildNextPageUrl();this.wrapper.innerHTML="";this.init();return[2]}))}))};t.prototype.isFilterable=function(){return salla.config.get("store.settings.product.filters")&&this.filtersResults};t.prototype.isSourceWithoutValue=function(){return["offers","latest","sales"].includes(this.getSource())};t.prototype.animateItems=function(){s({targets:"salla-products-list salla-product-card",opacity:[0,1],duration:1200,translateY:[20,0],delay:function(t,e){return e*100}})};t.prototype.createStatusDom=function(){var t=this;this.status=document.createElement("div");this.status.className="s-infinite-scroll-wrapper";this.status.innerHTML='<div class="s-infinite-scroll-status">\n <p class="s-infinite-scroll-last infinite-scroll-last s-hidden" >'.concat(salla.lang.get("common.elements.end_of_content"),'</p>\n <p class="s-infinite-scroll-error infinite-scroll-error s-hidden">').concat(salla.lang.get("common.elements.failed_to_load_more"),'</p>\n </div>\n <a href="#" class="s-infinite-scroll-btn s-button-btn">\n <span class="s-button-loader s-button-loader-center s-infinite-scroll-btn-loader" style="display: none"></span>\n </a>');this.btnLoader=this.status.querySelector(".s-button-loader");salla.lang.onLoaded((function(){t.status.querySelector(".s-infinite-scroll-last").innerHTML=salla.lang.get("common.elements.end_of_content");t.status.querySelector(".s-infinite-scroll-error").innerHTML=salla.lang.get("common.elements.failed_to_load_more");t.placeholderText=salla.lang.get("pages.categories.no_products")}))};t.prototype.initBaseNextPageUrl=function(t){var e=this;this.nextPage=salla.url.api("products?source=".concat(t));if(this.limit){this.nextPage+="&per_page=".concat(this.limit>32?32:this.limit)}if(this.sortBy){this.nextPage+="&sort=".concat(this.sortBy)}this.nextPage+="&filterable=1";var i=function(t,i){if(["string","number"].includes(typeof i)){n.nextPage+="&filters[".concat(t,"]=").concat(i)}else if(Array.isArray(i)){i.forEach((function(i){return e.nextPage+="&filters[".concat(t,"][]=").concat(i)}))}else if(typeof i==="object"){for(var r=0,s=Object.entries(i);r<s.length;r++){var o=s[r],a=o[0],l=o[1];n.nextPage+="&filters[".concat(t,"][").concat(a,"]=").concat(l)}}};var n=this;for(var r=0,s=Object.entries(this.parsedFilters||{});r<s.length;r++){var o=s[r],a=o[0],l=o[1];i(a,l)}};t.prototype.buildNextPageUrl=function(){var t=this.getSource();if(t==="json"){return}this.initBaseNextPageUrl(t);if(this.isSourceWithoutValue()){return}if(["search","related","landing-page"].includes(t)){this.nextPage+="&source_value=".concat(this.getSourceValue());return}try{this.nextPage+="&source_value[]=".concat(this.getSourceValue().join("&source_value[]="))}catch(e){salla.logger.warn('source-value prop should be array of ids ex source-value="[1,2,3]" for the source ['.concat(t,"]"));this.sourceValueIsValid=false}};t.prototype.loading=function(t){if(t===void 0){t=true}this.btnLoader.style.display=t?"inherit":"none"};t.prototype.getItemHTML=function(t){var e=this.hasCustomComponent?"custom-salla-product-card":"salla-product-card";var i=document.createElement(e);i.product=t;this.applyLandingPageStyles(i);this.applyHorizontalCardStyles(i);return i};t.prototype.applyLandingPageStyles=function(t){if(this.getSource()==="landing-page"&&!this.hasCustomComponent){t.toggleAttribute("hide-add-btn",true);t.classList.add("s-product-card-fit-height")}};t.prototype.applyHorizontalCardStyles=function(t){if(!this.horizontalCards){return}t.setAttribute("horizontal",true);if(!this.hasCustomComponent){t.setAttribute("shadow-on-hover",true)}};t.prototype.getSource=function(){return o.getProductsSource(this.source)};t.prototype.getSourceValue=function(){return o.getProductsSourceValue(this.source,this.sourceValue)};t.prototype.fetchProducts=function(){var t=this;salla.product.api.fetch({source:this.getSource(),source_value:this.getSourceValue(),limit:this.limit}).then((function(e){if(!e.data.length){t.showPlaceholder=true;t.loading(false);return}t.handleResponse(e).forEach((function(e){return t.wrapper.append(e)}))}))};t.prototype.initiateInfiniteScroll=function(){var t=this;var e,i,n;if(!this.hasInfiniteScroll){return}this.host.insertAdjacentElement("beforeend",this.status);this.infiniteScroll=salla.infiniteScroll.initiate(this.wrapper,this.wrapper,{path:function(){return t.nextPage},history:false,nextPage:this.nextPage,scrollThreshold:100},true);(e=this.infiniteScroll)===null||e===void 0?void 0:e.on("request",(function(){return t.loading()}));(i=this.infiniteScroll)===null||i===void 0?void 0:i.on("load",(function(e){var i;if(!((i=e.data)===null||i===void 0?void 0:i.length)&&t.infiniteScroll.pageIndex==2){t.showPlaceholder=true;salla.infiniteScroll.destroy(t.infiniteScroll);t.loading(false);return}else{t.showPlaceholder=false}t.infiniteScroll.appendItems(t.handleResponse(e));if(t.infiniteScroll.pageIndex==2){t.animateItems()}}));(n=this.infiniteScroll)===null||n===void 0?void 0:n.on("error",(function(){t.status.querySelector(".s-infinite-scroll-error").classList.remove("s-hidden");t.loading(false)}));salla.onReady((function(){return salla.infiniteScroll.loadNextPage(t.infiniteScroll)}))};t.prototype.canRender=function(){return this.sourceValueIsValid&&this.isReady};t.prototype.render=function(){var t=this;if(!this.canRender()){return""}if(this.showPlaceholder){return i("div",{class:"s-products-list-placeholder"},i("span",{innerHTML:a}),i("p",null,this.placeholderText))}return i(n,{class:"s-products-list"},i("div",{class:{"s-products-list-wrapper":true,"s-products-list-horizontal-cards":this.horizontalCards&&!this.filtersResults,"s-products-list-vertical-cards":!this.horizontalCards&&!this.filtersResults,"s-products-list-filters-results":this.filtersResults},ref:function(e){return t.wrapper=e}}))};t.prototype.componentDidLoad=function(){var t=this;if(!this.canRender()){return}if(this.getSource()==="json"){if(!this.getSourceValue().length){this.showPlaceholder=true;return}this.getSourceValue().map((function(e){return t.wrapper.append(t.getItemHTML(e))}));return}if(this.getSource()==="selected"||this.getSource()==="landing-page"){if(this.getSource()==="selected"&&!this.getSourceValue().length){this.showPlaceholder=true;return}this.fetchProducts();return}this.init()};t.prototype.init=function(){this.initiateInfiniteScroll();this.loading()};t.prototype.handleResponse=function(t){var e=this;var i;if(t.filters&&this.isFilterable()){this.filtersResults=true;salla.event.emit("filters::fetched",{filters:t.filters})}else if(this.isFilterable()){salla.event.emit("filters::hidden")}this.nextPage=t.cursor?t.cursor.next:this.nextPage;this.loading(false);if(this.hasInfiniteScroll&&!this.nextPage){this.infiniteScroll.option({scrollThreshold:false,loadOnScroll:false});this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden")}return((i=t.data)===null||i===void 0?void 0:i.map((function(t){return e.getItemHTML(t)})))||[]};Object.defineProperty(t.prototype,"host",{get:function(){return r(this)},enumerable:false,configurable:true});return t}());c.style=l}}}));
5
- //# sourceMappingURL=p-c4a4b584.system.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["sallaProductsListCss","SallaProductsList","exports","class_1","prototype","connectedCallback","_this","this","salla","onReady","hasCustomComponent","customElements","get","sourceValueIsValid","getSourceValue","isSourceWithoutValue","hasInfiniteScroll","includes","getSource","searchParams","URLSearchParams","window","location","search","sortBy","filters","parsedFilters","JSON","parse","decodeURIComponent","e","logger","warn","message","buildNextPageUrl","createStatusDom","isReady","concat","event","on","setFilters","stringify","scrollTo","top","behavior","reload","infiniteScroll","destroy","wrapper","innerHTML","init","isFilterable","config","filtersResults","animateItems","anime","targets","opacity","duration","translateY","delay","_el","i","status","document","createElement","className","lang","btnLoader","querySelector","onLoaded","placeholderText","initBaseNextPageUrl","source","nextPage","url","api","limit","key","value","this_1","Array","isArray","forEach","item","_f","_g","Object","entries","length","_h","k","v","_i","_d","_e","join","loading","isLoading","style","display","getItemHTML","product","customComponentTag","productCard","applyLandingPageStyles","applyHorizontalCardStyles","toggleAttribute","classList","add","horizontalCards","setAttribute","Helper","getProductsSource","getProductsSourceValue","sourceValue","fetchProducts","fetch","source_value","then","res","data","showPlaceholder","handleResponse","card","append","initiateInfiniteScroll","host","insertAdjacentElement","initiate","path","history","scrollThreshold","_a","_b","response","pageIndex","appendItems","_c","remove","loadNextPage","canRender","render","h","class","ShoppingBag","Host","ref","componentDidLoad","map","emit","cursor","next","option","loadOnScroll"],"sources":["src/components/salla-products-list/salla-products-list.scss?tag=salla-products-list","src/components/salla-products-list/salla-products-list.tsx"],"sourcesContent":["\n","import { Component, Host, h, Prop, State, Element, Method } from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\nimport Helper from '../../Helpers/Helper';\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n connectedCallback() {\n salla.onReady(() => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource());\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n this.buildNextPageUrl();\n this.createStatusDom();\n\n this.isReady = true;\n });\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n\n\n }\n\n /**\n * Set parsed filters data from URI\n * @param filters\n */\n @Method()\n async setFilters(filters) {\n if (!!filters && JSON.stringify(this.parsedFilters) === JSON.stringify(filters)) {\n return;\n }\n window.scrollTo({ top: 0, behavior: 'smooth' });\n this.parsedFilters = filters;\n return this.reload();\n }\n\n /**\n * Reload the list of products (entire content of the component).\n */\n @Method()\n async reload() {\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.buildNextPageUrl();\n // TODO: this is problematic in testing, for the time being it's been resolved like this\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({ mutable: true }) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({ mutable: true }) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({ mutable: true }) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({ reflect: true, mutable: true }) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({ reflect: true }) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private initBaseNextPageUrl(source: string) {\n\n this.nextPage = salla.url.api(`products?source=${source}`);\n\n if (this.limit) {\n this.nextPage += `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n this.nextPage += `&sort=${this.sortBy}`;\n }\n // if (!this.isFilterable()) {\n // return this.nextPage;\n // }\n this.nextPage += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if ([\"string\", \"number\"].includes(typeof value)) {\n this.nextPage += `&filters[${key}]=${value}`;\n } else if (Array.isArray(value)) {\n (value as any).forEach(item => this.nextPage += `&filters[${key}][]=${item}`)\n } else if (typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n this.nextPage += `&filters[${key}][${k}]=${v}`;\n }\n }\n }\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n this.initBaseNextPageUrl(source);\n if (this.isSourceWithoutValue()) {\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage += `&source_value=${this.getSourceValue()}`;\n return;\n }\n\n try {\n this.nextPage += `&source_value[]=${this.getSourceValue().join('&source_value[]=')}`;\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n const customComponentTag = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n const productCard = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n productCard.product = product;\n\n this.applyLandingPageStyles(productCard);\n this.applyHorizontalCardStyles(productCard);\n\n return productCard;\n }\n\n private applyLandingPageStyles(productCard) {\n if (this.getSource() === 'landing-page' && !this.hasCustomComponent) {\n productCard.toggleAttribute('hide-add-btn', true);\n productCard.classList.add('s-product-card-fit-height');\n }\n }\n\n private applyHorizontalCardStyles(productCard) {\n if (!this.horizontalCards) {\n return;\n }\n productCard.setAttribute('horizontal', true);\n if (!this.hasCustomComponent) {\n productCard.setAttribute('shadow-on-hover', true);\n }\n\n }\n\n private getSource() {\n return Helper.getProductsSource(this.source);\n }\n\n private getSourceValue() {\n return Helper.getProductsSourceValue(this.source, this.sourceValue);\n }\n\n private fetchProducts() {\n salla.product.api.fetch({\n source: this.getSource(),\n source_value: this.getSourceValue(),\n limit: this.limit\n })\n .then(res => {\n if (!res.data.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n })\n }\n\n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll?.on('request', () => this.loading())\n this.infiniteScroll?.on('load', response => {\n if (!response.data?.length && this.infiniteScroll.pageIndex == 2) {\n this.showPlaceholder = true;\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.loading(false);\n return;\n } else {\n this.showPlaceholder = false;\n\n }\n this.infiniteScroll.appendItems(this.handleResponse(response))\n if (this.infiniteScroll.pageIndex == 2) {\n this.animateItems();\n }\n })\n this.infiniteScroll?.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n salla.onReady(() => salla.infiniteScroll.loadNextPage(this.infiniteScroll))\n }\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag} />\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper} />\n </Host>\n );\n }\n\n componentDidLoad() {\n if (!this.canRender()) {\n return;\n }\n\n // Handle json source\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n return;\n }\n // Handle selected source\n if (this.getSource() === 'selected' || this.getSource() === 'landing-page') {\n if (this.getSource() === 'selected' && !this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.fetchProducts()\n return;\n }\n this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n }\n\n private handleResponse(response): Array<HTMLElement> {\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n this.filtersResults = true;\n salla.event.emit('filters::fetched', { filters: response.filters });\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({ scrollThreshold: false, loadOnScroll: false });\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Crafted with ❤ by Salla
3
- */
4
- import{r as s,h as t,H as i,g as e}from"./p-c76c4ed2.js";import{a as r}from"./p-201c8085.js";import{H as l}from"./p-5ffffea6.js";const n=`\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>shopping-bag</title>\n<path d="M28 10.667h-4v-2.667c0-4.412-3.588-8-8-8s-8 3.588-8 8v2.667h-4c-0.736 0-1.333 0.596-1.333 1.333v13.333c0 3.676 2.991 6.667 6.667 6.667h13.333c3.676 0 6.667-2.991 6.667-6.667v-13.333c0-0.737-0.597-1.333-1.333-1.333zM10.667 8c0-2.941 2.392-5.333 5.333-5.333s5.333 2.392 5.333 5.333v2.667h-10.667zM26.667 25.333c0 2.205-1.795 4-4 4h-13.333c-2.205 0-4-1.795-4-4v-12h2.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h10.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h2.667z"></path>\n</svg>\n`;const h="";const a=class{constructor(t){s(this,t);this.source=undefined;this.sourceValue=undefined;this.limit=undefined;this.sortBy=undefined;this.filtersResults=undefined;this.horizontalCards=undefined;this.page=1;this.nextPage=undefined;this.hasInfiniteScroll=undefined;this.hasCustomComponent=undefined;this.sourceValueIsValid=undefined;this.placeholderText=undefined;this.isReady=undefined;this.showPlaceholder=undefined;this.parsedFilters=undefined}connectedCallback(){salla.onReady((()=>{this.hasCustomComponent=!!customElements.get("custom-salla-product-card");this.sourceValueIsValid=!!(this.getSourceValue()||this.isSourceWithoutValue());this.hasInfiniteScroll=!["json","selected","related","landing-page"].includes(this.getSource());try{let s=new URLSearchParams(window.location.search);this.sortBy=this.sortBy||s.get("sort")||s.get("by");let t=s.get("filters");this.parsedFilters=t?JSON.parse(decodeURIComponent(t)):{}}catch(s){salla.logger.warn("failed to get filters from url",s.message)}this.buildNextPageUrl();this.createStatusDom();this.isReady=true}));if(!this.sourceValueIsValid){salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);return}salla.event.on("salla-filters::changed",(s=>this.setFilters(s)))}async setFilters(s){if(!!s&&JSON.stringify(this.parsedFilters)===JSON.stringify(s)){return}window.scrollTo({top:0,behavior:"smooth"});this.parsedFilters=s;return this.reload()}async reload(){salla.infiniteScroll.destroy(this.infiniteScroll);this.buildNextPageUrl();this.wrapper.innerHTML="";this.init()}isFilterable(){return salla.config.get("store.settings.product.filters")&&this.filtersResults}isSourceWithoutValue(){return["offers","latest","sales"].includes(this.getSource())}animateItems(){r({targets:"salla-products-list salla-product-card",opacity:[0,1],duration:1200,translateY:[20,0],delay:function(s,t){return t*100}})}createStatusDom(){this.status=document.createElement("div");this.status.className="s-infinite-scroll-wrapper";this.status.innerHTML=`<div class="s-infinite-scroll-status">\n <p class="s-infinite-scroll-last infinite-scroll-last s-hidden" >${salla.lang.get("common.elements.end_of_content")}</p>\n <p class="s-infinite-scroll-error infinite-scroll-error s-hidden">${salla.lang.get("common.elements.failed_to_load_more")}</p>\n </div>\n <a href="#" class="s-infinite-scroll-btn s-button-btn">\n <span class="s-button-loader s-button-loader-center s-infinite-scroll-btn-loader" style="display: none"></span>\n </a>`;this.btnLoader=this.status.querySelector(".s-button-loader");salla.lang.onLoaded((()=>{this.status.querySelector(".s-infinite-scroll-last").innerHTML=salla.lang.get("common.elements.end_of_content");this.status.querySelector(".s-infinite-scroll-error").innerHTML=salla.lang.get("common.elements.failed_to_load_more");this.placeholderText=salla.lang.get("pages.categories.no_products")}))}initBaseNextPageUrl(s){this.nextPage=salla.url.api(`products?source=${s}`);if(this.limit){this.nextPage+=`&per_page=${this.limit>32?32:this.limit}`}if(this.sortBy){this.nextPage+=`&sort=${this.sortBy}`}this.nextPage+="&filterable=1";for(const[s,t]of Object.entries(this.parsedFilters||{})){if(["string","number"].includes(typeof t)){this.nextPage+=`&filters[${s}]=${t}`}else if(Array.isArray(t)){t.forEach((t=>this.nextPage+=`&filters[${s}][]=${t}`))}else if(typeof t==="object"){for(const[i,e]of Object.entries(t)){this.nextPage+=`&filters[${s}][${i}]=${e}`}}}}buildNextPageUrl(){let s=this.getSource();if(s==="json"){return}this.initBaseNextPageUrl(s);if(this.isSourceWithoutValue()){return}if(["search","related","landing-page"].includes(s)){this.nextPage+=`&source_value=${this.getSourceValue()}`;return}try{this.nextPage+=`&source_value[]=${this.getSourceValue().join("&source_value[]=")}`}catch(t){salla.logger.warn(`source-value prop should be array of ids ex source-value="[1,2,3]" for the source [${s}]`);this.sourceValueIsValid=false}}loading(s=true){this.btnLoader.style.display=s?"inherit":"none"}getItemHTML(s){const t=this.hasCustomComponent?"custom-salla-product-card":"salla-product-card";const i=document.createElement(t);i.product=s;this.applyLandingPageStyles(i);this.applyHorizontalCardStyles(i);return i}applyLandingPageStyles(s){if(this.getSource()==="landing-page"&&!this.hasCustomComponent){s.toggleAttribute("hide-add-btn",true);s.classList.add("s-product-card-fit-height")}}applyHorizontalCardStyles(s){if(!this.horizontalCards){return}s.setAttribute("horizontal",true);if(!this.hasCustomComponent){s.setAttribute("shadow-on-hover",true)}}getSource(){return l.getProductsSource(this.source)}getSourceValue(){return l.getProductsSourceValue(this.source,this.sourceValue)}fetchProducts(){salla.product.api.fetch({source:this.getSource(),source_value:this.getSourceValue(),limit:this.limit}).then((s=>{if(!s.data.length){this.showPlaceholder=true;this.loading(false);return}this.handleResponse(s).forEach((s=>this.wrapper.append(s)))}))}initiateInfiniteScroll(){var s,t,i;if(!this.hasInfiniteScroll){return}this.host.insertAdjacentElement("beforeend",this.status);this.infiniteScroll=salla.infiniteScroll.initiate(this.wrapper,this.wrapper,{path:()=>this.nextPage,history:false,nextPage:this.nextPage,scrollThreshold:100},true);(s=this.infiniteScroll)===null||s===void 0?void 0:s.on("request",(()=>this.loading()));(t=this.infiniteScroll)===null||t===void 0?void 0:t.on("load",(s=>{var t;if(!((t=s.data)===null||t===void 0?void 0:t.length)&&this.infiniteScroll.pageIndex==2){this.showPlaceholder=true;salla.infiniteScroll.destroy(this.infiniteScroll);this.loading(false);return}else{this.showPlaceholder=false}this.infiniteScroll.appendItems(this.handleResponse(s));if(this.infiniteScroll.pageIndex==2){this.animateItems()}}));(i=this.infiniteScroll)===null||i===void 0?void 0:i.on("error",(()=>{this.status.querySelector(".s-infinite-scroll-error").classList.remove("s-hidden");this.loading(false)}));salla.onReady((()=>salla.infiniteScroll.loadNextPage(this.infiniteScroll)))}canRender(){return this.sourceValueIsValid&&this.isReady}render(){if(!this.canRender()){return""}if(this.showPlaceholder){return t("div",{class:"s-products-list-placeholder"},t("span",{innerHTML:n}),t("p",null,this.placeholderText))}return t(i,{class:"s-products-list"},t("div",{class:{"s-products-list-wrapper":true,"s-products-list-horizontal-cards":this.horizontalCards&&!this.filtersResults,"s-products-list-vertical-cards":!this.horizontalCards&&!this.filtersResults,"s-products-list-filters-results":this.filtersResults},ref:s=>this.wrapper=s}))}componentDidLoad(){if(!this.canRender()){return}if(this.getSource()==="json"){if(!this.getSourceValue().length){this.showPlaceholder=true;return}this.getSourceValue().map((s=>this.wrapper.append(this.getItemHTML(s))));return}if(this.getSource()==="selected"||this.getSource()==="landing-page"){if(this.getSource()==="selected"&&!this.getSourceValue().length){this.showPlaceholder=true;return}this.fetchProducts();return}this.init()}init(){this.initiateInfiniteScroll();this.loading()}handleResponse(s){var t;if(s.filters&&this.isFilterable()){this.filtersResults=true;salla.event.emit("filters::fetched",{filters:s.filters})}else if(this.isFilterable()){salla.event.emit("filters::hidden")}this.nextPage=s.cursor?s.cursor.next:this.nextPage;this.loading(false);if(this.hasInfiniteScroll&&!this.nextPage){this.infiniteScroll.option({scrollThreshold:false,loadOnScroll:false});this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden")}return((t=s.data)===null||t===void 0?void 0:t.map((s=>this.getItemHTML(s))))||[]}get host(){return e(this)}};a.style=h;export{a as salla_products_list};
5
- //# sourceMappingURL=p-dd290c58.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["sallaProductsListCss","SallaProductsList","connectedCallback","salla","onReady","this","hasCustomComponent","customElements","get","sourceValueIsValid","getSourceValue","isSourceWithoutValue","hasInfiniteScroll","includes","getSource","searchParams","URLSearchParams","window","location","search","sortBy","filters","parsedFilters","JSON","parse","decodeURIComponent","e","logger","warn","message","buildNextPageUrl","createStatusDom","isReady","event","on","setFilters","async","stringify","scrollTo","top","behavior","reload","infiniteScroll","destroy","wrapper","innerHTML","init","isFilterable","config","filtersResults","animateItems","anime","targets","opacity","duration","translateY","delay","_el","i","status","document","createElement","className","lang","btnLoader","querySelector","onLoaded","placeholderText","initBaseNextPageUrl","source","nextPage","url","api","limit","key","value","Object","entries","Array","isArray","forEach","item","k","v","join","loading","isLoading","style","display","getItemHTML","product","customComponentTag","productCard","applyLandingPageStyles","applyHorizontalCardStyles","toggleAttribute","classList","add","horizontalCards","setAttribute","Helper","getProductsSource","getProductsSourceValue","sourceValue","fetchProducts","fetch","source_value","then","res","data","length","showPlaceholder","handleResponse","card","append","initiateInfiniteScroll","host","insertAdjacentElement","initiate","path","history","scrollThreshold","_a","_b","response","pageIndex","appendItems","_c","remove","loadNextPage","canRender","render","h","class","ShoppingBag","Host","ref","componentDidLoad","map","emit","cursor","next","option","loadOnScroll"],"sources":["./src/components/salla-products-list/salla-products-list.scss?tag=salla-products-list","./src/components/salla-products-list/salla-products-list.tsx"],"sourcesContent":["\n","import { Component, Host, h, Prop, State, Element, Method } from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\nimport Helper from '../../Helpers/Helper';\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n connectedCallback() {\n salla.onReady(() => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource());\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n this.buildNextPageUrl();\n this.createStatusDom();\n\n this.isReady = true;\n });\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n\n\n }\n\n /**\n * Set parsed filters data from URI\n * @param filters\n */\n @Method()\n async setFilters(filters) {\n if (!!filters && JSON.stringify(this.parsedFilters) === JSON.stringify(filters)) {\n return;\n }\n window.scrollTo({ top: 0, behavior: 'smooth' });\n this.parsedFilters = filters;\n return this.reload();\n }\n\n /**\n * Reload the list of products (entire content of the component).\n */\n @Method()\n async reload() {\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.buildNextPageUrl();\n // TODO: this is problematic in testing, for the time being it's been resolved like this\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({ mutable: true }) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({ mutable: true }) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({ mutable: true }) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({ reflect: true, mutable: true }) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({ reflect: true }) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private initBaseNextPageUrl(source: string) {\n\n this.nextPage = salla.url.api(`products?source=${source}`);\n\n if (this.limit) {\n this.nextPage += `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n this.nextPage += `&sort=${this.sortBy}`;\n }\n // if (!this.isFilterable()) {\n // return this.nextPage;\n // }\n this.nextPage += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if ([\"string\", \"number\"].includes(typeof value)) {\n this.nextPage += `&filters[${key}]=${value}`;\n } else if (Array.isArray(value)) {\n (value as any).forEach(item => this.nextPage += `&filters[${key}][]=${item}`)\n } else if (typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n this.nextPage += `&filters[${key}][${k}]=${v}`;\n }\n }\n }\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n this.initBaseNextPageUrl(source);\n if (this.isSourceWithoutValue()) {\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage += `&source_value=${this.getSourceValue()}`;\n return;\n }\n\n try {\n this.nextPage += `&source_value[]=${this.getSourceValue().join('&source_value[]=')}`;\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n const customComponentTag = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n const productCard = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n productCard.product = product;\n\n this.applyLandingPageStyles(productCard);\n this.applyHorizontalCardStyles(productCard);\n\n return productCard;\n }\n\n private applyLandingPageStyles(productCard) {\n if (this.getSource() === 'landing-page' && !this.hasCustomComponent) {\n productCard.toggleAttribute('hide-add-btn', true);\n productCard.classList.add('s-product-card-fit-height');\n }\n }\n\n private applyHorizontalCardStyles(productCard) {\n if (!this.horizontalCards) {\n return;\n }\n productCard.setAttribute('horizontal', true);\n if (!this.hasCustomComponent) {\n productCard.setAttribute('shadow-on-hover', true);\n }\n\n }\n\n private getSource() {\n return Helper.getProductsSource(this.source);\n }\n\n private getSourceValue() {\n return Helper.getProductsSourceValue(this.source, this.sourceValue);\n }\n\n private fetchProducts() {\n salla.product.api.fetch({\n source: this.getSource(),\n source_value: this.getSourceValue(),\n limit: this.limit\n })\n .then(res => {\n if (!res.data.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n })\n }\n\n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll?.on('request', () => this.loading())\n this.infiniteScroll?.on('load', response => {\n if (!response.data?.length && this.infiniteScroll.pageIndex == 2) {\n this.showPlaceholder = true;\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.loading(false);\n return;\n } else {\n this.showPlaceholder = false;\n\n }\n this.infiniteScroll.appendItems(this.handleResponse(response))\n if (this.infiniteScroll.pageIndex == 2) {\n this.animateItems();\n }\n })\n this.infiniteScroll?.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n salla.onReady(() => salla.infiniteScroll.loadNextPage(this.infiniteScroll))\n }\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag} />\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper} />\n </Host>\n );\n }\n\n componentDidLoad() {\n if (!this.canRender()) {\n return;\n }\n\n // Handle json source\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n return;\n }\n // Handle selected source\n if (this.getSource() === 'selected' || this.getSource() === 'landing-page') {\n if (this.getSource() === 'selected' && !this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.fetchProducts()\n return;\n }\n this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n }\n\n private handleResponse(response): Array<HTMLElement> {\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n this.filtersResults = true;\n salla.event.emit('filters::fetched', { filters: response.filters });\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({ scrollThreshold: false, loadOnScroll: false });\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"],"mappings":";;;u1BAAA,MAAMA,EAAuB,G,MCQhBC,EAAiB,M,4LAsGJ,E,+OArGxBC,oBACEC,MAAMC,SAAQ,KACZC,KAAKC,qBAAuBC,eAAeC,IAAI,6BAC/CH,KAAKI,sBAAwBJ,KAAKK,kBAAoBL,KAAKM,wBAC3DN,KAAKO,mBAAqB,CAAC,OAAQ,WAAY,UAAW,gBAAgBC,SAASR,KAAKS,aACxF,IACE,IAAIC,EAAe,IAAIC,gBAAgBC,OAAOC,SAASC,QACvDd,KAAKe,OAASf,KAAKe,QAAUL,EAAaP,IAAI,SAAWO,EAAaP,IAAI,MAC1E,IAAIa,EAAUN,EAAaP,IAAI,WAC/BH,KAAKiB,cAAgBD,EAAUE,KAAKC,MAAMC,mBAAmBJ,IAAY,E,CACzE,MAAOK,GACPvB,MAAMwB,OAAOC,KAAK,iCAAkCF,EAAEG,Q,CAExDxB,KAAKyB,mBACLzB,KAAK0B,kBAEL1B,KAAK2B,QAAU,IAAI,IAGrB,IAAK3B,KAAKI,mBAAoB,CAC5BN,MAAMwB,OAAOC,KAAK,6CAA6CvB,KAAKS,gBACpE,M,CAEFX,MAAM8B,MAAMC,GAAG,0BAA0Bb,GAAWhB,KAAK8B,WAAWd,I,CAUtEe,iBAAiBf,GACf,KAAMA,GAAWE,KAAKc,UAAUhC,KAAKiB,iBAAmBC,KAAKc,UAAUhB,GAAU,CAC/E,M,CAEFJ,OAAOqB,SAAS,CAAEC,IAAK,EAAGC,SAAU,WACpCnC,KAAKiB,cAAgBD,EACrB,OAAOhB,KAAKoC,Q,CAOdL,eACEjC,MAAMuC,eAAeC,QAAQtC,KAAKqC,gBAClCrC,KAAKyB,mBAELzB,KAAKuC,QAAQC,UAAY,GACzBxC,KAAKyC,M,CA4DCC,eACN,OAAO5C,MAAM6C,OAAOxC,IAAI,mCAAqCH,KAAK4C,c,CAG5DtC,uBACN,MAAO,CAAC,SAAU,SAAU,SAASE,SAASR,KAAKS,Y,CAG7CoC,eACNC,EAAM,CACJC,QAAS,yCACTC,QAAS,CAAC,EAAG,GACbC,SAAU,KACVC,WAAY,CAAC,GAAI,GACjBC,MAAO,SAAUC,EAAKC,GACpB,OAAOA,EAAI,G,IAKT3B,kBACN1B,KAAKsD,OAASC,SAASC,cAAc,OACrCxD,KAAKsD,OAAOG,UAAY,4BACxBzD,KAAKsD,OAAOd,UAAY,oHAC+C1C,MAAM4D,KAAKvD,IAAI,oHACdL,MAAM4D,KAAKvD,IAAI,+PAKvFH,KAAK2D,UAAY3D,KAAKsD,OAAOM,cAAc,oBAC3C9D,MAAM4D,KAAKG,UAAS,KAClB7D,KAAKsD,OAAOM,cAAc,2BAA2BpB,UAAY1C,MAAM4D,KAAKvD,IAAI,kCAChFH,KAAKsD,OAAOM,cAAc,4BAA4BpB,UAAY1C,MAAM4D,KAAKvD,IAAI,uCACjFH,KAAK8D,gBAAkBhE,MAAM4D,KAAKvD,IAAI,+BAA+B,G,CAIjE4D,oBAAoBC,GAE1BhE,KAAKiE,SAAWnE,MAAMoE,IAAIC,IAAI,mBAAmBH,KAEjD,GAAIhE,KAAKoE,MAAO,CACdpE,KAAKiE,UAAY,aAAajE,KAAKoE,MAAQ,GAAK,GAAKpE,KAAKoE,O,CAE5D,GAAIpE,KAAKe,OAAQ,CACff,KAAKiE,UAAY,SAASjE,KAAKe,Q,CAKjCf,KAAKiE,UAAY,gBACjB,IAAK,MAAOI,EAAKC,KAAUC,OAAOC,QAAQxE,KAAKiB,eAAiB,IAAK,CACnE,GAAI,CAAC,SAAU,UAAUT,gBAAgB8D,GAAQ,CAC/CtE,KAAKiE,UAAY,YAAYI,MAAQC,G,MAChC,GAAIG,MAAMC,QAAQJ,GAAQ,CAC9BA,EAAcK,SAAQC,GAAQ5E,KAAKiE,UAAY,YAAYI,QAAUO,K,MACjE,UAAWN,IAAU,SAAU,CACpC,IAAK,MAAOO,EAAGC,KAAMP,OAAOC,QAAQF,GAAQ,CAC1CtE,KAAKiE,UAAY,YAAYI,MAAQQ,MAAMC,G,IAM3CrD,mBACN,IAAIuC,EAAShE,KAAKS,YAClB,GAAIuD,IAAW,OAAQ,CACrB,M,CAEFhE,KAAK+D,oBAAoBC,GACzB,GAAIhE,KAAKM,uBAAwB,CAC/B,M,CAGF,GAAI,CAAC,SAAU,UAAW,gBAAgBE,SAASwD,GAAS,CAC1DhE,KAAKiE,UAAY,iBAAiBjE,KAAKK,mBACvC,M,CAGF,IACEL,KAAKiE,UAAY,mBAAmBjE,KAAKK,iBAAiB0E,KAAK,qB,CAC/D,MAAO1D,GACPvB,MAAMwB,OAAOC,KAAK,sFAAsFyC,MACxGhE,KAAKI,mBAAqB,K,EAKtB4E,QAAQC,EAAY,MAC1BjF,KAAK2D,UAAUuB,MAAMC,QAAUF,EAAY,UAAY,M,CAGjDG,YAAYC,GAClB,MAAMC,EAAqBtF,KAAKC,mBAAqB,4BAA8B,qBACnF,MAAMsF,EAAchC,SAASC,cAAc8B,GAC3CC,EAAYF,QAAUA,EAEtBrF,KAAKwF,uBAAuBD,GAC5BvF,KAAKyF,0BAA0BF,GAE/B,OAAOA,C,CAGDC,uBAAuBD,GAC7B,GAAIvF,KAAKS,cAAgB,iBAAmBT,KAAKC,mBAAoB,CACnEsF,EAAYG,gBAAgB,eAAgB,MAC5CH,EAAYI,UAAUC,IAAI,4B,EAItBH,0BAA0BF,GAChC,IAAKvF,KAAK6F,gBAAiB,CACzB,M,CAEFN,EAAYO,aAAa,aAAc,MACvC,IAAK9F,KAAKC,mBAAoB,CAC5BsF,EAAYO,aAAa,kBAAmB,K,EAKxCrF,YACN,OAAOsF,EAAOC,kBAAkBhG,KAAKgE,O,CAG/B3D,iBACN,OAAO0F,EAAOE,uBAAuBjG,KAAKgE,OAAQhE,KAAKkG,Y,CAGjDC,gBACNrG,MAAMuF,QAAQlB,IAAIiC,MAAM,CACtBpC,OAAQhE,KAAKS,YACb4F,aAAcrG,KAAKK,iBACnB+D,MAAOpE,KAAKoE,QAEXkC,MAAKC,IACJ,IAAKA,EAAIC,KAAKC,OAAQ,CACpBzG,KAAK0G,gBAAkB,KACvB1G,KAAKgF,QAAQ,OACb,M,CAEFhF,KAAK2G,eAAeJ,GAAK5B,SAAQiC,GAAQ5G,KAAKuC,QAAQsE,OAAOD,IAAM,G,CAIjEE,yB,UACN,IAAK9G,KAAKO,kBAAmB,CAC3B,M,CAGFP,KAAK+G,KAAKC,sBAAsB,YAAahH,KAAKsD,QAClDtD,KAAKqC,eAAiBvC,MAAMuC,eAAe4E,SAASjH,KAAKuC,QAASvC,KAAKuC,QAAS,CAC9E2E,KAAM,IAAMlH,KAAKiE,SACjBkD,QAAS,MACTlD,SAAUjE,KAAKiE,SACfmD,gBAAiB,KACK,OACxBC,EAAArH,KAAKqC,kBAAc,MAAAgF,SAAA,SAAAA,EAAExF,GAAG,WAAW,IAAM7B,KAAKgF,aAC9CsC,EAAAtH,KAAKqC,kBAAc,MAAAiF,SAAA,SAAAA,EAAEzF,GAAG,QAAQ0F,I,MAC9B,MAAKF,EAAAE,EAASf,QAAI,MAAAa,SAAA,SAAAA,EAAEZ,SAAUzG,KAAKqC,eAAemF,WAAa,EAAG,CAChExH,KAAK0G,gBAAkB,KACvB5G,MAAMuC,eAAeC,QAAQtC,KAAKqC,gBAClCrC,KAAKgF,QAAQ,OACb,M,KACK,CACLhF,KAAK0G,gBAAkB,K,CAGzB1G,KAAKqC,eAAeoF,YAAYzH,KAAK2G,eAAeY,IACpD,GAAIvH,KAAKqC,eAAemF,WAAa,EAAG,CACtCxH,KAAK6C,c,MAGT6E,EAAA1H,KAAKqC,kBAAc,MAAAqF,SAAA,SAAAA,EAAE7F,GAAG,SAAS,KAC/B7B,KAAKsD,OAAOM,cAAc,4BAA4B+B,UAAUgC,OAAO,YACvE3H,KAAKgF,QAAQ,MAAM,IAErBlF,MAAMC,SAAQ,IAAMD,MAAMuC,eAAeuF,aAAa5H,KAAKqC,iB,CAGrDwF,YACN,OAAO7H,KAAKI,oBAAsBJ,KAAK2B,O,CAGzCmG,SACE,IAAK9H,KAAK6H,YAAa,CACrB,MAAO,E,CAET,GAAI7H,KAAK0G,gBAAiB,CACxB,OAAOqB,EAAA,OAAKC,MAAM,+BAChBD,EAAA,QAAMvF,UAAWyF,IACjBF,EAAA,SAAI/H,KAAK8D,iB,CAGb,OACEiE,EAACG,EAAI,CAACF,MAAM,mBACVD,EAAA,OAAKC,MAAO,CACV,0BAA2B,KAC3B,mCAAoChI,KAAK6F,kBAAoB7F,KAAK4C,eAClE,kCAAmC5C,KAAK6F,kBAAoB7F,KAAK4C,eACjE,kCAAmC5C,KAAK4C,gBAExCuF,IAAK5F,GAAWvC,KAAKuC,QAAUA,I,CAKvC6F,mBACE,IAAKpI,KAAK6H,YAAa,CACrB,M,CAIF,GAAI7H,KAAKS,cAAgB,OAAQ,CAC/B,IAAKT,KAAKK,iBAAiBoG,OAAQ,CACjCzG,KAAK0G,gBAAkB,KACvB,M,CAEF1G,KAAKK,iBAAiBgI,KAAIhD,GAAWrF,KAAKuC,QAAQsE,OAAO7G,KAAKoF,YAAYC,MAC1E,M,CAGF,GAAIrF,KAAKS,cAAgB,YAAcT,KAAKS,cAAgB,eAAgB,CAC1E,GAAIT,KAAKS,cAAgB,aAAeT,KAAKK,iBAAiBoG,OAAQ,CACpEzG,KAAK0G,gBAAkB,KACvB,M,CAEF1G,KAAKmG,gBACL,M,CAEFnG,KAAKyC,M,CAGCA,OACNzC,KAAK8G,yBACL9G,KAAKgF,S,CAGC2B,eAAeY,G,MAErB,GAAIA,EAASvG,SAAWhB,KAAK0C,eAAgB,CAC3C1C,KAAK4C,eAAiB,KACtB9C,MAAM8B,MAAM0G,KAAK,mBAAoB,CAAEtH,QAASuG,EAASvG,S,MACpD,GAAIhB,KAAK0C,eAAgB,CAC9B5C,MAAM8B,MAAM0G,KAAK,kB,CAEnBtI,KAAKiE,SAAWsD,EAASgB,OAAShB,EAASgB,OAAOC,KAAOxI,KAAKiE,SAC9DjE,KAAKgF,QAAQ,OACb,GAAIhF,KAAKO,oBAAsBP,KAAKiE,SAAU,CAC5CjE,KAAKqC,eAAeoG,OAAO,CAAErB,gBAAiB,MAAOsB,aAAc,QACnE1I,KAAKsD,OAAOM,cAAc,2BAA2B+B,UAAUgC,OAAO,W,CAExE,QAAON,EAAAE,EAASf,QAAI,MAAAa,SAAA,SAAAA,EAAEgB,KAAIhD,GAAWrF,KAAKoF,YAAYC,OAAa,E"}